From 10e5b8bd0a5e704006b371ce7fb9e4bea6c79a06 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sat, 15 Jun 2002 18:24:25 +0000 Subject: [PATCH] * src/state.h, src/state.c (state_rule_lookaheads_print): New. * src/print.c (print_core): Use it. --- ChangeLog | 6 ++++++ src/print.c | 23 +---------------------- src/state.c | 33 +++++++++++++++++++++++++++++++++ src/state.h | 6 ++++++ 4 files changed, 46 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index b61837f5..528a742e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2002-06-15 Akim Demaille + + * src/state.h, src/state.c (state_rule_lookaheads_print): New. + * src/print.c (print_core): Use it. + + 2002-06-15 Akim Demaille * src/conflicts.c (log_resolution): Accept the rule involved in diff --git a/src/print.c b/src/print.c index 027f3fe3..b0ff76ed 100644 --- a/src/print.c +++ b/src/print.c @@ -93,28 +93,7 @@ print_core (FILE *out, state_t *state) /* Display the lookaheads? */ if (report_flag & report_lookaheads) - { - int j, k; - int nlookaheads = 0; - /* Look for 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) - nlookaheads++; - 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) - fprintf (out, "%s%s", - symbol_tag_get (symbols[k]), - --nlookaheads ? ", " : ""); - fprintf (out, "]"); - } - } + state_rule_lookaheads_print (state, &rules[rule], out); fprintf (out, _(" (rule %d)"), rule - 1); fputc ('\n', out); diff --git a/src/state.c b/src/state.c index dd8c3b6e..cb4cd5bc 100644 --- a/src/state.c +++ b/src/state.c @@ -81,3 +81,36 @@ reductions_new (int 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, "]"); + } +} diff --git a/src/state.h b/src/state.h index 239a367d..1877ec48 100644 --- a/src/state.h +++ b/src/state.h @@ -199,4 +199,10 @@ typedef struct state_s (state_t *) xcalloc ((unsigned) (sizeof (state_t) \ + (Nitems - 1) * sizeof (item_number_t)), 1) +/* Print on OUT all the lookaheads such that this STATE wants to + reduce this RULE. */ + +void state_rule_lookaheads_print PARAMS ((state_t *state, rule_t *rule, + FILE *out)); + #endif /* !STATE_H_ */ -- 2.45.2