- int j, k;
- int nlookaheads = 0;
- /* Count the number of lookaheads corresponding to this rule. */
- for (j = 0; j < state->nlookaheads; ++j)
- for (k = 0; k < ntokens; ++k)
- if (bitset_test (state->lookaheads[j], k)
- && state->lookaheads_rule[j]->number == rule->number)
- nlookaheads++;
+ if (s->transitions)
+ abort ();
+ s->transitions = transitions_new (num, trans);
+}
+
+
+/*--------------------------.
+| Set the reductions of S. |
+`--------------------------*/
+
+void
+state_reductions_set (state *s, int num, rule **reds)
+{
+ if (s->reductions)
+ abort ();
+ s->reductions = reductions_new (num, reds);
+}
+
+
+int
+state_reduction_find (state *s, rule *r)
+{
+ int i;
+ reductions *reds = s->reductions;
+ for (i = 0; i < reds->num; ++i)
+ if (reds->rules[i] == r)
+ return i;
+ return -1;
+}
+
+
+/*--------------------.
+| Set the errs of S. |
+`--------------------*/
+
+void
+state_errs_set (state *s, int num, symbol **tokens)
+{
+ if (s->errs)
+ abort ();
+ s->errs = errs_new (num, tokens);
+}
+
+
+
+/*-----------------------------------------------------.
+| Print on OUT all the lookaheads such that S wants to |
+| reduce R. |
+`-----------------------------------------------------*/
+
+void
+state_rule_lookaheads_print (state *s, rule *r, FILE *out)
+{
+ /* Find the reduction we are handling. */
+ reductions *reds = s->reductions;
+ int red = state_reduction_find (s, r);