Stop storing rules from 1 to nrules + 1.

* src/LR0.c, src/closure.c, src/derives.c, src/gram.c, src/lalr.c
* src/nullable.c, src/output.c, src/print.c, src/reader.c
* src/reduce.c: Allocate and free from &rules[0], not &rules[1].
Iterate from 0 to nrules.
Use rule_number_as_item_number and item_number_as_rule_number.
Adjust to `derive' now containing possibly 0.
* src/gram.h (rule_number_as_item_number, item_number_as_rule_number):
Handle the `- 1' part in rule numbers from/to item numbers.
* src/conflicts.c (log_resolution): Fix the message which reversed
shift and reduce.
* src/output.c (action_row): Initialize default_rule to -1.
(token_actions): Adjust.
* tests/sets.at (Nullable, Firsts): Fix the previously bogus
expected output.
* tests/conflicts.at (Resolved SR Conflicts): Likewise.
This commit is contained in:
Akim Demaille
2002-07-25 21:21:02 +00:00
parent 4a2a22f4c0
commit 4b3d3a8e46
15 changed files with 124 additions and 104 deletions

View File

@@ -97,7 +97,7 @@ print_core (FILE *out, state_t *state)
while (*sp >= 0)
sp++;
rule = -(*sp);
rule = item_number_as_rule_number (*sp);
rule_lhs_print (&rules[rule], previous_lhs, out);
previous_lhs = rules[rule].lhs;
@@ -288,7 +288,7 @@ print_reduction (FILE *out, size_t width,
if (!enabled)
fputc ('[', out);
fprintf (out, _("reduce using rule %d (%s)"),
rule->number - 1, rule->lhs->tag);
rule->number, rule->lhs->tag);
if (!enabled)
fputc (']', out);
fputc ('\n', out);
@@ -473,12 +473,12 @@ print_grammar (FILE *out)
END_TEST (50);
sprintf (buffer, " (%d)", i);
for (r = 1; r < nrules + 1; r++)
for (r = 0; r < nrules; r++)
for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
if (item_number_as_symbol_number (*rhsp) == token_translations[i])
{
END_TEST (65);
sprintf (buffer + strlen (buffer), " %d", r - 1);
sprintf (buffer + strlen (buffer), " %d", r);
break;
}
fprintf (out, "%s\n", buffer);
@@ -493,7 +493,7 @@ print_grammar (FILE *out)
rule_number_t r;
const char *tag = symbols[i]->tag;
for (r = 1; r < nrules + 1; r++)
for (r = 0; r < nrules; r++)
{
item_number_t *rhsp;
if (rules[r].lhs->number == i)
@@ -517,11 +517,11 @@ print_grammar (FILE *out)
END_TEST (50);
sprintf (buffer + strlen (buffer), _(" on left:"));
for (r = 1; r < nrules + 1; r++)
for (r = 0; r < nrules; r++)
{
END_TEST (65);
if (rules[r].lhs->number == i)
sprintf (buffer + strlen (buffer), " %d", r - 1);
sprintf (buffer + strlen (buffer), " %d", r);
}
}
@@ -531,14 +531,14 @@ print_grammar (FILE *out)
sprintf (buffer + strlen (buffer), ",");
END_TEST (50);
sprintf (buffer + strlen (buffer), _(" on right:"));
for (r = 1; r < nrules + 1; r++)
for (r = 0; r < nrules; r++)
{
item_number_t *rhsp;
for (rhsp = rules[r].rhs; *rhsp >= 0; rhsp++)
if (item_number_as_symbol_number (*rhsp) == i)
{
END_TEST (65);
sprintf (buffer + strlen (buffer), " %d", r - 1);
sprintf (buffer + strlen (buffer), " %d", r);
break;
}
}