* src/gram.h (rule_number_t, RULE_NUMBER_MAX, int_of_rule_number)

(item_number_of_rule_number, rule_number_of_item_number): New.
* src/LR0.c, src/closure.c, src/derives.c, src/derives.h,
* src/gram.c, src/lalr.c, src/nullable.c, src/output.c, src/print.c,
* src/print_graph.c, src/reader.c, src/reduce.c, src/reduce.h:
Propagate their use.
Much remains to be done, in particular wrt `shorts' from types.h.
This commit is contained in:
Akim Demaille
2002-06-30 17:31:19 +00:00
parent 260008e546
commit 9222837b27
15 changed files with 202 additions and 156 deletions

View File

@@ -46,7 +46,7 @@ nullable_print (FILE *out)
void
set_nullable (void)
{
int ruleno;
rule_number_t ruleno;
symbol_number_t *s1;
symbol_number_t *s2;
shorts *p;
@@ -71,19 +71,20 @@ set_nullable (void)
for (ruleno = 1; ruleno < nrules + 1; ++ruleno)
if (rules[ruleno].useful)
{
if (rules[ruleno].rhs[0] >= 0)
rule_t *rule = &rules[ruleno];
if (rule->rhs[0] >= 0)
{
/* This rule has a non empty RHS. */
item_number_t *r;
item_number_t *r = NULL;
int any_tokens = 0;
for (r = rules[ruleno].rhs; *r >= 0; ++r)
for (r = rule->rhs; *r >= 0; ++r)
if (ISTOKEN (*r))
any_tokens = 1;
/* This rule has only nonterminals: schedule it for the second
pass. */
if (!any_tokens)
for (r = rules[ruleno].rhs; *r >= 0; ++r)
for (r = rule->rhs; *r >= 0; ++r)
{
rcount[ruleno]++;
p->next = rsets[*r];
@@ -95,11 +96,11 @@ set_nullable (void)
else
{
/* This rule has an empty RHS. */
assert (rules[ruleno].rhs[0] == -ruleno);
if (rules[ruleno].useful && !nullable[rules[ruleno].lhs->number])
assert (rule_number_of_item_number (rule->rhs[0]) == ruleno);
if (rule->useful && !nullable[rule->lhs->number])
{
nullable[rules[ruleno].lhs->number] = 1;
*s2++ = rules[ruleno].lhs->number;
nullable[rule->lhs->number] = 1;
*s2++ = rule->lhs->number;
}
}
}