- fprintf (out, "# define %s\t%d\n",
- symbol->tag, number);
- ++*line;
- if (semantic_parser)
- {
- /* FIXME: This is probably wrong, and should be just as
- above. --akim. */
- fprintf (out, "# define T%s\t%d\n", symbol->tag, symbol->value);
- ++*line;
- }
- }
-}
-
-
-static void
-save_column (int symbol, int default_state)
-{
- int i;
- short *sp;
- short *sp1;
- short *sp2;
- int count;
- int symno = symbol - ntokens + nstates;
-
- short begin = goto_map[symbol];
- short end = goto_map[symbol + 1];
-
- count = 0;
- for (i = begin; i < end; i++)
- if (to_state[i] != default_state)
- count++;
-
- if (count == 0)
- return;
-
- froms[symno] = sp1 = sp = XCALLOC (short, count);
- tos[symno] = sp2 = XCALLOC (short, count);
-
- for (i = begin; i < end; i++)
- if (to_state[i] != default_state)
- {
- *sp1++ = from_state[i];
- *sp2++ = to_state[i];
- }
-
- tally[symno] = count;
- width[symno] = sp1[-1] - sp[0] + 1;
-}
-
-static int
-default_goto (int symbol)
-{
- int i;
- int m = goto_map[symbol];
- int n = goto_map[symbol + 1];
- int default_state = -1;
- int max = 0;
-
- if (m == n)
- return -1;
-
- for (i = 0; i < nstates; i++)
- state_count[i] = 0;
-
- for (i = m; i < n; i++)
- state_count[to_state[i]]++;
-
- for (i = 0; i < nstates; i++)
- if (state_count[i] > max)
- {
- max = state_count[i];
- default_state = i;
- }
-
- return default_state;
-}
-
-
-/*-------------------------------------------------------------------.
-| Figure out what to do after reducing with each rule, depending on |
-| the saved state from before the beginning of parsing the data that |
-| matched this rule. |
-| |
-| The YYDEFGOTO table is output now. The detailed info is saved for |
-| putting into YYTABLE later. |
-`-------------------------------------------------------------------*/