* src/LR0.c (new_itemsets): Use nshifts only, not shiftcount.

* src/closure.c, src/closure.h (itemsetsize): Rename as...
(nitemset): for consistency with the rest of the project.
This commit is contained in:
Akim Demaille
2001-12-05 09:41:01 +00:00
parent 23cbcc6c19
commit b2872512f1
4 changed files with 31 additions and 26 deletions

View File

@@ -1,3 +1,10 @@
2001-12-05 Akim Demaille <akim@epita.fr>
* src/LR0.c (new_itemsets): Use nshifts only, not shiftcount.
* src/closure.c, src/closure.h (itemsetsize): Rename as...
(nitemset): for consistency with the rest of the project.
2001-12-05 Akim Demaille <akim@epita.fr>
* src/closure.c (print_closure): Improve.

View File

@@ -141,7 +141,6 @@ static void
new_itemsets (void)
{
int i;
int shiftcount;
if (trace_flag)
fprintf (stderr, "Entering new_itemsets, state = %d\n",
@@ -151,25 +150,23 @@ new_itemsets (void)
kernel_size[i] = 0;
shift_symbol = XCALLOC (short, nsyms);
shiftcount = 0;
nshifts = 0;
for (i = 0; i < itemsetsize; ++i)
for (i = 0; i < nitemset; ++i)
{
int symbol = ritem[itemset[i]];
if (symbol > 0)
{
if (!kernel_size[symbol])
{
shift_symbol[shiftcount] = symbol;
shiftcount++;
shift_symbol[nshifts] = symbol;
nshifts++;
}
kernel_base[symbol][kernel_size[symbol]] = itemset[i] + 1;
kernel_size[symbol]++;
}
}
nshifts = shiftcount;
}
@@ -542,7 +539,7 @@ save_reductions (void)
/* Find and count the active items that represent ends of rules. */
count = 0;
for (i = 0; i < itemsetsize; ++i)
for (i = 0; i < nitemset; ++i)
{
int item = ritem[itemset[i]];
if (item < 0)

View File

@@ -26,9 +26,9 @@
#include "derives.h"
#include "warshall.h"
/* ITEMSETSIZE is the size of the array ITEMSET. */
/* NITEMSET is the size of the array ITEMSET. */
short *itemset;
int itemsetsize;
int nitemset;
static unsigned *ruleset;
@@ -218,7 +218,7 @@ closure (short *core, int n)
ruleset[r] |= FDERIVES (ritem[core[c]])[r];
}
itemsetsize = 0;
nitemset = 0;
c = 0;
for (ruleno = 0; ruleno < rulesetsize * BITS_PER_WORD; ++ruleno)
if (BITISSET (ruleset, ruleno))
@@ -226,23 +226,23 @@ closure (short *core, int n)
int itemno = rule_table[ruleno].rhs;
while (c < n && core[c] < itemno)
{
itemset[itemsetsize] = core[c];
itemsetsize++;
itemset[nitemset] = core[c];
nitemset++;
c++;
}
itemset[itemsetsize] = itemno;
itemsetsize++;
itemset[nitemset] = itemno;
nitemset++;
}
while (c < n)
{
itemset[itemsetsize] = core[c];
itemsetsize++;
itemset[nitemset] = core[c];
nitemset++;
c++;
}
if (trace_flag)
print_closure ("output", itemset, itemsetsize);
print_closure ("output", itemset, nitemset);
}

View File

@@ -30,18 +30,19 @@
void new_closure PARAMS ((int n));
/* Given a vector of item numbers ITEMS, of length N, set up ruleset
and itemset to indicate what rules could be run and which items
could be accepted when those items are the active ones.
/* Given the kernel (aka core) of a state (a vector of item numbers
ITEMS, of length N), set up ruleset and itemset to indicate what
rules could be run and which items could be accepted when those
items are the active ones.
ruleset contains a bit for each rule. closure sets the bits for
all rules which could potentially describe the next input to be
read.
itemset is a vector of item numbers; itemsetend points to just
beyond the end of the part of it that is significant. closure
places there the indices of all items which represent units of
input that could arrive next. */
ITEMSET is a vector of item numbers; NITEMSET is its size
9actually, points to just beyond the end of the part of it that is
significant). closure places there the indices of all items which
represent units of input that could arrive next. */
void closure PARAMS ((short *items, int n));
@@ -51,6 +52,6 @@ void closure PARAMS ((short *items, int n));
void free_closure PARAMS ((void));
extern short *itemset;
extern int itemsetsize;
extern int nitemset;
#endif /* !CLOSURE_H_ */