/[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.19 by akim, Mon Nov 19 10:38:25 2001 UTC revision 1.20 by akim, Mon Nov 19 10:39:07 2001 UTC
# Line 26  Line 26 
26  #include "derives.h"  #include "derives.h"
27  #include "warshall.h"  #include "warshall.h"
28    
29    /* ITEMSETSIZE is the size of the array ITEMSET.  */
30  short *itemset;  short *itemset;
31  short *itemsetend;  size_t itemsetsize;
32    
33  static unsigned *ruleset;  static unsigned *ruleset;
34    
35  /* internal data.  See comments before set_fderives and set_firsts.  */  /* internal data.  See comments before set_fderives and set_firsts.  */
# Line 51  static int varsetsize; Line 53  static int varsetsize;
53  static void  static void
54  print_closure (int n)  print_closure (int n)
55  {  {
56    short *isp;    int i;
   
57    fprintf (stderr, "n = %d\n", n);    fprintf (stderr, "n = %d\n", n);
58    for (isp = itemset; isp < itemsetend; isp++)    for (i = 0; i < itemsetsize; ++i)
59      fprintf (stderr, "   %d\n", *isp);      fprintf (stderr, "   %d\n", itemset[i]);
60    fprintf (stderr, "\n\n");    fprintf (stderr, "\n\n");
61  }  }
62    
# Line 265  closure (short *core, int n) Line 266  closure (short *core, int n)
266      }      }
267    
268    ruleno = 0;    ruleno = 0;
269    itemsetend = itemset;    itemsetsize = 0;
270    csp = core;    csp = core;
271    for (i= 0; i < rulesetsize; ++i)    for (i = 0; i < rulesetsize; ++i)
272      {      {
273        int word = ruleset[i];        int word = ruleset[i];
274        if (word == 0)        if (word == 0)
# Line 283  closure (short *core, int n) Line 284  closure (short *core, int n)
284                if (word & (1 << b))                if (word & (1 << b))
285                  {                  {
286                    itemno = rule_table[ruleno].rhs;                    itemno = rule_table[ruleno].rhs;
287                    while (csp < (core + n ) && *csp < itemno)                    while (csp < (core + n) && *csp < itemno)
288                      *itemsetend++ = *csp++;                      itemset[itemsetsize++] = *csp++;
289                    *itemsetend++ = itemno;                    itemset[itemsetsize++] = itemno;
290                  }                  }
291    
292                ruleno++;                ruleno++;
# Line 294  closure (short *core, int n) Line 295  closure (short *core, int n)
295      }      }
296    
297    while (csp < (core + n))    while (csp < (core + n))
298      *itemsetend++ = *csp++;      itemset[itemsetsize++] = *csp++;
299    
300    if (trace_flag)    if (trace_flag)
301      print_closure (n);      print_closure (n);

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.20

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