bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

13-fyi-more-state-t.patch


From: Akim Demaille
Subject: 13-fyi-more-state-t.patch
Date: Mon, 19 Nov 2001 10:02:42 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        * src/lalr.h (lookaheads): Removed array, which contents is now
        member of...
        (state_t): this structure.
        * src/output.c, src/lalr.c, src/print_graph.c, src/conflicts.c:
        Adjust.

Index: src/conflicts.c
--- src/conflicts.c Thu, 15 Nov 2001 23:11:56 +0100 akim
+++ src/conflicts.c Thu, 15 Nov 2001 23:22:04 +0100 akim
@@ -210,13 +210,13 @@
        }
     }
 
-  k = lookaheads[state + 1];
+  k = state_table[state + 1].lookaheads;
   fp4 = lookaheadset + tokensetsize;
 
   /* Loop over all rules which require lookahead in this state.  First
      check for shift-reduce conflict, and try to resolve using
      precedence */
-  for (i = lookaheads[state]; i < k; i++)
+  for (i = state_table[state].lookaheads; i < k; i++)
     if (rprec[LAruleno[i]])
       {
        fp1 = LA + i * tokensetsize;
@@ -236,7 +236,7 @@
 
   /* Loop over all rules which require lookahead in this state.  Check
      for conflicts not resolved above.  */
-  for (i = lookaheads[state]; i < k; i++)
+  for (i = state_table[state].lookaheads; i < k; i++)
     {
       fp1 = LA + i * tokensetsize;
       fp2 = fp1;
@@ -309,10 +309,10 @@
       SETBIT (shiftset, symbol);
     }
 
-  k = lookaheads[state + 1];
+  k = state_table[state + 1].lookaheads;
   fp3 = lookaheadset + tokensetsize;
 
-  for (i = lookaheads[state]; i < k; i++)
+  for (i = state_table[state].lookaheads; i < k; i++)
     {
       fp1 = LA + i * tokensetsize;
       fp2 = lookaheadset;
@@ -359,8 +359,8 @@
 
   int rrc_count = 0;
 
-  int m = lookaheads[state];
-  int n = lookaheads[state + 1];
+  int m = state_table[state].lookaheads;
+  int n = state_table[state + 1].lookaheads;
 
   if (n - m < 2)
     return 0;
@@ -565,8 +565,8 @@
        }
     }
 
-  m = lookaheads[state];
-  n = lookaheads[state + 1];
+  m = state_table[state].lookaheads;
+  n = state_table[state + 1].lookaheads;
 
   if (n - m == 1 && !nodefault)
     {
Index: src/lalr.c
--- src/lalr.c Thu, 15 Nov 2001 23:11:56 +0100 akim
+++ src/lalr.c Thu, 15 Nov 2001 23:23:50 +0100 akim
@@ -38,7 +38,6 @@
 state_t *state_table = NULL;
 
 int tokensetsize;
-short *lookaheads;
 short *LAruleno;
 unsigned *LA;
 
@@ -145,7 +144,10 @@
 static void
 set_state_table (void)
 {
-  state_table = XCALLOC (state_t, nstates);
+  /* 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);
 
   {
     core *sp;
@@ -202,19 +204,16 @@
 {
   int i;
   int j;
-  int count;
+  int count = 0;
   reductions *rp;
   shifts *sp;
   short *np;
 
-  lookaheads = XCALLOC (short, nstates + 1);
-
-  count = 0;
   for (i = 0; i < nstates; i++)
     {
       int k;
 
-      lookaheads[i] = count;
+      state_table[i].lookaheads = count;
 
       rp = state_table[i].reduction_table;
       sp = state_table[i].shift_table;
@@ -235,7 +234,7 @@
            }
     }
 
-  lookaheads[nstates] = count;
+  state_table[nstates].lookaheads = count;
 
   if (count == 0)
     {
@@ -450,8 +449,8 @@
   int found;
   shorts *sp;
 
-  i = lookaheads[stateno];
-  k = lookaheads[stateno + 1];
+  i = state_table[stateno].lookaheads;
+  k = state_table[stateno + 1].lookaheads;
   found = 0;
   while (!found && i < k)
     {
@@ -653,8 +652,7 @@
   shorts *sptmp;               /* JF */
 
   rowp = LA;
-  n = lookaheads[nstates];
-  for (i = 0; i < n; i++)
+  for (i = 0; i < state_table[nstates].lookaheads; i++)
     {
       fp3 = rowp + tokensetsize;
       for (sp = lookback[i]; sp; sp = sp->next)
@@ -668,7 +666,7 @@
       rowp = fp3;
     }
 
-  for (i = 0; i < n; i++)
+  for (i = 0; i < state_table[nstates].lookaheads; i++)
     {
       /* JF removed ref to freed storage */
       for (sp = lookback[i]; sp; sp = sptmp)
Index: src/lalr.h
--- src/lalr.h Thu, 15 Nov 2001 23:11:56 +0100 akim
+++ src/lalr.h Thu, 15 Nov 2001 23:23:26 +0100 akim
@@ -83,6 +83,8 @@
   /* Nonzero if no lookahead is needed to decide what to do in state
      S.  */
   char consistent;
+
+  short lookaheads;
 } state_t;
 
 /* All the decorated states, indexed by the state number.  Warning:
@@ -91,9 +93,7 @@
 extern state_t *state_table;
 
 extern int tokensetsize;
-extern short *lookaheads;
-
-
-
 
+/* The number of lookaheads. */
+extern size_t nlookaheads;
 #endif /* !LALR_H_ */
Index: src/output.c
--- src/output.c Thu, 15 Nov 2001 23:11:56 +0100 akim
+++ src/output.c Thu, 15 Nov 2001 23:23:46 +0100 akim
@@ -540,8 +540,8 @@
        {
          /* loop over all the rules available here which require
             lookahead */
-         m = lookaheads[state];
-         n = lookaheads[state + 1];
+         m = state_table[state].lookaheads;
+         n = state_table[state + 1].lookaheads;
 
          for (i = n - 1; i >= m; i--)
            {
@@ -1120,7 +1120,6 @@
   token_actions ();
   free_shifts ();
   free_reductions ();
-  XFREE (lookaheads);
   XFREE (LA);
   XFREE (LAruleno);
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]