* src/symtab.c, src/symtab.c (symbol_class_set)

(symbol_user_token_number_set): New.
* src/reader.c (parse_token_decl): Use them.
Use a switch instead of ifs.
Use a single argument.
This commit is contained in:
Akim Demaille
2002-06-10 08:37:55 +00:00
parent 8b9f2372c7
commit 44536b35c4
4 changed files with 91 additions and 54 deletions

View File

@@ -87,6 +87,50 @@ symbol_precedence_set (symbol_t *symbol,
}
/*-------------------------------------.
| Set the CLASS associated to SYMBOL. |
`-------------------------------------*/
void
symbol_class_set (symbol_t *symbol, symbol_class class)
{
if (symbol->class != unknown_sym && symbol->class != class)
complain (_("symbol %s redefined"), symbol->tag);
if (class == nterm_sym && symbol->class != nterm_sym)
symbol->number = nvars++;
else if (class == token_sym && symbol->number == NUMBER_UNDEFINED)
symbol->number = ntokens++;
symbol->class = class;
}
/*-------------------------------------------------.
| Set the USER_TOKEN_NUMBER associated to SYMBOL. |
`-------------------------------------------------*/
void
symbol_user_token_number_set (symbol_t *symbol, int user_token_number)
{
assert (symbol->class == token_sym);
if (symbol->user_token_number != USER_NUMBER_UNDEFINED)
complain (_("redefining user token number of %s"), symbol->tag);
symbol->user_token_number = user_token_number;
/* User defined EOF token? */
if (user_token_number == 0)
{
eoftoken = symbol;
eoftoken->number = 0;
/* It is always mapped to 0, so it was already counted in
NTOKENS. */
--ntokens;
}
}
/*------------.
| Free THIS. |
`------------*/