mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-21 02:03:03 +00:00
* src/closure.c (ruleset): Be a bitset.
(rulesetsize): Remove.
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2002-03-04 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* src/closure.c (ruleset): Be a bitset.
|
||||||
|
(rulesetsize): Remove.
|
||||||
|
|
||||||
|
|
||||||
2002-03-04 Akim Demaille <akim@epita.fr>
|
2002-03-04 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* lib/bitset-int.h, lib/bitset.c, lib/bitset.h, lib/bitsetv.c,
|
* lib/bitset-int.h, lib/bitset.c, lib/bitset.h, lib/bitsetv.c,
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
short *itemset;
|
short *itemset;
|
||||||
int nitemset;
|
int nitemset;
|
||||||
|
|
||||||
static unsigned *ruleset;
|
static bitset ruleset;
|
||||||
|
|
||||||
/* internal data. See comments before set_fderives and set_firsts. */
|
/* internal data. See comments before set_fderives and set_firsts. */
|
||||||
static bitset *fderives;
|
static bitset *fderives;
|
||||||
@@ -42,9 +42,6 @@ static unsigned int *firsts;
|
|||||||
#define FDERIVES(Var) fderives[(Var) - ntokens]
|
#define FDERIVES(Var) fderives[(Var) - ntokens]
|
||||||
#define FIRSTS(Var) (firsts + ((Var) - ntokens) * varsetsize)
|
#define FIRSTS(Var) (firsts + ((Var) - ntokens) * varsetsize)
|
||||||
|
|
||||||
/* number of words required to hold a bit for each rule */
|
|
||||||
static int rulesetsize;
|
|
||||||
|
|
||||||
/* number of words required to hold a bit for each variable */
|
/* number of words required to hold a bit for each variable */
|
||||||
static int varsetsize;
|
static int varsetsize;
|
||||||
|
|
||||||
@@ -188,8 +185,8 @@ new_closure (int n)
|
|||||||
{
|
{
|
||||||
itemset = XCALLOC (short, n);
|
itemset = XCALLOC (short, n);
|
||||||
|
|
||||||
rulesetsize = WORDSIZE (nrules + 1);
|
ruleset = bitset_create (nrules + 1, BITSET_FIXED);
|
||||||
ruleset = XCALLOC (unsigned, rulesetsize);
|
bitset_zero (ruleset);
|
||||||
|
|
||||||
set_fderives ();
|
set_fderives ();
|
||||||
}
|
}
|
||||||
@@ -213,28 +210,21 @@ closure (short *core, int n)
|
|||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
for (ruleno = 0; ruleno < nrules + 1; ++ruleno)
|
bitset_copy (ruleset, FDERIVES (start_symbol));
|
||||||
if (bitset_test (FDERIVES (start_symbol), ruleno))
|
|
||||||
SETBIT (ruleset, ruleno);
|
|
||||||
else
|
|
||||||
RESETBIT (ruleset, ruleno);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (r = 0; r < rulesetsize; ++r)
|
bitset_zero (ruleset);
|
||||||
ruleset[r] = 0;
|
|
||||||
|
|
||||||
for (c = 0; c < n; ++c)
|
for (c = 0; c < n; ++c)
|
||||||
if (ISVAR (ritem[core[c]]))
|
if (ISVAR (ritem[core[c]]))
|
||||||
for (ruleno = 0; ruleno < nrules + 1; ++ruleno)
|
bitset_or (ruleset, ruleset, FDERIVES (ritem[core[c]]));
|
||||||
if (bitset_test (FDERIVES (ritem[core[c]]), ruleno))
|
|
||||||
SETBIT (ruleset, ruleno);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nitemset = 0;
|
nitemset = 0;
|
||||||
c = 0;
|
c = 0;
|
||||||
for (ruleno = 0; ruleno < nrules + 1; ++ruleno)
|
for (ruleno = 0; ruleno < nrules + 1; ++ruleno)
|
||||||
if (BITISSET (ruleset, ruleno))
|
if (bitset_test (ruleset, ruleno))
|
||||||
{
|
{
|
||||||
int itemno = rules[ruleno].rhs;
|
int itemno = rules[ruleno].rhs;
|
||||||
while (c < n && core[c] < itemno)
|
while (c < n && core[c] < itemno)
|
||||||
@@ -264,7 +254,8 @@ free_closure (void)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
XFREE (itemset);
|
XFREE (itemset);
|
||||||
XFREE (ruleset);
|
|
||||||
|
bitset_free (ruleset);
|
||||||
|
|
||||||
for (i = 0 ; i < nvars; ++i)
|
for (i = 0 ; i < nvars; ++i)
|
||||||
bitset_free (fderives[i]);
|
bitset_free (fderives[i]);
|
||||||
|
|||||||
Reference in New Issue
Block a user