bitset_set (shiftset, errp->symbols[i]->number);
}
- for (i = 0; i < state->nlookaheads; ++i)
+ for (i = 0; i < redp->num; ++i)
{
int count = 0;
/* How many non-masked lookaheads are there for this reduction?
*/
- bitset_andn (lookaheadset, state->lookaheads[i], shiftset);
+ bitset_andn (lookaheadset, redp->lookaheads[i], shiftset);
count = bitset_count (lookaheadset);
if (count > cmax)
{
cmax = count;
- default_rule = state->lookaheads_rule[i];
+ default_rule = redp->rules[i];
}
/* 3. And finally, each reduction is possibly masked by previous
reductions (in R/R conflicts, we keep the first reductions).
*/
- bitset_or (shiftset, shiftset, state->lookaheads[i]);
+ bitset_or (shiftset, shiftset, redp->lookaheads[i]);
}
return default_rule;
fputc (' ', out);
if (!enabled)
fputc ('[', out);
- fprintf (out, _("reduce using rule %d (%s)"),
- rule->number, rule->lhs->tag);
+ if (rule->number)
+ fprintf (out, _("reduce using rule %d (%s)"),
+ rule->number, rule->lhs->tag);
+ else
+ fprintf (out, _("accept"));
if (!enabled)
fputc (']', out);
fputc ('\n', out);
/* Compute the width of the lookaheads column. */
if (default_rule)
width = strlen (_("$default"));
- for (i = 0; i < ntokens; i++)
- {
- int count = bitset_test (shiftset, i);
- for (j = 0; j < state->nlookaheads; ++j)
- if (bitset_test (state->lookaheads[j], i))
- {
- if (count == 0)
- {
- if (state->lookaheads_rule[j] != default_rule)
+ if (redp->lookaheads)
+ for (i = 0; i < ntokens; i++)
+ {
+ int count = bitset_test (shiftset, i);
+
+ for (j = 0; j < redp->num; ++j)
+ if (bitset_test (redp->lookaheads[j], i))
+ {
+ if (count == 0)
+ {
+ if (redp->rules[j] != default_rule)
+ max_length (&width, symbols[i]->tag);
+ count++;
+ }
+ else
+ {
max_length (&width, symbols[i]->tag);
- count++;
- }
- else
- {
- max_length (&width, symbols[i]->tag);
- }
- }
- }
+ }
+ }
+ }
/* Nothing to report. */
if (!width)
width += 2;
/* Report lookaheads (or $default) and reductions. */
- for (i = 0; i < ntokens; i++)
- {
- int defaulted = 0;
- int count = bitset_test (shiftset, i);
+ if (redp->lookaheads)
+ for (i = 0; i < ntokens; i++)
+ {
+ int defaulted = 0;
+ int count = bitset_test (shiftset, i);
- for (j = 0; j < state->nlookaheads; ++j)
- if (bitset_test (state->lookaheads[j], i))
- {
- if (count == 0)
- {
- if (state->lookaheads_rule[j] != default_rule)
- print_reduction (out, width,
- symbols[i]->tag,
- state->lookaheads_rule[j], TRUE);
- else
- defaulted = 1;
- count++;
- }
- else
- {
- if (defaulted)
+ for (j = 0; j < redp->num; ++j)
+ if (bitset_test (redp->lookaheads[j], i))
+ {
+ if (count == 0)
+ {
+ if (redp->rules[j] != default_rule)
+ print_reduction (out, width,
+ symbols[i]->tag,
+ redp->rules[j], true);
+ else
+ defaulted = 1;
+ count++;
+ }
+ else
+ {
+ if (defaulted)
+ print_reduction (out, width,
+ symbols[i]->tag,
+ default_rule, true);
+ defaulted = 0;
print_reduction (out, width,
symbols[i]->tag,
- default_rule, TRUE);
- defaulted = 0;
- print_reduction (out, width,
- symbols[i]->tag,
- state->lookaheads_rule[j], FALSE);
- }
- }
- }
+ redp->rules[j], false);
+ }
+ }
+ }
if (default_rule)
print_reduction (out, width,
- _("$default"), default_rule, TRUE);
+ _("$default"), default_rule, true);
}
static void
print_actions (FILE *out, state_t *state)
{
- reductions_t *redp = state->reductions;
- transitions_t *transitions = state->transitions;
-
- if (transitions->num == 0 && redp->num == 0)
- {
- fputc ('\n', out);
- if (state->number == final_state->number)
- fprintf (out, _(" $default\taccept\n"));
- else
- fprintf (out, _(" NO ACTIONS\n"));
- return;
- }
-
/* Print shifts. */
- print_transitions (state, out, TRUE);
+ print_transitions (state, out, true);
print_errs (out, state);
print_reductions (out, state);
/* Print gotos. */
- print_transitions (state, out, FALSE);
+ print_transitions (state, out, false);
}
print_actions (out, state);
if ((report_flag & report_solved_conflicts)
&& state->solved_conflicts)
- fputs (state->solved_conflicts, out);
+ {
+ fputc ('\n', out);
+ fputs (state->solved_conflicts, out);
+ }
}
\f
/*-----------------------------------------.
FILE *out = xfopen (spec_verbose_file, "w");
reduce_output (out);
+ grammar_rules_partial_print (out,
+ _("Rules never reduced"), rule_never_reduced_p);
conflicts_output (out);
print_grammar (out);