* src/state.h, src/state.c (state_new): New, extracted from...
authorAkim Demaille <akim@epita.fr>
Sun, 30 Jun 2002 17:28:44 +0000 (17:28 +0000)
committerAkim Demaille <akim@epita.fr>
Sun, 30 Jun 2002 17:28:44 +0000 (17:28 +0000)
* 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
src/LR0.c
src/LR0.h
src/state.c
src/state.h

index a7382db..4399b37 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 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...
        * src/symtab.h, src/symtab.c (dummy_symbol_get): this.
        (getsym): Rename as...
index ef7524b..8f1df0d 100644 (file)
--- a/src/LR0.c
+++ b/src/LR0.c
 #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;
 }
 
 
index 275130d..b63bd82 100644 (file)
--- 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_ */
index cb4cd5b..3000f9d 100644 (file)
 
 
 #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.                                             |
index 2ab2a4b..e98e2c6 100644 (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.  */