/[bison]/bison/src/lalr.c
ViewVC logotype

Diff of /bison/src/lalr.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.57 by akim, Mon Mar 4 12:03:36 2002 UTC revision 1.58 by akim, Mon Mar 4 12:04:47 2002 UTC
# Line 51  short *to_state = NULL; Line 51  short *to_state = NULL;
51    
52  /* And for the famous F variable, which name is so descriptive that a  /* And for the famous F variable, which name is so descriptive that a
53     comment is hardly needed.  <grin>.  */     comment is hardly needed.  <grin>.  */
54  static unsigned *F = NULL;  static bitset *F = NULL;
 #define F(Rule)  (F + (Rule) * tokensetsize)  
55    
56  static short **includes;  static short **includes;
57  static shorts **lookback;  static shorts **lookback;
# Line 75  static void Line 74  static void
74  traverse (int i)  traverse (int i)
75  {  {
76    int j;    int j;
   size_t k;  
77    int height;    int height;
   size_t size = F (i + 1) - F(i);  
78    
79    VERTICES[++top] = i;    VERTICES[++top] = i;
80    INDEX[i] = height = top;    INDEX[i] = height = top;
# Line 91  traverse (int i) Line 88  traverse (int i)
88          if (INDEX[i] > INDEX[R[i][j]])          if (INDEX[i] > INDEX[R[i][j]])
89            INDEX[i] = INDEX[R[i][j]];            INDEX[i] = INDEX[R[i][j]];
90    
91          for (k = 0; k < size; ++k)          bitset_or (F[i], F[i], F[R[i][j]]);
           F (i)[k] |= F (R[i][j])[k];  
92        }        }
93    
94    if (INDEX[i] == height)    if (INDEX[i] == height)
# Line 104  traverse (int i) Line 100  traverse (int i)
100          if (i == j)          if (i == j)
101            break;            break;
102    
103          for (k = 0; k < size; ++k)          bitset_copy (F[j], F[i]);
           F (j)[k] = F (i)[k];  
104        }        }
105  }  }
106    
# Line 262  initialize_F (void) Line 257  initialize_F (void)
257    
258    int i;    int i;
259    
260    F = XCALLOC (unsigned, ngotos * tokensetsize);    F = XCALLOC (bitset, ngotos);
261      for (i = 0; i < ngotos; ++i)
262        {
263          F[i] = bitset_create (ntokens, BITSET_FIXED);
264          bitset_zero (F[i]);
265        }
266    
267    for (i = 0; i < ngotos; i++)    for (i = 0; i < ngotos; i++)
268      {      {
# Line 271  initialize_F (void) Line 271  initialize_F (void)
271    
272        int j;        int j;
273        for (j = 0; j < sp->nshifts && SHIFT_IS_SHIFT (sp, j); j++)        for (j = 0; j < sp->nshifts && SHIFT_IS_SHIFT (sp, j); j++)
274          SETBIT (F (i), SHIFT_SYMBOL (sp, j));          bitset_set (F[i], SHIFT_SYMBOL (sp, j));
275    
276        for (; j < sp->nshifts; j++)        for (; j < sp->nshifts; j++)
277          {          {
# Line 500  compute_lookaheads (void) Line 500  compute_lookaheads (void)
500    
501    for (i = 0; i < nLA; i++)    for (i = 0; i < nLA; i++)
502      for (sp = lookback[i]; sp; sp = sp->next)      for (sp = lookback[i]; sp; sp = sp->next)
503        {        bitset_or (LA[i], LA[i], F[sp->value]);
         int j;  
         for (j = 0; j < ntokens; ++j)  
           if (BITISSET (F (sp->value), j))  
             bitset_set (LA[i], j);  
       }  
504    
505    /* Free LOOKBACK. */    /* Free LOOKBACK. */
506    for (i = 0; i < nLA; i++)    for (i = 0; i < nLA; i++)
507      LIST_FREE (shorts, lookback[i]);      LIST_FREE (shorts, lookback[i]);
508    
509    XFREE (lookback);    XFREE (lookback);
510      for (i = 0; i < (unsigned) ngotos; ++i)
511        bitset_free (F[i]);
512    XFREE (F);    XFREE (F);
513  }  }
514    

Legend:
Removed from v.1.57  
changed lines
  Added in v.1.58

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26