From df0e7316a9b91827e01a9de2643a73baaa6382b4 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 30 Jun 2002 17:28:44 +0000 Subject: [PATCH] * 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. --- ChangeLog | 10 +++++++++ src/LR0.c | 29 ++++++------------------ src/LR0.h | 3 --- src/state.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/state.h | 10 ++++++--- 5 files changed, 87 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index a7382db2..4399b37f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2002-06-30 Akim Demaille + + * 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 * src/reader.c (gensym): Rename as... diff --git a/src/LR0.c b/src/LR0.c index ef7524b2..8f1df0d3 100644 --- a/src/LR0.c +++ b/src/LR0.c @@ -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; - - nstates++; + last_state->next = res; + last_state = res; - return p; + return res; } diff --git a/src/LR0.h b/src/LR0.h index 275130dc..b63bd827 100644 --- a/src/LR0.h +++ b/src/LR0.h @@ -25,7 +25,4 @@ void generate_states PARAMS ((void)); -extern state_number_t nstates; -extern state_t *final_state; - #endif /* !LR0_H_ */ diff --git a/src/state.c b/src/state.c index cb4cd5bc..3000f9dc 100644 --- a/src/state.c +++ b/src/state.c @@ -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. | diff --git a/src/state.h b/src/state.h index 2ab2a4bd..e98e2c65 100644 --- a/src/state.h +++ b/src/state.h @@ -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. */ -- 2.45.2