+ XFREE (lookback);
+ bitsetv_free (F);
+}
+
+
+/*---------------------------------------------------------------.
+| Count the number of lookaheads required for STATE (NLOOKAHEADS |
+| member). |
+`---------------------------------------------------------------*/
+
+static int
+state_lookaheads_count (state_t *state)
+{
+ int k;
+ int nlookaheads = 0;
+ reductions_t *rp = state->reductions;
+ transitions_t *sp = state->transitions;
+
+ /* We need a lookahead either to distinguish different
+ reductions (i.e., there are two or more), or to distinguish a
+ reduction from a shift. Otherwise, it is straightforward,
+ and the state is `consistent'. */
+ if (rp->num > 1
+ || (rp->num == 1 && sp->num &&
+ !TRANSITION_IS_DISABLED (sp, 0) && TRANSITION_IS_SHIFT (sp, 0)))
+ nlookaheads += rp->num;
+ else
+ state->consistent = 1;
+
+ for (k = 0; k < sp->num; k++)
+ if (!TRANSITION_IS_DISABLED (sp, k) && TRANSITION_IS_ERROR (sp, k))
+ {
+ state->consistent = 0;
+ break;
+ }
+
+ return nlookaheads;
+}
+
+
+/*----------------------------------------------.
+| 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++)