74 |
fprintf (stderr, "FIRSTS\n"); |
fprintf (stderr, "FIRSTS\n"); |
75 |
for (i = ntokens; i < nsyms; i++) |
for (i = ntokens; i < nsyms; i++) |
76 |
{ |
{ |
77 |
|
bitset_iterator iter; |
78 |
fprintf (stderr, "\t%s firsts\n", symbols[i]->tag); |
fprintf (stderr, "\t%s firsts\n", symbols[i]->tag); |
79 |
BITSET_EXECUTE (FIRSTS (i), 0, j, |
BITSET_FOR_EACH (iter, FIRSTS (i), j, 0) |
80 |
{ |
{ |
81 |
fprintf (stderr, "\t\t%s\n", |
fprintf (stderr, "\t\t%s\n", |
82 |
symbols[j + ntokens]->tag); |
symbols[j + ntokens]->tag); |
83 |
}); |
} |
84 |
} |
} |
85 |
fprintf (stderr, "\n\n"); |
fprintf (stderr, "\n\n"); |
86 |
} |
} |
95 |
fprintf (stderr, "FDERIVES\n"); |
fprintf (stderr, "FDERIVES\n"); |
96 |
for (i = ntokens; i < nsyms; i++) |
for (i = ntokens; i < nsyms; i++) |
97 |
{ |
{ |
98 |
|
bitset_iterator iter; |
99 |
fprintf (stderr, "\t%s derives\n", symbols[i]->tag); |
fprintf (stderr, "\t%s derives\n", symbols[i]->tag); |
100 |
BITSET_EXECUTE (FDERIVES (i), 0, r, |
BITSET_FOR_EACH (iter, FDERIVES (i), r, 0) |
101 |
{ |
{ |
102 |
item_number_t *rhsp = NULL; |
item_number_t *rhsp = NULL; |
103 |
fprintf (stderr, "\t\t%d:", r - 1); |
fprintf (stderr, "\t\t%d:", r - 1); |
104 |
for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp) |
for (rhsp = rules[r].rhs; *rhsp >= 0; ++rhsp) |
105 |
fprintf (stderr, " %s", symbols[*rhsp]->tag); |
fprintf (stderr, " %s", symbols[*rhsp]->tag); |
106 |
fputc ('\n', stderr); |
fputc ('\n', stderr); |
107 |
}); |
} |
108 |
} |
} |
109 |
fprintf (stderr, "\n\n"); |
fprintf (stderr, "\n\n"); |
110 |
} |
} |
200 |
/* A bit index over RULESET. */ |
/* A bit index over RULESET. */ |
201 |
rule_number_t ruleno; |
rule_number_t ruleno; |
202 |
|
|
203 |
|
bitset_iterator iter; |
204 |
|
|
205 |
if (trace_flag) |
if (trace_flag) |
206 |
print_closure ("input", core, n); |
print_closure ("input", core, n); |
207 |
|
|
213 |
|
|
214 |
nritemset = 0; |
nritemset = 0; |
215 |
c = 0; |
c = 0; |
216 |
BITSET_EXECUTE (ruleset, 0, ruleno, |
BITSET_FOR_EACH (iter, ruleset, ruleno, 0) |
217 |
{ |
{ |
218 |
item_number_t itemno = rules[ruleno].rhs - ritem; |
item_number_t itemno = rules[ruleno].rhs - ritem; |
219 |
while (c < n && core[c] < itemno) |
while (c < n && core[c] < itemno) |
220 |
{ |
{ |
221 |
itemset[nritemset] = core[c]; |
itemset[nritemset] = core[c]; |
222 |
nritemset++; |
nritemset++; |
223 |
c++; |
c++; |
224 |
} |
} |
225 |
itemset[nritemset] = itemno; |
itemset[nritemset] = itemno; |
226 |
nritemset++; |
nritemset++; |
227 |
}); |
}; |
228 |
|
|
229 |
while (c < n) |
while (c < n) |
230 |
{ |
{ |