114 |
while (1) |
while (1) |
115 |
{ |
{ |
116 |
bitset_copy (Np, N); |
bitset_copy (Np, N); |
117 |
for (i = 1; i <= nrules; i++) |
for (i = 1; i < nrules + 1; i++) |
118 |
if (!bitset_test (P, i) |
if (!bitset_test (P, i) |
119 |
&& useful_production (i, N)) |
&& useful_production (i, N)) |
120 |
{ |
{ |
174 |
while (1) |
while (1) |
175 |
{ |
{ |
176 |
bitset_copy (Vp, V); |
bitset_copy (Vp, V); |
177 |
for (i = 1; i <= nrules; i++) |
for (i = 1; i < nrules + 1; i++) |
178 |
{ |
{ |
179 |
if (!bitset_test (Pp, i) |
if (!bitset_test (Pp, i) |
180 |
&& bitset_test (P, i) |
&& bitset_test (P, i) |
241 |
|
|
242 |
np = 0; |
np = 0; |
243 |
ni = 0; |
ni = 0; |
244 |
for (pn = 1; pn <= nrules; pn++) |
for (pn = 1; pn < nrules + 1; pn++) |
245 |
if (bitset_test (P, pn)) |
if (bitset_test (P, pn)) |
246 |
{ |
{ |
247 |
np++; |
np++; |
281 |
if (nuseless_productions > 0) |
if (nuseless_productions > 0) |
282 |
{ |
{ |
283 |
int pn; |
int pn; |
284 |
for (pn = 1; pn <= nrules; pn++) |
for (pn = 1; pn < nrules + 1; pn++) |
285 |
rules[pn].useful = bitset_test (P, pn); |
rules[pn].useful = bitset_test (P, pn); |
286 |
} |
} |
287 |
} |
} |
322 |
|
|
323 |
/* Replace all symbol numbers in valid data structures. */ |
/* Replace all symbol numbers in valid data structures. */ |
324 |
|
|
325 |
for (i = 1; i <= nrules; i++) |
for (i = 1; i < nrules + 1; i++) |
326 |
{ |
{ |
327 |
rules[i].lhs = nontermmap[rules[i].lhs]; |
rules[i].lhs = nontermmap[rules[i].lhs]; |
328 |
if (ISVAR (rules[i].precsym)) |
if (ISVAR (rules[i].precsym)) |
378 |
{ |
{ |
379 |
int i; |
int i; |
380 |
fprintf (out, "%s\n\n", _("Useless rules:")); |
fprintf (out, "%s\n\n", _("Useless rules:")); |
381 |
for (i = 1; i <= nrules; i++) |
for (i = 1; i < nrules + 1; i++) |
382 |
if (!rules[i].useful) |
if (!rules[i].useful) |
383 |
{ |
{ |
384 |
rule r; |
rule r; |
411 |
fprintf (out, "\n\n"); |
fprintf (out, "\n\n"); |
412 |
fprintf (out, "Rules\n-----\n\n"); |
fprintf (out, "Rules\n-----\n\n"); |
413 |
fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"); |
fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"); |
414 |
for (i = 1; i <= nrules; i++) |
for (i = 1; i < nrules + 1; i++) |
415 |
{ |
{ |
416 |
int rhs_count = 0; |
int rhs_count = 0; |
417 |
/* Find the last RHS index in ritems. */ |
/* Find the last RHS index in ritems. */ |
429 |
} |
} |
430 |
fprintf (out, "\n\n"); |
fprintf (out, "\n\n"); |
431 |
fprintf (out, "Rules interpreted\n-----------------\n\n"); |
fprintf (out, "Rules interpreted\n-----------------\n\n"); |
432 |
for (i = 1; i <= nrules; i++) |
for (i = 1; i < nrules + 1; i++) |
433 |
{ |
{ |
434 |
fprintf (out, "%-5d %s :", i, symbols[rules[i].lhs]->tag); |
fprintf (out, "%-5d %s :", i, symbols[rules[i].lhs]->tag); |
435 |
for (r = rules[i].rhs; *r >= 0; r++) |
for (r = rules[i].rhs; *r >= 0; r++) |