26 |
#include "derives.h" |
#include "derives.h" |
27 |
#include "warshall.h" |
#include "warshall.h" |
28 |
|
|
29 |
/* ITEMSETSIZE is the size of the array ITEMSET. */ |
/* NITEMSET is the size of the array ITEMSET. */ |
30 |
short *itemset; |
short *itemset; |
31 |
int itemsetsize; |
int nitemset; |
32 |
|
|
33 |
static unsigned *ruleset; |
static unsigned *ruleset; |
34 |
|
|
218 |
ruleset[r] |= FDERIVES (ritem[core[c]])[r]; |
ruleset[r] |= FDERIVES (ritem[core[c]])[r]; |
219 |
} |
} |
220 |
|
|
221 |
itemsetsize = 0; |
nitemset = 0; |
222 |
c = 0; |
c = 0; |
223 |
for (ruleno = 0; ruleno < rulesetsize * BITS_PER_WORD; ++ruleno) |
for (ruleno = 0; ruleno < rulesetsize * BITS_PER_WORD; ++ruleno) |
224 |
if (BITISSET (ruleset, ruleno)) |
if (BITISSET (ruleset, ruleno)) |
226 |
int itemno = rule_table[ruleno].rhs; |
int itemno = rule_table[ruleno].rhs; |
227 |
while (c < n && core[c] < itemno) |
while (c < n && core[c] < itemno) |
228 |
{ |
{ |
229 |
itemset[itemsetsize] = core[c]; |
itemset[nitemset] = core[c]; |
230 |
itemsetsize++; |
nitemset++; |
231 |
c++; |
c++; |
232 |
} |
} |
233 |
itemset[itemsetsize] = itemno; |
itemset[nitemset] = itemno; |
234 |
itemsetsize++; |
nitemset++; |
235 |
} |
} |
236 |
|
|
237 |
while (c < n) |
while (c < n) |
238 |
{ |
{ |
239 |
itemset[itemsetsize] = core[c]; |
itemset[nitemset] = core[c]; |
240 |
itemsetsize++; |
nitemset++; |
241 |
c++; |
c++; |
242 |
} |
} |
243 |
|
|
244 |
if (trace_flag) |
if (trace_flag) |
245 |
print_closure ("output", itemset, itemsetsize); |
print_closure ("output", itemset, nitemset); |
246 |
} |
} |
247 |
|
|
248 |
|
|