-/*------------------------------------------------------------------.
-| 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;
-
- 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"),
- symbols[token_translations[bp->user_token_number]]->tag,
- 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 SYMBOL_TABLE, TAGS of symbols. |
-`----------------------------------------------------------------*/
-
-static void
-packsymbols (void)
-{
- bucket *bp = NULL;
- int tokno = 1;
- int last_user_token_number;
-
- symbols = XCALLOC (bucket *, nsyms);
-
- max_user_token_number = 256;
- last_user_token_number = 256;
-
- for (bp = firstsymbol; bp; bp = bp->next)
- {
- if (bp->class == nterm_sym)
- {
- bp->value += ntokens;
- }
- else if (bp->alias)
- {
- /* This symbol and its alias are a single token defn.
- Allocate a tokno, and assign to both check agreement of
- prec and assoc fields and make both the same */
- if (bp->value == -1)
- {
- if (bp == eoftoken || bp->alias == eoftoken)
- bp->value = bp->alias->value = 0;
- else
- {
- bp->value = bp->alias->value = tokno++;
- }
- }
-
- if (bp->prec != bp->alias->prec)
- {
- if (bp->prec != 0 && bp->alias->prec != 0
- && bp->user_token_number == SALIAS)
- complain (_("conflicting precedences for %s and %s"),
- bp->tag, bp->alias->tag);
- if (bp->prec != 0)
- bp->alias->prec = bp->prec;
- else
- bp->prec = bp->alias->prec;
- }
-
- if (bp->assoc != bp->alias->assoc)
- {
- if (bp->assoc != 0 && bp->alias->assoc != 0
- && bp->user_token_number == SALIAS)
- complain (_("conflicting assoc values for %s and %s"),
- bp->tag, bp->alias->tag);
- if (bp->assoc != 0)
- bp->alias->assoc = bp->assoc;
- else
- bp->assoc = bp->alias->assoc;
- }
-
- /* Do not do processing below for SALIASs. */
- if (bp->user_token_number == SALIAS)
- continue;
-
- }
- else /* bp->class == token_sym */
- {
- if (bp == eoftoken)
- bp->value = 0;
- else
- bp->value = tokno++;
- }
-
- if (bp->class == token_sym)
- {
- 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;
- }
-
- symbols[bp->value] = bp;
- }
-
- token_translations_init ();
-
- 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;
-}
-
-