/[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.24 by akim, Sat Dec 29 14:18:52 2001 UTC revision 1.25 by akim, Sat Dec 29 14:20:13 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 (rule_table[ruleno].useful)      if (rules[ruleno].useful)
73        {        {
74          if (ritem[rule_table[ruleno].rhs] >= 0)          if (ritem[rules[ruleno].rhs] >= 0)
75            {            {
76              /* This rule has a non empty RHS. */              /* This rule has a non empty RHS. */
77              short *r;              short *r;
78              int any_tokens = 0;              int any_tokens = 0;
79              for (r = &ritem[rule_table[ruleno].rhs]; *r >= 0; ++r)              for (r = &ritem[rules[ruleno].rhs]; *r >= 0; ++r)
80                if (ISTOKEN (*r))                if (ISTOKEN (*r))
81                  any_tokens = 1;                  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[rules[ruleno].rhs]; *r >= 0; ++r)
87                  {                  {
88                    rcount[ruleno]++;                    rcount[ruleno]++;
89                    p->next = rsets[*r];                    p->next = rsets[*r];
# Line 95  set_nullable (void) Line 95  set_nullable (void)
95          else          else
96            {            {
97              /* This rule has an empty RHS. */              /* This rule has an empty RHS. */
98              assert (ritem[rule_table[ruleno].rhs] == -ruleno);              assert (ritem[rules[ruleno].rhs] == -ruleno);
99              if (rule_table[ruleno].useful && !nullable[rule_table[ruleno].lhs])              if (rules[ruleno].useful && !nullable[rules[ruleno].lhs])
100                {                {
101                  nullable[rule_table[ruleno].lhs] = 1;                  nullable[rules[ruleno].lhs] = 1;
102                  *s2++ = rule_table[ruleno].lhs;                  *s2++ = rules[ruleno].lhs;
103                }                }
104            }            }
105        }        }
# Line 109  set_nullable (void) Line 109  set_nullable (void)
109        {        {
110          ruleno = p->value;          ruleno = p->value;
111          if (--rcount[ruleno] == 0)          if (--rcount[ruleno] == 0)
112            if (rule_table[ruleno].useful && !nullable[rule_table[ruleno].lhs])            if (rules[ruleno].useful && !nullable[rules[ruleno].lhs])
113              {              {
114                nullable[rule_table[ruleno].lhs] = 1;                nullable[rules[ruleno].lhs] = 1;
115                *s2++ = rule_table[ruleno].lhs;                *s2++ = rules[ruleno].lhs;
116              }              }
117        }        }
118    

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.25

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