mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-11 13:23:04 +00:00
* src/conflicts.c, src/conflicts.h (print_reductions): Move to...
* src/print.c: here. (lookaheadset, shiftset): New, used as additional storage by print_reductions. (print_results): Adjust. (print_shifts, print_gotos, print_errs): New, extracted from... (print_actions): here. * src/print_graph.c (print_actions): Remove dead code.
This commit is contained in:
129
src/conflicts.c
129
src/conflicts.c
@@ -400,135 +400,6 @@ conflicts_print (void)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
print_reductions (FILE *out, state_t *state)
|
||||
{
|
||||
int i;
|
||||
shifts *shiftp = state->shifts;
|
||||
errs *errp = state->errs;
|
||||
int nodefault = 0;
|
||||
|
||||
for (i = 0; i < tokensetsize; i++)
|
||||
shiftset[i] = 0;
|
||||
|
||||
for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
|
||||
if (!SHIFT_IS_DISABLED (shiftp, i))
|
||||
{
|
||||
/* if this state has a shift for the error token, don't use a
|
||||
default rule. */
|
||||
if (SHIFT_IS_ERROR (shiftp, i))
|
||||
nodefault = 1;
|
||||
SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
|
||||
}
|
||||
|
||||
if (errp)
|
||||
for (i = 0; i < errp->nerrs; i++)
|
||||
if (errp->errs[i])
|
||||
SETBIT (shiftset, errp->errs[i]);
|
||||
|
||||
if (state->nlookaheads == 1 && !nodefault)
|
||||
{
|
||||
int k;
|
||||
int default_rule = LAruleno[state->lookaheadsp];
|
||||
|
||||
for (k = 0; k < tokensetsize; ++k)
|
||||
lookaheadset[k] = LA (state->lookaheadsp)[k] & shiftset[k];
|
||||
|
||||
for (i = 0; i < ntokens; i++)
|
||||
if (BITISSET (lookaheadset, i))
|
||||
fprintf (out, _(" %-4s\t[reduce using rule %d (%s)]\n"),
|
||||
tags[i], default_rule,
|
||||
tags[rule_table[default_rule].lhs]);
|
||||
|
||||
fprintf (out, _(" $default\treduce using rule %d (%s)\n\n"),
|
||||
default_rule, tags[rule_table[default_rule].lhs]);
|
||||
}
|
||||
else if (state->nlookaheads >= 1)
|
||||
{
|
||||
int cmax = 0;
|
||||
int default_LA = -1;
|
||||
int default_rule = 0;
|
||||
|
||||
if (!nodefault)
|
||||
for (i = 0; i < state->nlookaheads; ++i)
|
||||
{
|
||||
int count = 0;
|
||||
int j, k;
|
||||
|
||||
for (k = 0; k < tokensetsize; ++k)
|
||||
lookaheadset[k] = LA (state->lookaheadsp + i)[k] & ~shiftset[k];
|
||||
|
||||
for (j = 0; j < ntokens; j++)
|
||||
if (BITISSET (lookaheadset, j))
|
||||
count++;
|
||||
|
||||
if (count > cmax)
|
||||
{
|
||||
cmax = count;
|
||||
default_LA = state->lookaheadsp + i;
|
||||
default_rule = LAruleno[state->lookaheadsp + i];
|
||||
}
|
||||
|
||||
for (k = 0; k < tokensetsize; ++k)
|
||||
shiftset[k] |= lookaheadset[k];
|
||||
}
|
||||
|
||||
for (i = 0; i < tokensetsize; i++)
|
||||
shiftset[i] = 0;
|
||||
|
||||
for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)
|
||||
if (!SHIFT_IS_DISABLED (shiftp, i))
|
||||
SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));
|
||||
|
||||
for (i = 0; i < ntokens; i++)
|
||||
{
|
||||
int j;
|
||||
int defaulted = 0;
|
||||
int count = BITISSET (shiftset, i);
|
||||
|
||||
for (j = 0; j < state->nlookaheads; ++j)
|
||||
{
|
||||
if (BITISSET (LA (state->lookaheadsp + j), i))
|
||||
{
|
||||
if (count == 0)
|
||||
{
|
||||
if (state->lookaheadsp + j != default_LA)
|
||||
fprintf (out,
|
||||
_(" %-4s\treduce using rule %d (%s)\n"),
|
||||
tags[i],
|
||||
LAruleno[state->lookaheadsp + j],
|
||||
tags[rule_table[LAruleno[state->lookaheadsp + j]].lhs]);
|
||||
else
|
||||
defaulted = 1;
|
||||
|
||||
count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (defaulted)
|
||||
fprintf (out,
|
||||
_(" %-4s\treduce using rule %d (%s)\n"),
|
||||
tags[i],
|
||||
LAruleno[default_LA],
|
||||
tags[rule_table[LAruleno[default_LA]].lhs]);
|
||||
defaulted = 0;
|
||||
fprintf (out,
|
||||
_(" %-4s\t[reduce using rule %d (%s)]\n"),
|
||||
tags[i],
|
||||
LAruleno[state->lookaheadsp + j],
|
||||
tags[rule_table[LAruleno[state->lookaheadsp + j]].lhs]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (default_LA >= 0)
|
||||
fprintf (out, _(" $default\treduce using rule %d (%s)\n"),
|
||||
default_rule, tags[rule_table[default_rule].lhs]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
free_conflicts (void)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user