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

Diff of /bison/src/reduce.c

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

revision 1.45 by akim, Mon Mar 4 13:58:05 2002 UTC revision 1.46 by akim, Sun Apr 7 15:29:36 2002 UTC
# Line 72  useful_production (int i, bitset N0) Line 72  useful_production (int i, bitset N0)
72    /* A production is useful if all of the nonterminals in its appear    /* A production is useful if all of the nonterminals in its appear
73       in the set of useful nonterminals.  */       in the set of useful nonterminals.  */
74    
75    for (r = &ritem[rules[i].rhs]; *r >= 0; r++)    for (r = rules[i].rhs; *r >= 0; r++)
76      if (ISVAR (n = *r) && !bitset_test (N0, n - ntokens))      if (ISVAR (n = *r) && !bitset_test (N0, n - ntokens))
77        return FALSE;        return FALSE;
78    return TRUE;    return TRUE;
# Line 180  inaccessable_symbols (void) Line 180  inaccessable_symbols (void)
180                    && bitset_test (P, i)                    && bitset_test (P, i)
181                    && bitset_test (V, rules[i].lhs))                    && bitset_test (V, rules[i].lhs))
182                  {                  {
183                    for (r = &ritem[rules[i].rhs]; *r >= 0; r++)                    for (r = rules[i].rhs; *r >= 0; r++)
184                      if (ISTOKEN (t = *r) || bitset_test (N, t - ntokens))                      if (ISTOKEN (t = *r) || bitset_test (N, t - ntokens))
185                        bitset_set (Vp, t);                        bitset_set (Vp, t);
186                    bitset_set (Pp, i);                    bitset_set (Pp, i);
# Line 252  reduce_grammar_tables (void) Line 252  reduce_grammar_tables (void)
252                    rules[np].prec  = rules[pn].prec;                    rules[np].prec  = rules[pn].prec;
253                    rules[np].assoc = rules[pn].assoc;                    rules[np].assoc = rules[pn].assoc;
254                    rules[np].rhs   = rules[pn].rhs;                    rules[np].rhs   = rules[pn].rhs;
255                    if (rules[np].rhs != ni)                    if (rules[np].rhs - ritem != ni)
256                      {                      {
257                        pi = rules[np].rhs;                        pi = rules[np].rhs - ritem;
258                        rules[np].rhs = ni;                        rules[np].rhs = ritem + ni;
259                        while (ritem[pi] >= 0)                        while (ritem[pi] >= 0)
260                          ritem[ni++] = ritem[pi++];                          ritem[ni++] = ritem[pi++];
261                        ritem[ni++] = -np;                        ritem[ni++] = -np;
# Line 384  reduce_output (FILE *out) Line 384  reduce_output (FILE *out)
384              rule r;              rule r;
385              fprintf (out, "#%-4d  ", i - 1);              fprintf (out, "#%-4d  ", i - 1);
386              fprintf (out, "%s:", symbols[rules[i].lhs]->tag);              fprintf (out, "%s:", symbols[rules[i].lhs]->tag);
387              for (r = &ritem[rules[i].rhs]; *r >= 0; r++)              for (r = rules[i].rhs; *r >= 0; r++)
388                fprintf (out, " %s", symbols[*r]->tag);                fprintf (out, " %s", symbols[*r]->tag);
389              fputs (";\n", out);              fputs (";\n", out);
390            }            }
# Line 415  dump_grammar (FILE *out) Line 415  dump_grammar (FILE *out)
415      {      {
416        int rhs_count = 0;        int rhs_count = 0;
417        /* Find the last RHS index in ritems. */        /* Find the last RHS index in ritems. */
418        for (r = &ritem[rules[i].rhs]; *r >= 0; ++r)        for (r = rules[i].rhs; *r >= 0; ++r)
419          ++rhs_count;          ++rhs_count;
420        fprintf (out, "%3d (%2d, %2d, %2d, %2d-%2d)   %2d ->",        fprintf (out, "%3d (%2d, %2d, %2d, %2d-%2d)   %2d ->",
421                 i - 1,                 i - 1,
422                 rules[i].prec, rules[i].assoc, rules[i].useful,                 rules[i].prec, rules[i].assoc, rules[i].useful,
423                 rules[i].rhs, rules[i].rhs + rhs_count - 1,                 rules[i].rhs - ritem, rules[i].rhs - ritem + rhs_count - 1,
424                 rules[i].lhs);                 rules[i].lhs);
425        /* Dumped the RHS. */        /* Dumped the RHS. */
426        for (r = &ritem[rules[i].rhs]; *r >= 0; r++)        for (r = rules[i].rhs; *r >= 0; r++)
427          fprintf (out, "%3d", *r);          fprintf (out, "%3d", *r);
428        fprintf (out, "  [%d]\n", -(*r) - 1);        fprintf (out, "  [%d]\n", -(*r) - 1);
429      }      }
# Line 432  dump_grammar (FILE *out) Line 432  dump_grammar (FILE *out)
432    for (i = 1; i <= nrules; i++)    for (i = 1; i <= nrules; i++)
433      {      {
434        fprintf (out, "%-5d  %s :", i, symbols[rules[i].lhs]->tag);        fprintf (out, "%-5d  %s :", i, symbols[rules[i].lhs]->tag);
435        for (r = &ritem[rules[i].rhs]; *r >= 0; r++)        for (r = rules[i].rhs; *r >= 0; r++)
436          fprintf (out, " %s", symbols[*r]->tag);          fprintf (out, " %s", symbols[*r]->tag);
437        fputc ('\n', out);        fputc ('\n', out);
438      }      }
# Line 490  reduce_grammar (void) Line 490  reduce_grammar (void)
490    inaccessable_symbols ();    inaccessable_symbols ();
491    
492    reduced = (bool) (nuseless_nonterminals + nuseless_productions > 0);    reduced = (bool) (nuseless_nonterminals + nuseless_productions > 0);
   
493    if (!reduced)    if (!reduced)
494      return;      return;
495    

Legend:
Removed from v.1.45  
changed lines
  Added in v.1.46

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