* src/reader.c (parse_thong_decl): Formatting changes.

(token_translations_init): New, extracted from...
(packsymbols): Here.
Adjust.
This commit is contained in:
Akim Demaille
2001-11-02 14:02:31 +00:00
parent 1d708336d4
commit 7ae1c5929e
4 changed files with 77 additions and 45 deletions

View File

@@ -1,3 +1,10 @@
2001-11-02 Akim Demaille <akim@epita.fr>
* src/reader.c (parse_thong_decl): Formatting changes.
(token_translations_init): New, extracted from...
(packsymbols): Here.
Adjust.
2001-11-01 Akim Demaille <akim@epita.fr>
* tests/regression.at (AT_TEST_CPP_GUARD_H): New.

4
NEWS
View File

@@ -2,6 +2,10 @@ Bison News
----------
Changes in version 1.30a:
* Fixed incorrect processing of some invalid input.
* Fixed CPP guards: 9foo.h uses BISON_9FOO_H instead of 9FOO_H.
Changes in version 1.30:

1
THANKS
View File

@@ -7,6 +7,7 @@ Albert Chin-A-Young china@thewrittenword.com
Alexander Belopolsky alexb@rentec.com
Daniel Hagerty hag@gnu.org
David J. MacKenzie djm@gnu.org
Dick Streefland dick.streefland@altium.nl
Fabrice Bauzac noon@cote-dazur.com
Hans Aberg haberg@matematik.su.se
Jesse Thilo jthilo@gnu.org

View File

@@ -1,5 +1,5 @@
/* Input parser for bison
Copyright 1984, 1986, 1989, 1992, 1998, 2000
Copyright 1984, 1986, 1989, 1992, 1998, 2000, 2001
Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -821,7 +821,7 @@ parse_thong_decl (void)
token_t token;
struct bucket *symbol;
char *typename = 0;
int usrtoknum;
int usrtoknum = 0;
token = lex (); /* fetch typename or first token */
if (token == tok_typename)
@@ -852,8 +852,6 @@ parse_thong_decl (void)
usrtoknum = numval;
token = lex (); /* okay, did number, now get literal */
}
else
usrtoknum = 0;
/* process literal string token */
@@ -875,10 +873,11 @@ parse_thong_decl (void)
}
/*-----------------------------------------------------------------------------.
| Parse a double quoted parameter. It was used for %{source,header}_extension. |
| For the moment, It is not used since extension features have been removed. |
`-----------------------------------------------------------------------------*/
/*------------------------------------------------------------------.
| Parse a double quoted parameter. It was used for |
| %{source,header}_extension. For the moment, It is not used since |
| extension features have been removed. |
`------------------------------------------------------------------*/
#if 0
@@ -1663,6 +1662,43 @@ output_token_defines (struct obstack *oout)
}
/*------------------------------------------------------------------.
| Set TOKEN_TRANSLATIONS. Check that no two symbols share the same |
| number. |
`------------------------------------------------------------------*/
static void
token_translations_init (void)
{
bucket *bp = NULL;
int i;
token_translations = XCALLOC (short, max_user_token_number + 1);
/* Initialize all entries for literal tokens to 2, the internal
token number for $undefined., which represents all invalid
inputs. */
for (i = 0; i <= max_user_token_number; i++)
token_translations[i] = 2;
for (bp = firstsymbol; bp; bp = bp->next)
{
/* Non-terminal? */
if (bp->value >= ntokens)
continue;
/* A token string alias? */
if (bp->user_token_number == SALIAS)
continue;
/* A token which translation has already been set? */
if (token_translations[bp->user_token_number] != 2)
complain (_("tokens %s and %s both assigned number %d"),
tags[token_translations[bp->user_token_number]],
bp->tag, bp->user_token_number);
token_translations[bp->user_token_number] = bp->value;
}
}
/*------------------------------------------------------------------.
| Assign symbol numbers, and write definition of token names into |
| FDEFINES. Set up vectors TAGS and SPREC of names and precedences |
@@ -1674,20 +1710,19 @@ packsymbols (void)
{
bucket *bp = NULL;
int tokno = 1;
int i, j;
int last_user_token_number;
static char DOLLAR[] = "$";
/* int lossage = 0; JF set but not used */
tags = XCALLOC (char *, nsyms + 1);
tags[0] = DOLLAR;
user_toknums = XCALLOC (short, nsyms + 1);
user_toknums[0] = 0;
sprec = XCALLOC (short, nsyms);
sassoc = XCALLOC (short, nsyms);
/* The EOF token. */
tags[0] = DOLLAR;
user_toknums[0] = 0;
max_user_token_number = 256;
last_user_token_number = 256;
@@ -1740,7 +1775,7 @@ packsymbols (void)
if (bp->class == token_sym)
{
if (!bp->user_token_number)
if (bp->user_token_number == 0)
bp->user_token_number = ++last_user_token_number;
if (bp->user_token_number > max_user_token_number)
max_user_token_number = bp->user_token_number;
@@ -1752,26 +1787,7 @@ packsymbols (void)
sassoc[bp->value] = bp->assoc;
}
token_translations = XCALLOC (short, max_user_token_number + 1);
/* initialize all entries for literal tokens to 2, the internal
token number for $undefined., which represents all invalid
inputs. */
for (j = 0; j <= max_user_token_number; j++)
token_translations[j] = 2;
for (bp = firstsymbol; bp; bp = bp->next)
{
if (bp->value >= ntokens)
continue; /* non-terminal */
if (bp->user_token_number == SALIAS)
continue;
if (token_translations[bp->user_token_number] != 2)
complain (_("tokens %s and %s both assigned number %d"),
tags[token_translations[bp->user_token_number]],
bp->tag, bp->user_token_number);
token_translations[bp->user_token_number] = bp->value;
}
token_translations_init ();
error_token_number = errtoken->value;
@@ -1800,19 +1816,23 @@ packsymbols (void)
}
if (semantic_parser)
for (i = ntokens; i < nsyms; i++)
{
/* don't make these for dummy nonterminals made by gensym. */
if (*tags[i] != '@')
obstack_fgrow2 (&defines_obstack,
"# define\tNT%s\t%d\n", tags[i], i);
}
{
int i;
for (i = ntokens; i < nsyms; i++)
{
/* don't make these for dummy nonterminals made by gensym. */
if (*tags[i] != '@')
obstack_fgrow2 (&defines_obstack,
"# define\tNT%s\t%d\n", tags[i], i);
}
#if 0
/* `fdefines' is now a temporary file, so we need to copy its
contents in `done', so we can't close it here. */
fclose (fdefines);
fdefines = NULL;
/* `fdefines' is now a temporary file, so we need to copy its
contents in `done', so we can't close it here. */
fclose (fdefines);
fdefines = NULL;
#endif
}
}
}