/[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.30 by akim, Sun May 26 18:39:04 2002 UTC revision 1.31 by akim, Sun Jun 30 17:31:19 2002 UTC
# Line 46  nullable_print (FILE *out) Line 46  nullable_print (FILE *out)
46  void  void
47  set_nullable (void)  set_nullable (void)
48  {  {
49    int ruleno;    rule_number_t ruleno;
50    symbol_number_t *s1;    symbol_number_t *s1;
51    symbol_number_t *s2;    symbol_number_t *s2;
52    shorts *p;    shorts *p;
# Line 71  set_nullable (void) Line 71  set_nullable (void)
71    for (ruleno = 1; ruleno < nrules + 1; ++ruleno)    for (ruleno = 1; ruleno < nrules + 1; ++ruleno)
72      if (rules[ruleno].useful)      if (rules[ruleno].useful)
73        {        {
74          if (rules[ruleno].rhs[0] >= 0)          rule_t *rule = &rules[ruleno];
75            if (rule->rhs[0] >= 0)
76            {            {
77              /* This rule has a non empty RHS. */              /* This rule has a non empty RHS. */
78              item_number_t *r;              item_number_t *r = NULL;
79              int any_tokens = 0;              int any_tokens = 0;
80              for (r = rules[ruleno].rhs; *r >= 0; ++r)              for (r = rule->rhs; *r >= 0; ++r)
81                if (ISTOKEN (*r))                if (ISTOKEN (*r))
82                  any_tokens = 1;                  any_tokens = 1;
83    
84              /* This rule has only nonterminals: schedule it for the second              /* This rule has only nonterminals: schedule it for the second
85                 pass.  */                 pass.  */
86              if (!any_tokens)              if (!any_tokens)
87                for (r = rules[ruleno].rhs; *r >= 0; ++r)                for (r = rule->rhs; *r >= 0; ++r)
88                  {                  {
89                    rcount[ruleno]++;                    rcount[ruleno]++;
90                    p->next = rsets[*r];                    p->next = rsets[*r];
# Line 95  set_nullable (void) Line 96  set_nullable (void)
96          else          else
97            {            {
98              /* This rule has an empty RHS. */              /* This rule has an empty RHS. */
99              assert (rules[ruleno].rhs[0] == -ruleno);              assert (rule_number_of_item_number (rule->rhs[0]) == ruleno);
100              if (rules[ruleno].useful && !nullable[rules[ruleno].lhs->number])              if (rule->useful && !nullable[rule->lhs->number])
101                {                {
102                  nullable[rules[ruleno].lhs->number] = 1;                  nullable[rule->lhs->number] = 1;
103                  *s2++ = rules[ruleno].lhs->number;                  *s2++ = rule->lhs->number;
104                }                }
105            }            }
106        }        }

Legend:
Removed from v.1.30  
changed lines
  Added in v.1.31

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