/[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.31 by akim, Fri Nov 30 10:49:01 2001 UTC revision 1.32 by akim, Fri Nov 30 10:49:24 2001 UTC
# Line 310  reduce_grammar_tables (void) Line 310  reduce_grammar_tables (void)
310    
311      }      }
312  #endif /* 0 */  #endif /* 0 */
313    /* Disable useless productions,    /* Disable useless productions. */
      since they may contain useless nonterms  
      that would get mapped below to -1 and confuse everyone.  */  
314    if (nuseless_productions > 0)    if (nuseless_productions > 0)
315      {      {
316        int pn;        int pn;
   
317        for (pn = 1; pn <= nrules; pn++)        for (pn = 1; pn <= nrules; pn++)
318          {          rule_table[pn].useful = BITISSET (P, pn);
           if (!BITISSET (P, pn))  
             {  
               rule_table[pn].lhs = -1;  
             }  
         }  
319      }      }
320  }  }
321    
# Line 338  nonterminals_reduce (void) Line 330  nonterminals_reduce (void)
330    int i, n;    int i, n;
331    rule r;    rule r;
332    
333    /* Create a map of nonterminal number to new nonterminal number. -1    /* Map the nonterminals to their new index: useful first, useless
334       in the map means it was useless and is being eliminated.  */       afterwards.  Kept for later report.  */
335    
336    short *nontermmap = XCALLOC (short, nvars) - ntokens;    short *nontermmap = XCALLOC (short, nvars) - ntokens;
337    n = ntokens;    n = ntokens;
# Line 379  nonterminals_reduce (void) Line 371  nonterminals_reduce (void)
371    
372    for (i = 1; i <= nrules; i++)    for (i = 1; i <= nrules; i++)
373      {      {
374        /* Ignore the rules disabled above.  */        rule_table[i].lhs = nontermmap[rule_table[i].lhs];
       if (rule_table[i].lhs >= 0)  
         rule_table[i].lhs = nontermmap[rule_table[i].lhs];  
375        if (ISVAR (rule_table[i].precsym))        if (ISVAR (rule_table[i].precsym))
376          /* Can this happen?  */          /* Can this happen?  */
377          rule_table[i].precsym = nontermmap[rule_table[i].precsym];          rule_table[i].precsym = nontermmap[rule_table[i].precsym];
# Line 396  nonterminals_reduce (void) Line 386  nonterminals_reduce (void)
386    nsyms -= nuseless_nonterminals;    nsyms -= nuseless_nonterminals;
387    nvars -= nuseless_nonterminals;    nvars -= nuseless_nonterminals;
388    
389    free (&nontermmap[ntokens]);    free (nontermmap + ntokens);
390  }  }
391    
392    
# Line 436  reduce_output (FILE *out) Line 426  reduce_output (FILE *out)
426        int i;        int i;
427        fprintf (out, "%s\n\n", _("Useless rules:"));        fprintf (out, "%s\n\n", _("Useless rules:"));
428        for (i = 1; i <= nrules; i++)        for (i = 1; i <= nrules; i++)
429          if (!BITISSET (P, i))          if (!rule_table[i].useful)
430            {            {
431              rule r;              rule r;
432              fprintf (out, "#%-4d  ", i);              fprintf (out, "#%-4d  ", i);
433              fprintf (out, "%s :\t", tags[rule_table[i].lhs]);              fprintf (out, "%s:", tags[rule_table[i].lhs]);
434              for (r = &ritem[rule_table[i].rhs]; *r >= 0; r++)              for (r = &ritem[rule_table[i].rhs]; *r >= 0; r++)
435                fprintf (out, " %s", tags[*r]);                fprintf (out, " %s", tags[*r]);
436              fputs (";\n", out);              fputs (";\n", out);

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

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