Instead of mapping the LHS of unused rules to -1, keep the LHS

valid, but flag the rules as invalid.
* src/gram.h (rule_t): `useful' is a new member.
* src/print.c (print_grammar): Adjust.
* src/derives.c (set_derives): Likewise.
* src/reader.c (packgram, reduce_output): Likewise.
* src/reduce.c (reduce_grammar_tables): Likewise.
* tests/reduce.at (Underivable Rules, Useless Rules): New.
This commit is contained in:
Akim Demaille
2001-11-30 10:46:08 +00:00
parent d287d66a69
commit d39a6b7ca9
7 changed files with 131 additions and 30 deletions

View File

@@ -63,7 +63,6 @@ void
set_derives (void)
{
int i;
int lhs;
shorts *p;
short *q;
shorts **dset;
@@ -74,16 +73,14 @@ set_derives (void)
p = delts;
for (i = nrules; i > 0; i--)
{
lhs = rule_table[i].lhs;
if (lhs >= 0)
{
p->next = dset[lhs];
p->value = i;
dset[lhs] = p;
p++;
}
}
if (rule_table[i].useful)
{
int lhs = rule_table[i].lhs;
p->next = dset[lhs];
p->value = i;
dset[lhs] = p;
p++;
}
derives = XCALLOC (short *, nvars) - ntokens;
q = XCALLOC (short, nvars + nrules);