}
prev = t;
-
}
}
token_t token;
struct bucket *symbol;
char *typename = 0;
- int usrtoknum = 0;
+ int usrtoknum = SUNDEF;
token = lex (); /* fetch typename or first token */
if (token == tok_typename)
static void
read_declarations (void)
{
- int c;
- int tok;
-
for (;;)
{
- c = skip_white_space ();
+ int c = skip_white_space ();
if (c == '%')
{
- tok = parse_percent_token ();
+ token_t tok = parse_percent_token ();
switch (tok)
{
case tok_noop:
break;
+ case tok_stropt:
+ case tok_intopt:
+ case tok_obsolete:
+ case tok_illegal:
+ abort ();
+ break;
+
default:
complain (_("unrecognized: %s"), token_buffer);
skip_to_char ('%');
/* A token string alias? */
if (bp->user_token_number == SALIAS)
continue;
+
+ assert (bp->user_token_number != SUNDEF);
+
/* 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"),
if (bp->class == token_sym)
{
- if (bp->user_token_number == 0)
+ if (bp->user_token_number == SUNDEF)
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;
error_token_number = errtoken->value;
+ if (startval->class == unknown_sym)
+ fatal (_("the start symbol %s is undefined"), startval->tag);
+ else if (startval->class == token_sym)
+ fatal (_("the start symbol %s is a token"), startval->tag);
+
+ start_symbol = startval->value;
+}
+
+
+/*-----------------------------------.
+| Output definition of token names. |
+`-----------------------------------*/
+
+static void
+symbols_output (void)
+{
{
struct obstack tokendefs;
obstack_init (&tokendefs);
output_token_defines (&table_obstack);
#endif
- if (startval->class == unknown_sym)
- fatal (_("the start symbol %s is undefined"), startval->tag);
- else if (startval->class == token_sym)
- fatal (_("the start symbol %s is a token"), startval->tag);
-
- start_symbol = startval->value;
-
if (defines_flag)
{
output_token_defines (&defines_obstack);
/* Assign the symbols their symbol numbers. Write #defines for the
token symbols into FDEFINES if requested. */
packsymbols ();
+ symbols_output ();
/* Convert the grammar into the format described in gram.h. */
packgram ();
}