+/*----------------------------------------------.
+| Compute LA, NLA, and the lookaheads members. |
+`----------------------------------------------*/
+
+static void
+initialize_LA (void)
+{
+ state_number_t i;
+ bitsetv pLA;
+
+ /* Compute the total number of reductions requiring a lookahead. */
+ nLA = 0;
+ for (i = 0; i < nstates; i++)
+ nLA += state_lookaheads_count (states[i]);
+ /* Avoid having to special case 0. */
+ if (!nLA)
+ nLA = 1;
+
+ pLA = LA = bitsetv_create (nLA, ntokens, BITSET_FIXED);
+ lookback = XCALLOC (goto_list_t *, nLA);
+
+ /* Initialize the members LOOKAHEADS for each state which reductions
+ require lookaheads. */
+ for (i = 0; i < nstates; i++)
+ {
+ int count = state_lookaheads_count (states[i]);
+ if (count)
+ {
+ states[i]->reductions->lookaheads = pLA;
+ pLA += count;
+ }
+ }
+}
+
+
+/*---------------------------------------.
+| Output the lookaheads for each state. |
+`---------------------------------------*/
+
+static void
+lookaheads_print (FILE *out)
+{
+ state_number_t i;
+ int j, k;
+ fprintf (out, "Lookaheads: BEGIN\n");
+ for (i = 0; i < nstates; ++i)
+ {
+ reductions_t *reds = states[i]->reductions;
+ bitset_iterator iter;
+ int nlookaheads = 0;
+
+ if (reds->lookaheads)
+ for (k = 0; k < reds->num; ++k)
+ if (reds->lookaheads[k])
+ ++nlookaheads;
+
+ fprintf (out, "State %d: %d lookaheads\n",
+ i, nlookaheads);
+
+ if (reds->lookaheads)
+ for (j = 0; j < reds->num; ++j)
+ BITSET_FOR_EACH (iter, reds->lookaheads[j], k, 0)
+ {
+ fprintf (out, " on %d (%s) -> rule %d\n",
+ k, symbols[k]->tag,
+ reds->rules[j]->number);
+ };
+ }
+ fprintf (out, "Lookaheads: END\n");
+}
+