mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-18 16:53:02 +00:00
* src/LR0.c (kernel_end): Remove, replaced with...
(kernel_size): new.
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2001-11-19 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* src/LR0.c (kernel_end): Remove, replaced with...
|
||||||
|
(kernel_size): new.
|
||||||
|
|
||||||
|
|
||||||
2001-11-19 Akim Demaille <akim@epita.fr>
|
2001-11-19 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* src/conflicts.c (set_conflicts): Use arrays instead of pointers
|
* src/conflicts.c (set_conflicts): Use arrays instead of pointers
|
||||||
|
|||||||
37
src/LR0.c
37
src/LR0.c
@@ -50,7 +50,7 @@ static short *redset = NULL;
|
|||||||
static short *shiftset = NULL;
|
static short *shiftset = NULL;
|
||||||
|
|
||||||
static short **kernel_base = NULL;
|
static short **kernel_base = NULL;
|
||||||
static short **kernel_end = NULL;
|
static size_t *kernel_size = NULL;
|
||||||
static short *kernel_items = NULL;
|
static short *kernel_items = NULL;
|
||||||
|
|
||||||
/* hash table for states, to recognize equivalent ones. */
|
/* hash table for states, to recognize equivalent ones. */
|
||||||
@@ -94,7 +94,7 @@ allocate_itemsets (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
shift_symbol = symbol_count;
|
shift_symbol = symbol_count;
|
||||||
kernel_end = XCALLOC (short *, nsyms);
|
kernel_size = XCALLOC (size_t, nsyms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -116,7 +116,7 @@ free_storage (void)
|
|||||||
XFREE (redset);
|
XFREE (redset);
|
||||||
XFREE (shiftset);
|
XFREE (shiftset);
|
||||||
XFREE (kernel_base);
|
XFREE (kernel_base);
|
||||||
XFREE (kernel_end);
|
XFREE (kernel_size);
|
||||||
XFREE (kernel_items);
|
XFREE (kernel_items);
|
||||||
XFREE (state_table);
|
XFREE (state_table);
|
||||||
}
|
}
|
||||||
@@ -132,8 +132,7 @@ free_storage (void)
|
|||||||
| shift_symbol is set to a vector of the symbols that can be |
|
| shift_symbol is set to a vector of the symbols that can be |
|
||||||
| shifted. For each symbol in the grammar, kernel_base[symbol] |
|
| shifted. For each symbol in the grammar, kernel_base[symbol] |
|
||||||
| points to a vector of item numbers activated if that symbol is |
|
| points to a vector of item numbers activated if that symbol is |
|
||||||
| shifted, and kernel_end[symbol] points after the end of that |
|
| shifted, and kernel_size[symbol] is their numbers. |
|
||||||
| vector. |
|
|
||||||
`----------------------------------------------------------------*/
|
`----------------------------------------------------------------*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -147,7 +146,7 @@ new_itemsets (void)
|
|||||||
this_state->number);
|
this_state->number);
|
||||||
|
|
||||||
for (i = 0; i < nsyms; i++)
|
for (i = 0; i < nsyms; i++)
|
||||||
kernel_end[i] = NULL;
|
kernel_size[i] = 0;
|
||||||
|
|
||||||
shiftcount = 0;
|
shiftcount = 0;
|
||||||
|
|
||||||
@@ -156,17 +155,14 @@ new_itemsets (void)
|
|||||||
int symbol = ritem[itemset[i]];
|
int symbol = ritem[itemset[i]];
|
||||||
if (symbol > 0)
|
if (symbol > 0)
|
||||||
{
|
{
|
||||||
short *ksp = kernel_end[symbol];
|
if (!kernel_size[symbol])
|
||||||
|
|
||||||
if (!ksp)
|
|
||||||
{
|
{
|
||||||
shift_symbol[shiftcount] = symbol;
|
shift_symbol[shiftcount] = symbol;
|
||||||
ksp = kernel_base[symbol];
|
|
||||||
shiftcount++;
|
shiftcount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
*ksp++ = itemset[i] + 1;
|
kernel_base[symbol][kernel_size[symbol]] = itemset[i] + 1;
|
||||||
kernel_end[symbol] = ksp;
|
kernel_size[symbol]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,7 +179,6 @@ new_itemsets (void)
|
|||||||
static core *
|
static core *
|
||||||
new_state (int symbol)
|
new_state (int symbol)
|
||||||
{
|
{
|
||||||
int n;
|
|
||||||
core *p;
|
core *p;
|
||||||
|
|
||||||
if (trace_flag)
|
if (trace_flag)
|
||||||
@@ -193,14 +188,12 @@ new_state (int symbol)
|
|||||||
if (nstates >= MAXSHORT)
|
if (nstates >= MAXSHORT)
|
||||||
fatal (_("too many states (max %d)"), MAXSHORT);
|
fatal (_("too many states (max %d)"), MAXSHORT);
|
||||||
|
|
||||||
n = kernel_end[symbol] - kernel_base[symbol];
|
p = CORE_ALLOC (kernel_size[symbol]);
|
||||||
|
|
||||||
p = CORE_ALLOC (n);
|
|
||||||
p->accessing_symbol = symbol;
|
p->accessing_symbol = symbol;
|
||||||
p->number = nstates;
|
p->number = nstates;
|
||||||
p->nitems = n;
|
p->nitems = kernel_size[symbol];
|
||||||
|
|
||||||
shortcpy (p->items, kernel_base[symbol], n);
|
shortcpy (p->items, kernel_base[symbol], kernel_size[symbol]);
|
||||||
|
|
||||||
last_state->next = p;
|
last_state->next = p;
|
||||||
last_state = p;
|
last_state = p;
|
||||||
@@ -224,8 +217,6 @@ get_state (int symbol)
|
|||||||
int i;
|
int i;
|
||||||
core *sp;
|
core *sp;
|
||||||
|
|
||||||
int n = kernel_end[symbol] - kernel_base[symbol];
|
|
||||||
|
|
||||||
if (trace_flag)
|
if (trace_flag)
|
||||||
fprintf (stderr, "Entering get_state, state = %d, symbol = %d (%s)\n",
|
fprintf (stderr, "Entering get_state, state = %d, symbol = %d (%s)\n",
|
||||||
this_state->number, symbol, tags[symbol]);
|
this_state->number, symbol, tags[symbol]);
|
||||||
@@ -233,7 +224,7 @@ get_state (int symbol)
|
|||||||
/* Add up the target state's active item numbers to get a hash key.
|
/* Add up the target state's active item numbers to get a hash key.
|
||||||
*/
|
*/
|
||||||
key = 0;
|
key = 0;
|
||||||
for (i = 0; i < n; ++i)
|
for (i = 0; i < kernel_size[symbol]; ++i)
|
||||||
key += kernel_base[symbol][i];
|
key += kernel_base[symbol][i];
|
||||||
key = key % STATE_TABLE_SIZE;
|
key = key % STATE_TABLE_SIZE;
|
||||||
sp = state_table[key];
|
sp = state_table[key];
|
||||||
@@ -243,11 +234,11 @@ get_state (int symbol)
|
|||||||
int found = 0;
|
int found = 0;
|
||||||
while (!found)
|
while (!found)
|
||||||
{
|
{
|
||||||
if (sp->nitems == n)
|
if (sp->nitems == kernel_size[symbol])
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
found = 1;
|
found = 1;
|
||||||
for (i = 0; i < n; ++i)
|
for (i = 0; i < kernel_size[symbol]; ++i)
|
||||||
if (kernel_base[symbol][i] != sp->items[i])
|
if (kernel_base[symbol][i] != sp->items[i])
|
||||||
found = 0;
|
found = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user