* src/state.h, src/state.c (state_rule_lookaheads_print): New.

* src/print.c (print_core): Use it.
This commit is contained in:
Akim Demaille
2002-06-15 18:24:25 +00:00
parent 9801d40c50
commit 10e5b8bd0a
4 changed files with 46 additions and 22 deletions

View File

@@ -1,3 +1,9 @@
2002-06-15 Akim Demaille <akim@epita.fr>
* src/state.h, src/state.c (state_rule_lookaheads_print): New.
* src/print.c (print_core): Use it.
2002-06-15 Akim Demaille <akim@epita.fr>
* src/conflicts.c (log_resolution): Accept the rule involved in

View File

@@ -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);

View File

@@ -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, "]");
}
}

View File

@@ -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_ */