* src/lalr.c: Don't use first_shift: find shifts through the
states.
+2001-12-10 Akim Demaille <akim@epita.fr>
+
+ * src/LR0.h (first_shift, first_reduction): Remove.
+ * src/lalr.c: Don't use first_shift: find shifts through the
+ states.
+
+
2001-12-10 Akim Demaille <akim@epita.fr>
* src/LR0.c: Attach shifts to states as soon as they are
2001-12-10 Akim Demaille <akim@epita.fr>
* src/LR0.c: Attach shifts to states as soon as they are
/* Generate the nondeterministic finite state machine for bison,
/* Generate the nondeterministic finite state machine for bison,
- Copyright 1984, 1986, 1989, 2000 Free Software Foundation, Inc.
+ Copyright 1984, 1986, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
This file is part of Bison, the GNU Compiler Compiler.
extern int nstates;
extern int final_state;
extern state_t *first_state;
extern int nstates;
extern int final_state;
extern state_t *first_state;
-extern shifts *first_shift;
-extern reductions *first_reduction;
state_table[sp->number] = sp;
}
state_table[sp->number] = sp;
}
- {
- shifts *sp;
- for (sp = first_shift; sp; sp = sp->next)
- assert (state_table[sp->number]->shifts == sp);
- }
-
/* Pessimization, but simplification of the code: make sure all the
states have a shifts, even if reduced to 0 shifts. */
{
/* Pessimization, but simplification of the code: make sure all the
states have a shifts, even if reduced to 0 shifts. */
{
static void
set_goto_map (void)
{
static void
set_goto_map (void)
{
int i;
int symbol;
int k;
short *temp_map;
int state2;
int i;
int symbol;
int k;
short *temp_map;
int state2;
goto_map = XCALLOC (short, nvars + 1) - ntokens;
temp_map = XCALLOC (short, nvars + 1) - ntokens;
ngotos = 0;
goto_map = XCALLOC (short, nvars + 1) - ntokens;
temp_map = XCALLOC (short, nvars + 1) - ntokens;
ngotos = 0;
- for (sp = first_shift; sp; sp = sp->next)
- for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
- {
- symbol = state_table[sp->shifts[i]]->accessing_symbol;
+ for (state = 0; state < nstates; ++state)
+ {
+ shifts *sp = state_table[state]->shifts;
+ for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
+ {
+ symbol = state_table[sp->shifts[i]]->accessing_symbol;
- if (ngotos == MAXSHORT)
- fatal (_("too many gotos (max %d)"), MAXSHORT);
+ if (ngotos == MAXSHORT)
+ fatal (_("too many gotos (max %d)"), MAXSHORT);
- ngotos++;
- goto_map[symbol]++;
- }
+ ngotos++;
+ goto_map[symbol]++;
+ }
+ }
k = 0;
for (i = ntokens; i < nsyms; i++)
k = 0;
for (i = ntokens; i < nsyms; i++)
from_state = XCALLOC (short, ngotos);
to_state = XCALLOC (short, ngotos);
from_state = XCALLOC (short, ngotos);
to_state = XCALLOC (short, ngotos);
- for (sp = first_shift; sp; sp = sp->next)
+ for (state = 0; state < nstates; ++state)
+ shifts *sp = state_table[state]->shifts;
for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
{
for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
{
- state2 = sp->shifts[i];
- symbol = state_table[state2]->accessing_symbol;
+ for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
+ {
+ state2 = sp->shifts[i];
+ symbol = state_table[state2]->accessing_symbol;
- k = temp_map[symbol]++;
- from_state[k] = state1;
- to_state[k] = state2;
+ k = temp_map[symbol]++;
+ from_state[k] = state;
+ to_state[k] = state2;
+ }