* src/state.h, src/state.c (state_new): New, extracted from...

* src/LR0.c (new_state): here.
* src/state.h (STATE_ALLOC): Move to...
* src/state.c: here.
* src/LR0.h, src/LR0.c (nstates, final_state): Move to...
* src/state.h, src/state.c: here.
This commit is contained in:
Akim Demaille
2002-06-30 17:28:44 +00:00
parent 39f4191608
commit df0e7316a9
5 changed files with 87 additions and 28 deletions

View File

@@ -1,3 +1,13 @@
2002-06-30 Akim Demaille <akim@epita.fr>
* src/state.h, src/state.c (state_new): New, extracted from...
* src/LR0.c (new_state): here.
* src/state.h (STATE_ALLOC): Move to...
* src/state.c: here.
* src/LR0.h, src/LR0.c (nstates, final_state): Move to...
* src/state.h, src/state.c: here.
2002-06-30 Akim Demaille <akim@epita.fr>
* src/reader.c (gensym): Rename as...

View File

@@ -37,10 +37,6 @@
#include "lalr.h"
#include "reduce.h"
state_number_t nstates = 0;
/* FINAL_STATE is properly set by new_state when it recognizes its
accessing symbol: EOF. */
state_t *final_state = NULL;
static state_t *first_state = NULL;
static state_t *this_state = NULL;
@@ -182,37 +178,26 @@ new_itemsets (void)
static state_t *
new_state (symbol_number_t symbol, size_t core_size, item_number_t *core)
{
state_t *p;
state_t *res;
if (trace_flag)
fprintf (stderr, "Entering new_state, state = %d, symbol = %d (%s)\n",
nstates, symbol, symbol_tag_get (symbols[symbol]));
if (nstates >= STATE_NUMBER_MAX)
fatal (_("too many states (max %d)"), STATE_NUMBER_MAX);
p = STATE_ALLOC (core_size);
p->accessing_symbol = symbol;
p->number = nstates;
p->solved_conflicts = NULL;
p->nitems = core_size;
memcpy (p->items, core, core_size * sizeof (core[0]));
res = state_new (symbol, core_size, core);
/* If this is the eoftoken, and this is not the initial state, then
this is the final state. */
if (symbol == 0 && first_state)
final_state = p;
final_state = res;
if (!first_state)
first_state = p;
first_state = res;
if (last_state)
last_state->next = p;
last_state = p;
last_state->next = res;
last_state = res;
nstates++;
return p;
return res;
}

View File

@@ -25,7 +25,4 @@
void generate_states PARAMS ((void));
extern state_number_t nstates;
extern state_t *final_state;
#endif /* !LR0_H_ */

View File

@@ -20,9 +20,16 @@
#include "system.h"
#include "complain.h"
#include "gram.h"
#include "state.h"
/*-------------------.
| Shifts and Gotos. |
`-------------------*/
/*---------------------------------.
| Create a new array of N shitfs. |
`---------------------------------*/
@@ -40,6 +47,13 @@ shifts_new (int n)
}
/*--------------------.
| Error transitions. |
`--------------------*/
/*-------------------------------.
| Create a new array of N errs. |
`-------------------------------*/
@@ -66,6 +80,14 @@ errs_dup (errs *src)
return res;
}
/*-------------.
| Reductions. |
`-------------*/
/*-------------------------------------.
| Create a new array of N reductions. |
`-------------------------------------*/
@@ -83,6 +105,47 @@ reductions_new (int n)
}
/*---------.
| States. |
`---------*/
state_number_t nstates = 0;
/* FINAL_STATE is properly set by new_state when it recognizes its
accessing symbol: EOF. */
state_t *final_state = NULL;
/*------------------------------------------------------------.
| Create a new state with ACCESSING_SYMBOL, for those items. |
`------------------------------------------------------------*/
state_t *
state_new (symbol_number_t accessing_symbol,
size_t core_size, item_number_t *core)
{
state_t *res;
if (nstates >= STATE_NUMBER_MAX)
fatal (_("too many states (max %d)"), STATE_NUMBER_MAX);
#define STATE_ALLOC(Nitems) \
(state_t *) xcalloc ((unsigned) (sizeof (state_t) \
+ (Nitems - 1) * sizeof (item_number_t)), 1)
res = STATE_ALLOC (core_size);
res->accessing_symbol = accessing_symbol;
res->number = nstates;
++nstates;
res->solved_conflicts = NULL;
res->nitems = core_size;
memcpy (res->items, core, core_size * sizeof (core[0]));
return res;
}
/*--------------------------------------------------------------.
| Print on OUT all the lookaheads such that this STATE wants to |
| reduce this RULE. |

View File

@@ -206,9 +206,13 @@ typedef struct state_s
item_number_t items[1];
} state_t;
#define STATE_ALLOC(Nitems) \
(state_t *) xcalloc ((unsigned) (sizeof (state_t) \
+ (Nitems - 1) * sizeof (item_number_t)), 1)
extern state_number_t nstates;
extern state_t *final_state;
/* Create a new state with ACCESSING_SYMBOL for those items. */
state_t *state_new PARAMS ((symbol_number_t accessing_symbol,
size_t core_size, item_number_t *core));
/* Print on OUT all the lookaheads such that this STATE wants to
reduce this RULE. */