bison-patches
[Top][All Lists]
Advanced

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

11-fyi-augment-automaton.patch


From: Akim Demaille
Subject: 11-fyi-augment-automaton.patch
Date: Wed, 05 Dec 2001 08:24:57 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        * src/LR0.c (augment_automaton): Formatting changes.
        Better variable locality.
        
        
Index: src/LR0.c
--- src/LR0.c Sat, 01 Dec 2001 13:09:59 +0100 akim
+++ src/LR0.c Sat, 01 Dec 2001 16:51:57 +0100 akim
@@ -387,114 +387,110 @@
 static void
 augment_automaton (void)
 {
-  int i;
-  int k;
   core *statep;
   shifts *sp;
-  shifts *sp2;
   shifts *sp1 = NULL;
 
   sp = first_shift;
 
-  if (sp)
+  if (!sp)
     {
-      if (sp->number == 0)
-       {
-         k = sp->nshifts;
-         statep = first_state->next;
+      /* There are no shifts for any state.  Make one shift, from the
+        initial state to the next-to-final state.  */
+
+      sp = shifts_new (1);
+      sp->shifts[0] = nstates;
 
-         /* The states reached by shifts from first_state are numbered 1...K.
-            Look for one reached by start_symbol.  */
-         while (statep->accessing_symbol < start_symbol
-                && statep->number < k)
-           statep = statep->next;
+      /* Initialize the chain of shifts with sp.  */
+      first_shift = sp;
+      last_shift = sp;
 
-         if (statep->accessing_symbol == start_symbol)
+      /* Create the next-to-final state, with shift to
+         what will be the final state.  */
+      insert_start_shift ();
+    }
+  else if (sp->number == 0)
+    {
+      statep = first_state->next;
+
+      /* The states reached by shifts from FIRST_STATE are numbered
+        1..(SP->NSHIFTS).  Look for one reached by START_SYMBOL.  */
+      while (statep->accessing_symbol < start_symbol
+            && statep->number < sp->nshifts)
+       statep = statep->next;
+
+      if (statep->accessing_symbol == start_symbol)
+       {
+         /* We already have a next-to-final state.
+            Make sure it has a shift to what will be the final state.  */
+         while (sp && sp->number < statep->number)
            {
-             /* We already have a next-to-final state.
-                Make sure it has a shift to what will be the final state.  */
-             k = statep->number;
-
-             while (sp && sp->number < k)
-               {
-                 sp1 = sp;
-                 sp = sp->next;
-               }
-
-             if (sp && sp->number == k)
-               {
-                 sp2 = shifts_new (sp->nshifts + 1);
-                 sp2->number = k;
-                 sp2->shifts[0] = nstates;
-                 for (i = sp->nshifts; i > 0; i--)
-                   sp2->shifts[i] = sp->shifts[i - 1];
-
-                 /* Patch sp2 into the chain of shifts in place of sp,
-                    following sp1.  */
-                 sp2->next = sp->next;
-                 sp1->next = sp2;
-                 if (sp == last_shift)
-                   last_shift = sp2;
-                 XFREE (sp);
-               }
-             else
-               {
-                 sp2 = shifts_new (1);
-                 sp2->number = k;
-                 sp2->shifts[0] = nstates;
-
-                 /* Patch sp2 into the chain of shifts between sp1 and sp.  */
-                 sp2->next = sp;
-                 sp1->next = sp2;
-                 if (sp == 0)
-                   last_shift = sp2;
-               }
+             sp1 = sp;
+             sp = sp->next;
            }
-         else
+
+         if (sp && sp->number == statep->number)
            {
-             /* There is no next-to-final state as yet.  */
-             /* Add one more shift in first_shift,
-                going to the next-to-final state (yet to be made).  */
-             sp = first_shift;
-
-             sp2 = shifts_new (sp->nshifts + 1);
-
-             /* Stick this shift into the vector at the proper place.  */
-             statep = first_state->next;
-             for (k = 0, i = 0; i < sp->nshifts; k++, i++)
-               {
-                 if (statep->accessing_symbol > start_symbol && i == k)
-                   sp2->shifts[k++] = nstates;
-                 sp2->shifts[k] = sp->shifts[i];
-                 statep = statep->next;
-               }
-             if (i == k)
-               sp2->shifts[k++] = nstates;
+             int i;
+             shifts *sp2 = shifts_new (sp->nshifts + 1);
+             sp2->number = statep->number;
+             sp2->shifts[0] = nstates;
+             for (i = sp->nshifts; i > 0; i--)
+               sp2->shifts[i] = sp->shifts[i - 1];
 
-             /* Patch sp2 into the chain of shifts
-                in place of sp, at the beginning.  */
+             /* Patch sp2 into the chain of shifts in place of sp,
+                following sp1.  */
              sp2->next = sp->next;
-             first_shift = sp2;
-             if (last_shift == sp)
+             sp1->next = sp2;
+             if (sp == last_shift)
                last_shift = sp2;
-
              XFREE (sp);
-
-             /* Create the next-to-final state, with shift to
-                what will be the final state.  */
-             insert_start_shift ();
+           }
+         else
+           {
+             shifts *sp2 = shifts_new (1);
+             sp2->number = statep->number;
+             sp2->shifts[0] = nstates;
+
+             /* Patch sp2 into the chain of shifts between sp1 and sp.  */
+             sp2->next = sp;
+             sp1->next = sp2;
+             if (sp == 0)
+               last_shift = sp2;
            }
        }
       else
        {
-         /* The initial state didn't even have any shifts.
-            Give it one shift, to the next-to-final state.  */
-         sp = shifts_new (1);
-         sp->shifts[0] = nstates;
-
-         /* Patch sp into the chain of shifts at the beginning.  */
-         sp->next = first_shift;
-         first_shift = sp;
+         int i, k;
+         shifts *sp2;
+
+         /* There is no next-to-final state as yet.  */
+         /* Add one more shift in first_shift,
+            going to the next-to-final state (yet to be made).  */
+         sp = first_shift;
+
+         sp2 = shifts_new (sp->nshifts + 1);
+
+         /* Stick this shift into the vector at the proper place.  */
+         statep = first_state->next;
+         for (k = 0, i = 0; i < sp->nshifts; k++, i++)
+           {
+             if (statep->accessing_symbol > start_symbol && i == k)
+               sp2->shifts[k++] = nstates;
+             sp2->shifts[k] = sp->shifts[i];
+             statep = statep->next;
+           }
+         if (i == k)
+           sp2->shifts[k++] = nstates;
+
+         /* Patch sp2 into the chain of shifts
+            in place of sp, at the beginning.  */
+         sp2->next = sp->next;
+         first_shift = sp2;
+         if (last_shift == sp)
+           last_shift = sp2;
+
+         XFREE (sp);
 
          /* Create the next-to-final state, with shift to
             what will be the final state.  */
@@ -503,18 +499,17 @@
     }
   else
     {
-      /* There are no shifts for any state.
-         Make one shift, from the initial state to the next-to-final state.  */
-
+      /* The initial state didn't even have any shifts.
+        Give it one shift, to the next-to-final state.  */
       sp = shifts_new (1);
       sp->shifts[0] = nstates;
 
-      /* Initialize the chain of shifts with sp.  */
+      /* Patch sp into the chain of shifts at the beginning.  */
+      sp->next = first_shift;
       first_shift = sp;
-      last_shift = sp;
 
       /* Create the next-to-final state, with shift to
-         what will be the final state.  */
+        what will be the final state.  */
       insert_start_shift ();
     }
 



reply via email to

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