]> git.saurik.com Git - bison.git/blobdiff - src/lalr.c
* tests/regression.at, tests/torture.at, tests/calc.at: Adjust to
[bison.git] / src / lalr.c
index 4b1a4d4987a50e8eba0f87193c6a9fb1a44bc695..d05d4ff5297647a71ce821aa6ab1b31cb18da060 100644 (file)
@@ -103,7 +103,7 @@ traverse (int i)
          break;
 
        for (k = 0; k < size; ++k)
-         F (i)[k] = F (j)[k];
+         F (j)[k] = F (i)[k];
       }
 }
 
@@ -156,22 +156,22 @@ set_state_table (void)
   {
     shifts *sp;
     for (sp = first_shift; sp; sp = sp->next)
-      state_table[sp->number].shift_table = sp;
+      state_table[sp->number].shifts = sp;
   }
 
   {
     reductions *rp;
     for (rp = first_reduction; rp; rp = rp->next)
-      state_table[rp->number].reduction_table = rp;
+      state_table[rp->number].reductions = rp;
   }
 
   /* Pessimization, but simplification of the code: make sense all the
-     states have a shift_table, even if reduced to 0 shifts.  */
+     states have a shifts, even if reduced to 0 shifts.  */
   {
     int i;
     for (i = 0; i < nstates; i++)
-      if (!state_table[i].shift_table)
-       state_table[i].shift_table = shifts_new (0);
+      if (!state_table[i].shifts)
+       state_table[i].shifts = shifts_new (0);
   }
 
   /* Initializing the lookaheads members.  Please note that it must be
@@ -183,8 +183,8 @@ set_state_table (void)
     for (i = 0; i < nstates; i++)
       {
        int k;
-       reductions *rp = state_table[i].reduction_table;
-       shifts *sp = state_table[i].shift_table;
+       reductions *rp = state_table[i].reductions;
+       shifts *sp = state_table[i].shifts;
 
        state_table[i].lookaheads = count;
 
@@ -225,7 +225,7 @@ initialize_LA (void)
   np = LAruleno;
   for (i = 0; i < nstates; i++)
     if (!state_table[i].consistent)
-      if ((rp = state_table[i].reduction_table))
+      if ((rp = state_table[i].reductions))
        for (j = 0; j < rp->nreds; j++)
          *np++ = rp->rules[j];
 }
@@ -247,16 +247,17 @@ set_goto_map (void)
 
   ngotos = 0;
   for (sp = first_shift; sp; sp = sp->next)
-    for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
-      {
-       symbol = state_table[sp->shifts[i]].accessing_symbol;
+    if (sp->nshifts)
+      for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
+       {
+         symbol = state_table[sp->shifts[i]].accessing_symbol;
 
-       if (ngotos == MAXSHORT)
-         fatal (_("too many gotos (max %d)"), MAXSHORT);
+         if (ngotos == MAXSHORT)
+           fatal (_("too many gotos (max %d)"), MAXSHORT);
 
-       ngotos++;
-       goto_map[symbol]++;
-      }
+         ngotos++;
+         goto_map[symbol]++;
+       }
 
   k = 0;
   for (i = ntokens; i < nsyms; i++)
@@ -277,15 +278,16 @@ set_goto_map (void)
   for (sp = first_shift; sp; sp = sp->next)
     {
       state1 = sp->number;
-      for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
-       {
-         state2 = sp->shifts[i];
-         symbol = state_table[state2].accessing_symbol;
-
-         k = temp_map[symbol]++;
-         from_state[k] = state1;
-         to_state[k] = state2;
-       }
+      if (sp->nshifts)
+       for (i = sp->nshifts - 1; i >= 0 && SHIFT_IS_GOTO (sp, i); --i)
+         {
+           state2 = sp->shifts[i];
+           symbol = state_table[state2].accessing_symbol;
+
+           k = temp_map[symbol]++;
+           from_state[k] = state1;
+           to_state[k] = state2;
+         }
     }
 
   XFREE (temp_map + ntokens);
@@ -340,13 +342,13 @@ initialize_F (void)
   for (i = 0; i < ngotos; i++)
     {
       int stateno = to_state[i];
-      shifts *sp = state_table[stateno].shift_table;
+      shifts *sp = state_table[stateno].shifts;
 
       int j;
       for (j = 0; j < sp->nshifts && SHIFT_IS_SHIFT (sp, j); j++)
        {
          int symbol = state_table[sp->shifts[j]].accessing_symbol;
-         SETBIT (F + i * tokensetsize, symbol);
+         SETBIT (F (i), symbol);
        }
 
       for (; j < sp->nshifts; j++)
@@ -515,7 +517,7 @@ build_relations (void)
 
          for (rp = ritem + rule_table[*rulep].rhs; *rp > 0; rp++)
            {
-             shifts *sp = state_table[stateno].shift_table;
+             shifts *sp = state_table[stateno].shifts;
              int j;
              for (j = 0; j < sp->nshifts; j++)
                {