mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-15 15:23:02 +00:00
* 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:
39
src/gram.c
39
src/gram.c
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user