/[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.13.2.16 by akim, Wed Dec 5 09:22:55 2001 UTC revision 1.13.2.17 by akim, Wed Dec 5 09:23:24 2001 UTC
# Line 36  static unsigned *ruleset; Line 36  static unsigned *ruleset;
36  static unsigned *fderives;  static unsigned *fderives;
37  static unsigned *firsts;  static unsigned *firsts;
38    
39  #define FDERIVES(Symbol)   (fderives + (Symbol) * rulesetsize)  /* Retrieve the FDERIVES/FIRSTS sets of the nonterminals numbered Var.  */
40  #define   FIRSTS(Symbol)   (firsts   + (Symbol) * varsetsize)  #define FDERIVES(Var)   (fderives + ((Var) - ntokens) * rulesetsize)
41    #define   FIRSTS(Var)   (firsts   + ((Var) - ntokens) * varsetsize)
42    
43  /* number of words required to hold a bit for each rule */  /* number of words required to hold a bit for each rule */
44  static int rulesetsize;  static int rulesetsize;
# Line 71  print_firsts (void) Line 72  print_firsts (void)
72      {      {
73        fprintf (stderr, "\t%s firsts\n", tags[i]);        fprintf (stderr, "\t%s firsts\n", tags[i]);
74        for (j = 0; j < nvars; j++)        for (j = 0; j < nvars; j++)
75          if (BITISSET (FIRSTS (i - ntokens), j))          if (BITISSET (FIRSTS (i), j))
76            fprintf (stderr, "\t\t%d (%s)\n", j + ntokens, tags[j + ntokens]);            fprintf (stderr, "\t\t%d (%s)\n", j + ntokens, tags[j + ntokens]);
77      }      }
78    fprintf (stderr, "\n\n");    fprintf (stderr, "\n\n");
# Line 115  print_fderives (void) Line 116  print_fderives (void)
116  static void  static void
117  set_firsts (void)  set_firsts (void)
118  {  {
   int rowsize;  
   
119    int i, j;    int i, j;
120    
121    varsetsize = rowsize = WORDSIZE (nvars);    varsetsize = WORDSIZE (nvars);
122    
123    firsts = XCALLOC (unsigned, nvars * rowsize);    firsts = XCALLOC (unsigned, nvars * varsetsize);
124    
125    for (i = ntokens; i < nsyms; i++)    for (i = ntokens; i < nsyms; i++)
126      for (j = 0; derives[i][j] >= 0; ++j)      for (j = 0; derives[i][j] >= 0; ++j)
127        {        {
128          int symbol = ritem[rule_table[derives[i][j]].rhs];          int symbol = ritem[rule_table[derives[i][j]].rhs];
129          if (ISVAR (symbol))          if (ISVAR (symbol))
130            SETBIT (FIRSTS (i - ntokens), symbol - ntokens);            SETBIT (FIRSTS (i), symbol - ntokens);
131        }        }
132    
133    RTC (firsts, nvars);    RTC (firsts, nvars);
# Line 152  set_fderives (void) Line 151  set_fderives (void)
151  {  {
152    int i, j, k;    int i, j, k;
153    
154    fderives = XCALLOC (unsigned, nvars * rulesetsize) - ntokens * rulesetsize;    fderives = XCALLOC (unsigned, nvars * rulesetsize);
155    
156    set_firsts ();    set_firsts ();
157    
158    for (i = ntokens; i < nsyms; ++i)    for (i = ntokens; i < nsyms; ++i)
159      for (j = ntokens; j < nsyms; ++j)      for (j = ntokens; j < nsyms; ++j)
160        if (BITISSET (FIRSTS (i - ntokens), j - ntokens))        if (BITISSET (FIRSTS (i), j - ntokens))
161          for (k = 0; derives[j][k] > 0; ++k)          for (k = 0; derives[j][k] > 0; ++k)
162            SETBIT (FDERIVES (i), derives[j][k]);            SETBIT (FDERIVES (i), derives[j][k]);
163    
# Line 251  free_closure (void) Line 250  free_closure (void)
250  {  {
251    XFREE (itemset);    XFREE (itemset);
252    XFREE (ruleset);    XFREE (ruleset);
253    XFREE (fderives + ntokens * rulesetsize);    XFREE (fderives);
254  }  }

Legend:
Removed from v.1.13.2.16  
changed lines
  Added in v.1.13.2.17

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