* src/gram.h, src/gram.c (rules_rhs_length): New.

(ritem_longest_rhs): Use it.
* src/gram.h (rule_t): `number' is a new member.
* src/reader.c (packgram): Set it.
* src/reduce.c (reduce_grammar_tables): Move the useless rules at
the end of `rules', and count them out of `nrules'.
(reduce_output, dump_grammar): Adjust.
* src/print.c (print_grammar): It is no longer needed to check for
the usefulness of a rule, as useless rules are beyond `nrules + 1'.
* tests/reduce.at (Reduced Automaton): New test.
This commit is contained in:
Akim Demaille
2002-04-07 17:36:38 +00:00
parent c307773eec
commit c3b407f430
17 changed files with 211 additions and 109 deletions

View File

@@ -1,5 +1,5 @@
/* Allocate input grammar variables for bison,
Copyright 1984, 1986, 1989, 2001 Free Software Foundation, Inc.
Copyright 1984, 1986, 1989, 2001, 2002 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -51,6 +51,21 @@ int pure_parser;
int error_token_number;
/*--------------------------------------.
| Return the number of symbols in RHS. |
`--------------------------------------*/
int
rule_rhs_length (rule_t *rule)
{
int res = 0;
short *rhsp;
for (rhsp = rule->rhs; *rhsp >= 0; ++rhsp)
++res;
return res;
}
/*------------------------.
| Dump RITEM for traces. |
`------------------------*/
@@ -76,23 +91,15 @@ ritem_print (FILE *out)
size_t
ritem_longest_rhs (void)
{
int length;
int max;
int max = 0;
int i;
length = 0;
max = 0;
for (i = 0; i < nritems; ++i)
if (ritem[i] >= 0)
{
length++;
}
else
{
if (length > max)
max = length;
length = 0;
}
for (i = 1; i < nrules + 1; ++i)
{
int length = rule_rhs_length (&rules[i]);
if (length > max)
max = length;
}
return max;
}