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

@@ -56,7 +56,7 @@ int pure_parser = 0;
void
rule_lhs_print (rule_t *rule, symbol_t *previous_lhs, FILE *out)
{
fprintf (out, " %3d ", rule->number - 1);
fprintf (out, " %3d ", rule->number);
if (previous_lhs != rule->lhs)
{
fprintf (out, "%s:", rule->lhs->tag);
@@ -132,7 +132,7 @@ ritem_print (FILE *out)
if (ritem[i] >= 0)
fprintf (out, " %s", symbols[ritem[i]]->tag);
else
fprintf (out, " (rule %d)\n", -ritem[i] - 1);
fprintf (out, " (rule %d)\n", item_number_as_rule_number (ritem[i]));
fputs ("\n\n", out);
}
@@ -147,7 +147,7 @@ ritem_longest_rhs (void)
int max = 0;
rule_number_t r;
for (r = 1; r < nrules + 1; ++r)
for (r = 0; r < nrules; ++r)
{
int length = rule_rhs_length (&rules[r]);
if (length > max)
@@ -191,7 +191,7 @@ grammar_rules_partial_print (FILE *out, const char *title,
void
grammar_rules_print (FILE *out)
{
grammar_rules_partial_print (out, _("Grammar"), 1, nrules + 1);
grammar_rules_partial_print (out, _("Grammar"), 0, nrules);
}
@@ -225,7 +225,7 @@ grammar_dump (FILE *out, const char *title)
{
rule_number_t i;
fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n");
for (i = 1; i < nrules + nuseless_productions + 1; i++)
for (i = 0; i < nrules + nuseless_productions; i++)
{
rule_t *rule = &rules[i];
item_number_t *r = NULL;
@@ -234,7 +234,7 @@ grammar_dump (FILE *out, const char *title)
for (r = rule->rhs; *r >= 0; ++r)
++rhs_count;
fprintf (out, "%3d (%2d, %2d, %2d, %2d-%2d) %2d ->",
i - 1,
i,
rule->prec ? rule->prec->prec : 0,
rule->prec ? rule->prec->assoc : 0,
rule->useful,
@@ -244,7 +244,7 @@ grammar_dump (FILE *out, const char *title)
/* Dumped the RHS. */
for (r = rule->rhs; *r >= 0; r++)
fprintf (out, " %3d", *r);
fprintf (out, " [%d]\n", -(*r) - 1);
fprintf (out, " [%d]\n", item_number_as_rule_number (*r));
}
}
fprintf (out, "\n\n");
@@ -252,7 +252,7 @@ grammar_dump (FILE *out, const char *title)
fprintf (out, "Rules interpreted\n-----------------\n\n");
{
rule_number_t r;
for (r = 1; r < nrules + nuseless_productions + 1; r++)
for (r = 0; r < nrules + nuseless_productions; r++)
{
fprintf (out, "%-5d ", r);
rule_print (&rules[r], out);
@@ -266,7 +266,7 @@ void
grammar_free (void)
{
XFREE (ritem);
free (rules + 1);
free (rules);
XFREE (token_translations);
/* Free the symbol table data structure. */
symbols_free ();