]> git.saurik.com Git - bison.git/commitdiff
All the hacks using a final pseudo state are now useless.
authorAkim Demaille <akim@epita.fr>
Thu, 27 Dec 2001 18:05:30 +0000 (18:05 +0000)
committerAkim Demaille <akim@epita.fr>
Thu, 27 Dec 2001 18:05:30 +0000 (18:05 +0000)
* 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).

ChangeLog
src/LR0.c
src/lalr.c

index 421de6f26ad3db342c1d8e26bb6672509f91578d..e8f48a0be3e1f4380ef48e1d5154ca0b700cbfb3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * src/output.c (action_row, token_actions): Use a state_t instead
 2001-12-27  Akim Demaille  <akim@epita.fr>
 
        * src/output.c (action_row, token_actions): Use a state_t instead
index 5e8caef046bd4bf12751459bd53534b7d4c95a7c..148e2bc0adc4c083d51a43dd9432b9317aaf8623 100644 (file)
--- a/src/LR0.c
+++ b/src/LR0.c
@@ -541,10 +541,7 @@ save_reductions (void)
 static void
 set_state_table (void)
 {
 static void
 set_state_table (void)
 {
-  /* NSTATES + 1 because lookahead for the pseudo state number 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_table = XCALLOC (state_t *, nstates);
 
   {
     state_t *sp;
 
   {
     state_t *sp;
index 0eb32411a92750dc33f209db6181b228d2f3da83..8617ae8b4ed556cab75650e9ac38c9d4e6df666f 100644 (file)
 #include "derives.h"
 #include "getargs.h"
 
 #include "derives.h"
 #include "getargs.h"
 
-/* All the decorated states, indexed by the state number.  Warning:
-   there is a state_TABLE in LR0.c, but it is different and static.
-   */
+/* All the decorated states, indexed by the state number.  */
 state_t **state_table = NULL;
 
 int tokensetsize;
 short *LAruleno;
 unsigned *LA;
 state_t **state_table = NULL;
 
 int tokensetsize;
 short *LAruleno;
 unsigned *LA;
+size_t nLA;
 
 static int ngotos;
 short *goto_map;
 
 static int ngotos;
 short *goto_map;
@@ -140,7 +139,7 @@ initialize_LA (void)
   short *np;
   reductions *rp;
 
   short *np;
   reductions *rp;
 
-  size_t nLA = state_table[nstates]->lookaheadsp;
+  /* Avoid having to special case 0.  */
   if (!nLA)
     nLA = 1;
 
   if (!nLA)
     nLA = 1;
 
@@ -504,10 +503,10 @@ compute_FOLLOWS (void)
 static void
 compute_lookaheads (void)
 {
 static 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)
       {
        int size = LA (i + 1) - LA (i);
     for (sp = lookback[i]; sp; sp = sp->next)
       {
        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]);
 
   XFREE (lookback);
     LIST_FREE (shorts, lookback[i]);
 
   XFREE (lookback);
@@ -533,7 +532,7 @@ static void
 initialize_lookaheads (void)
 {
   int i;
 initialize_lookaheads (void)
 {
   int i;
-  int count = 0;
+  nLA = 0;
   for (i = 0; i < nstates; i++)
     {
       int k;
   for (i = 0; i < nstates; i++)
     {
       int k;
@@ -555,13 +554,9 @@ initialize_lookaheads (void)
          }
 
       state_table[i]->nlookaheads = nlookaheads;
          }
 
       state_table[i]->nlookaheads = nlookaheads;
-      state_table[i]->lookaheadsp = count;
-      count += nlookaheads;
+      state_table[i]->lookaheadsp = nLA;
+      nLA += nlookaheads;
     }
     }
-
-  /* Seems to be needed by conflicts.c. */
-  state_table[nstates] = STATE_ALLOC (0);
-  state_table[nstates]->lookaheadsp = count;
 }
 
 void
 }
 
 void