- bucket *bp;
- int tokno = 1;
- int i;
- 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);
-
- 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 == 0)
- 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;
- }
-
- if (bp->user_token_number == SALIAS)
- continue; /* do not do processing below for SALIASs */
-
- }
- else /* bp->class == token_sym */
- {
- bp->value = tokno++;
- }
-
- if (bp->class == token_sym)
- {
- if (translations && !(bp->user_token_number))
- 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;
- }
-
- tags[bp->value] = bp->tag;
- user_toknums[bp->value] = bp->user_token_number;
- sprec[bp->value] = bp->prec;
- sassoc[bp->value] = bp->assoc;