46 |
{ |
{ |
47 |
rule_number_t *rp; |
rule_number_t *rp; |
48 |
fprintf (stderr, "\t%s derives\n", symbols[i]->tag); |
fprintf (stderr, "\t%s derives\n", symbols[i]->tag); |
49 |
for (rp = derives[i]; *rp > 0; rp++) |
for (rp = derives[i]; *rp >= 0; rp++) |
50 |
{ |
{ |
51 |
fprintf (stderr, "\t\t%3d ", *rp - 1); |
fprintf (stderr, "\t\t%3d ", *rp); |
52 |
rule_rhs_print (&rules[*rp], stderr); |
rule_rhs_print (&rules[*rp], stderr); |
53 |
} |
} |
54 |
} |
} |
61 |
set_derives (void) |
set_derives (void) |
62 |
{ |
{ |
63 |
symbol_number_t i; |
symbol_number_t i; |
64 |
rule_number_t r; |
int r; |
65 |
rule_number_t *q; |
rule_number_t *q; |
66 |
|
|
67 |
/* DSET[NTERM] -- A linked list of the numbers of the rules whose |
/* DSET[NTERM] -- A linked list of the numbers of the rules whose |
71 |
/* DELTS[RULE] -- There are NRULES rule number to attach to nterms. |
/* DELTS[RULE] -- There are NRULES rule number to attach to nterms. |
72 |
Instead of performing NRULES allocations for each, have an array |
Instead of performing NRULES allocations for each, have an array |
73 |
indexed by rule numbers. */ |
indexed by rule numbers. */ |
74 |
rule_list_t *delts = XCALLOC (rule_list_t, nrules + 1); |
rule_list_t *delts = XCALLOC (rule_list_t, nrules); |
75 |
|
|
76 |
for (r = nrules; r > 0; r--) |
for (r = nrules - 1; r >= 0; --r) |
77 |
{ |
{ |
78 |
symbol_number_t lhs = rules[r].lhs->number; |
symbol_number_t lhs = rules[r].lhs->number; |
79 |
rule_list_t *p = &delts[r]; |
rule_list_t *p = &delts[r]; |