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

Diff of /bison/src/closure.c

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

revision 1.28 by akim, Wed Dec 5 09:39:43 2001 UTC revision 1.29 by akim, Wed Dec 5 09:40:00 2001 UTC
# Line 128  set_firsts (void) Line 128  set_firsts (void)
128        {        {
129          int symbol = ritem[rule_table[derives[i][j]].rhs];          int symbol = ritem[rule_table[derives[i][j]].rhs];
130          if (ISVAR (symbol))          if (ISVAR (symbol))
131            {            SETBIT (FIRSTS (i - ntokens), symbol - ntokens);
             symbol -= ntokens;  
             SETBIT (FIRSTS (i - ntokens), symbol);  
           }  
132        }        }
133    
134    RTC (firsts, nvars);    RTC (firsts, nvars);
# Line 153  set_firsts (void) Line 150  set_firsts (void)
150  static void  static void
151  set_fderives (void)  set_fderives (void)
152  {  {
153    unsigned *rrow;    int i, j, k;
   unsigned *vrow;  
   int j;  
   unsigned cword;  
   short *rp;  
   int b;  
   
   int ruleno;  
   int i;  
154    
155    fderives = XCALLOC (unsigned, nvars * rulesetsize) - ntokens * rulesetsize;    fderives = XCALLOC (unsigned, nvars * rulesetsize) - ntokens * rulesetsize;
156    
157    set_firsts ();    set_firsts ();
158    
159    rrow = FDERIVES (ntokens);    for (i = ntokens; i < nsyms; ++i)
160        for (j = ntokens; j < nsyms; ++j)
161    for (i = ntokens; i < nsyms; i++)        if (BITISSET (FIRSTS (i - ntokens), j - ntokens))
162      {          for (k = 0; derives[j][k] > 0; ++k)
163        vrow = FIRSTS (i - ntokens);            SETBIT (FDERIVES (i), derives[j][k]);
       cword = *vrow++;  
       b = 0;  
       for (j = ntokens; j < nsyms; j++)  
         {  
           if (cword & (1 << b))  
             {  
               rp = derives[j];  
               while ((ruleno = *rp++) > 0)  
                 SETBIT (rrow, ruleno);  
             }  
   
           b++;  
           if (b >= BITS_PER_WORD && j + 1 < nsyms)  
             {  
               cword = *vrow++;  
               b = 0;  
             }  
         }  
   
       rrow += rulesetsize;  
     }  
164    
165    if (trace_flag)    if (trace_flag)
166      print_fderives ();      print_fderives ();

Legend:
Removed from v.1.28  
changed lines
  Added in v.1.29

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