mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 09:13:04 +00:00
All the hacks using a final pseudo state are now useless.
* src/LR0.c (set_state_table): state_table holds exactly nstates. * src/lalr.c (nLA): New. (initialize_LA, compute_lookaheads, initialize_lookaheads): Use it instead of lookaheadsp from the pseudo state (nstate + 1).
This commit is contained in:
@@ -1,3 +1,12 @@
|
|||||||
|
2001-12-27 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
All the hacks using a final pseudo state are now useless.
|
||||||
|
|
||||||
|
* src/LR0.c (set_state_table): state_table holds exactly nstates.
|
||||||
|
* src/lalr.c (nLA): New.
|
||||||
|
(initialize_LA, compute_lookaheads, initialize_lookaheads): Use it
|
||||||
|
instead of lookaheadsp from the pseudo state (nstate + 1).
|
||||||
|
|
||||||
2001-12-27 Akim Demaille <akim@epita.fr>
|
2001-12-27 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* src/output.c (action_row, token_actions): Use a state_t instead
|
* src/output.c (action_row, token_actions): Use a state_t instead
|
||||||
|
|||||||
@@ -541,10 +541,7 @@ save_reductions (void)
|
|||||||
static void
|
static void
|
||||||
set_state_table (void)
|
set_state_table (void)
|
||||||
{
|
{
|
||||||
/* NSTATES + 1 because lookahead for the pseudo state number NSTATES
|
state_table = XCALLOC (state_t *, nstates);
|
||||||
might be used (see conflicts.c). It is too opaque for me to
|
|
||||||
provide a probably less hacky implementation. --akim */
|
|
||||||
state_table = XCALLOC (state_t *, nstates + 1);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
state_t *sp;
|
state_t *sp;
|
||||||
|
|||||||
23
src/lalr.c
23
src/lalr.c
@@ -33,14 +33,13 @@
|
|||||||
#include "derives.h"
|
#include "derives.h"
|
||||||
#include "getargs.h"
|
#include "getargs.h"
|
||||||
|
|
||||||
/* All the decorated states, indexed by the state number. Warning:
|
/* All the decorated states, indexed by the state number. */
|
||||||
there is a state_TABLE in LR0.c, but it is different and static.
|
|
||||||
*/
|
|
||||||
state_t **state_table = NULL;
|
state_t **state_table = NULL;
|
||||||
|
|
||||||
int tokensetsize;
|
int tokensetsize;
|
||||||
short *LAruleno;
|
short *LAruleno;
|
||||||
unsigned *LA;
|
unsigned *LA;
|
||||||
|
size_t nLA;
|
||||||
|
|
||||||
static int ngotos;
|
static int ngotos;
|
||||||
short *goto_map;
|
short *goto_map;
|
||||||
@@ -140,7 +139,7 @@ initialize_LA (void)
|
|||||||
short *np;
|
short *np;
|
||||||
reductions *rp;
|
reductions *rp;
|
||||||
|
|
||||||
size_t nLA = state_table[nstates]->lookaheadsp;
|
/* Avoid having to special case 0. */
|
||||||
if (!nLA)
|
if (!nLA)
|
||||||
nLA = 1;
|
nLA = 1;
|
||||||
|
|
||||||
@@ -504,10 +503,10 @@ compute_FOLLOWS (void)
|
|||||||
static void
|
static void
|
||||||
compute_lookaheads (void)
|
compute_lookaheads (void)
|
||||||
{
|
{
|
||||||
int i;
|
size_t i;
|
||||||
shorts *sp;
|
shorts *sp;
|
||||||
|
|
||||||
for (i = 0; i < state_table[nstates]->lookaheadsp; i++)
|
for (i = 0; i < nLA; i++)
|
||||||
for (sp = lookback[i]; sp; sp = sp->next)
|
for (sp = lookback[i]; sp; sp = sp->next)
|
||||||
{
|
{
|
||||||
int size = LA (i + 1) - LA (i);
|
int size = LA (i + 1) - LA (i);
|
||||||
@@ -517,7 +516,7 @@ compute_lookaheads (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Free LOOKBACK. */
|
/* Free LOOKBACK. */
|
||||||
for (i = 0; i < state_table[nstates]->lookaheadsp; i++)
|
for (i = 0; i < nLA; i++)
|
||||||
LIST_FREE (shorts, lookback[i]);
|
LIST_FREE (shorts, lookback[i]);
|
||||||
|
|
||||||
XFREE (lookback);
|
XFREE (lookback);
|
||||||
@@ -533,7 +532,7 @@ static void
|
|||||||
initialize_lookaheads (void)
|
initialize_lookaheads (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int count = 0;
|
nLA = 0;
|
||||||
for (i = 0; i < nstates; i++)
|
for (i = 0; i < nstates; i++)
|
||||||
{
|
{
|
||||||
int k;
|
int k;
|
||||||
@@ -555,13 +554,9 @@ initialize_lookaheads (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
state_table[i]->nlookaheads = nlookaheads;
|
state_table[i]->nlookaheads = nlookaheads;
|
||||||
state_table[i]->lookaheadsp = count;
|
state_table[i]->lookaheadsp = nLA;
|
||||||
count += nlookaheads;
|
nLA += nlookaheads;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Seems to be needed by conflicts.c. */
|
|
||||||
state_table[nstates] = STATE_ALLOC (0);
|
|
||||||
state_table[nstates]->lookaheadsp = count;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
Reference in New Issue
Block a user