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

Diff of /bison/src/nullable.c

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

revision 1.20 by akim, Thu Dec 13 11:02:20 2001 UTC revision 1.21 by akim, Sat Dec 15 16:21:44 2001 UTC
# Line 69  set_nullable (void) Line 69  set_nullable (void)
69    p = relts;    p = relts;
70    
71    for (ruleno = 1; ruleno < nrules + 1; ++ruleno)    for (ruleno = 1; ruleno < nrules + 1; ++ruleno)
72      if (ritem[rule_table[ruleno].rhs] > 0)      if (rule_table[ruleno].useful)
73        {        {
74          /* This rule has a non empty RHS. */          if (ritem[rule_table[ruleno].rhs] > 0)
75          short *r;            {
76          int any_tokens = 0;              /* This rule has a non empty RHS. */
77          for (r = ritem + rule_table[ruleno].rhs; *r > 0; ++r)              short *r;
78            if (ISTOKEN (*r))              int any_tokens = 0;
79              any_tokens = 1;              for (r = ritem + rule_table[ruleno].rhs; *r > 0; ++r)
80                  if (ISTOKEN (*r))
81                    any_tokens = 1;
82    
83          /* This rule has only nonterminals: schedule it for the second              /* This rule has only nonterminals: schedule it for the second
84             pass.  */                 pass.  */
85          if (!any_tokens)              if (!any_tokens)
86            for (r = ritem + rule_table[ruleno].rhs; *r > 0; ++r)                for (r = ritem + rule_table[ruleno].rhs; *r > 0; ++r)
87              {                  {
88                rcount[ruleno]++;                    rcount[ruleno]++;
89                p->next = rsets[*r];                    p->next = rsets[*r];
90                p->value = ruleno;                    p->value = ruleno;
91                rsets[*r] = p;                    rsets[*r] = p;
92                p++;                    p++;
93              }                  }
94        }            }
95      else          else
       {  
         /* This rule has an empty RHS. */  
         assert (ritem[rule_table[ruleno].rhs] == -ruleno);  
         if (rule_table[ruleno].useful && !nullable[rule_table[ruleno].lhs])  
96            {            {
97              nullable[rule_table[ruleno].lhs] = 1;              /* This rule has an empty RHS. */
98              *s2++ = rule_table[ruleno].lhs;              assert (ritem[rule_table[ruleno].rhs] == -ruleno);
99                if (rule_table[ruleno].useful && !nullable[rule_table[ruleno].lhs])
100                  {
101                    nullable[rule_table[ruleno].lhs] = 1;
102                    *s2++ = rule_table[ruleno].lhs;
103                  }
104            }            }
105        }        }
106    

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

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