/* Type definitions for nondeterministic finite state machine for bison,
- Copyright 2001 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
#include "system.h"
+#include "gram.h"
#include "state.h"
/*---------------------------------.
errs_dup (errs *src)
{
errs *res = errs_new (src->nerrs);
- memcpy (res->errs, src->errs, src->nerrs);
+ memcpy (res->errs, src->errs, src->nerrs * sizeof (src->errs[0]));
return res;
}
+
+/*-------------------------------------.
+| Create a new array of N reductions. |
+`-------------------------------------*/
+
+#define REDUCTIONS_ALLOC(Nreductions) \
+ (reductions *) xcalloc ((unsigned) (sizeof (reductions) \
+ + (Nreductions - 1) * sizeof (short)), 1)
+
+reductions *
+reductions_new (int n)
+{
+ reductions *res = REDUCTIONS_ALLOC (n);
+ res->nreds = n;
+ return res;
+}
+
+
+/*--------------------------------------------------------------.
+| Print on OUT all the lookaheads such that this STATE wants to |
+| reduce this RULE. |
+`--------------------------------------------------------------*/
+
+void
+state_rule_lookaheads_print (state_t *state, rule_t *rule, FILE *out)
+{
+ 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++;
+
+ /* Print them if there are. */
+ if (nlookaheads)
+ {
+ fprintf (out, " [");
+ 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)
+ fprintf (out, "%s%s",
+ symbol_tag_get (symbols[k]),
+ --nlookaheads ? ", " : "");
+ fprintf (out, "]");
+ }
+}