mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-17 00:03:03 +00:00
One structure for states is enough, even though theoretically
there are LR(0) states and LALR(1) states. * src/lalr.h (state_t): Remove. (state_table): Be state_t **, not state_t *. * src/state.h (core, CORE_ALLOC): Rename as... (state_t, STATE_ALLOC): this. Add the LALR(1) members: shifts, reductions, errs. * src/LR0.c (state_table): Rename as... (state_hash): this, to avoid name clashes with the global `state_table'. * src/print_graph.c, src/LR0.c, src/LR0.h, src/conflicts.c * src/lalr.c, src/lalr.h, src/output.c, src/print.c: Adjust.
This commit is contained in:
52
src/state.h
52
src/state.h
@@ -89,24 +89,6 @@
|
||||
# define STATE_H_
|
||||
|
||||
|
||||
/*-------.
|
||||
| Core. |
|
||||
`-------*/
|
||||
|
||||
typedef struct core
|
||||
{
|
||||
struct core *next;
|
||||
struct core *link;
|
||||
short number;
|
||||
short accessing_symbol;
|
||||
short nitems;
|
||||
short items[1];
|
||||
} core;
|
||||
|
||||
#define CORE_ALLOC(Nitems) \
|
||||
(core *) xcalloc ((unsigned) (sizeof (core) \
|
||||
+ (Nitems - 1) * sizeof (short)), 1)
|
||||
|
||||
/*---------.
|
||||
| Shifts. |
|
||||
`---------*/
|
||||
@@ -132,7 +114,7 @@ shifts * shifts_new PARAMS ((int n));
|
||||
case of gotos. */
|
||||
|
||||
#define SHIFT_SYMBOL(Shifts, Shift) \
|
||||
(state_table[Shifts->shifts[Shift]].accessing_symbol)
|
||||
(state_table[Shifts->shifts[Shift]]->accessing_symbol)
|
||||
|
||||
/* Is the SHIFTS->shifts[Shift] a real shift? (as opposed to gotos.) */
|
||||
|
||||
@@ -190,4 +172,36 @@ typedef struct reductions
|
||||
(reductions *) xcalloc ((unsigned) (sizeof (reductions) \
|
||||
+ (Nreductions - 1) * sizeof (short)), 1)
|
||||
|
||||
|
||||
|
||||
/*----------.
|
||||
| State_t. |
|
||||
`----------*/
|
||||
|
||||
typedef struct state_s
|
||||
{
|
||||
struct state_s *next;
|
||||
struct state_s *link;
|
||||
|
||||
short number;
|
||||
short accessing_symbol;
|
||||
shifts *shifts;
|
||||
reductions *reductions;
|
||||
errs *errs;
|
||||
|
||||
/* Nonzero if no lookahead is needed to decide what to do in state S. */
|
||||
char consistent;
|
||||
|
||||
/* Used in LALR, not LR(0). */
|
||||
short lookaheads;
|
||||
|
||||
/* Its items. */
|
||||
short nitems;
|
||||
short items[1];
|
||||
} state_t;
|
||||
|
||||
#define STATE_ALLOC(Nitems) \
|
||||
(state_t *) xcalloc ((unsigned) (sizeof (state_t) \
|
||||
+ (Nitems - 1) * sizeof (short)), 1)
|
||||
|
||||
#endif /* !STATE_H_ */
|
||||
|
||||
Reference in New Issue
Block a user