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

Diff of /bison/src/conflicts.c

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

revision 1.58 by akim, Thu Dec 27 18:05:05 2001 UTC revision 1.59 by akim, Thu Dec 27 18:10:16 2001 UTC
# Line 401  conflicts_print (void) Line 401  conflicts_print (void)
401    
402    
403  void  void
 print_reductions (FILE *out, state_t *state)  
 {  
   int i;  
   shifts *shiftp = state->shifts;  
   errs *errp = state->errs;  
   int nodefault = 0;  
   
   for (i = 0; i < tokensetsize; i++)  
     shiftset[i] = 0;  
   
   for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)  
     if (!SHIFT_IS_DISABLED (shiftp, i))  
       {  
         /* if this state has a shift for the error token, don't use a  
            default rule.  */  
         if (SHIFT_IS_ERROR (shiftp, i))  
           nodefault = 1;  
         SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));  
       }  
   
   if (errp)  
     for (i = 0; i < errp->nerrs; i++)  
       if (errp->errs[i])  
         SETBIT (shiftset, errp->errs[i]);  
   
   if (state->nlookaheads == 1 && !nodefault)  
     {  
       int k;  
       int default_rule = LAruleno[state->lookaheadsp];  
   
       for (k = 0; k < tokensetsize; ++k)  
         lookaheadset[k] = LA (state->lookaheadsp)[k] & shiftset[k];  
   
       for (i = 0; i < ntokens; i++)  
         if (BITISSET (lookaheadset, i))  
           fprintf (out, _("    %-4s\t[reduce using rule %d (%s)]\n"),  
                    tags[i], default_rule,  
                    tags[rule_table[default_rule].lhs]);  
   
       fprintf (out, _("    $default\treduce using rule %d (%s)\n\n"),  
                default_rule, tags[rule_table[default_rule].lhs]);  
     }  
   else if (state->nlookaheads >= 1)  
     {  
       int cmax = 0;  
       int default_LA = -1;  
       int default_rule = 0;  
   
       if (!nodefault)  
         for (i = 0; i < state->nlookaheads; ++i)  
           {  
             int count = 0;  
             int j, k;  
   
             for (k = 0; k < tokensetsize; ++k)  
               lookaheadset[k] = LA (state->lookaheadsp + i)[k] & ~shiftset[k];  
   
             for (j = 0; j < ntokens; j++)  
               if (BITISSET (lookaheadset, j))  
                 count++;  
   
             if (count > cmax)  
               {  
                 cmax = count;  
                 default_LA = state->lookaheadsp + i;  
                 default_rule = LAruleno[state->lookaheadsp + i];  
               }  
   
             for (k = 0; k < tokensetsize; ++k)  
               shiftset[k] |= lookaheadset[k];  
           }  
   
       for (i = 0; i < tokensetsize; i++)  
         shiftset[i] = 0;  
   
       for (i = 0; i < shiftp->nshifts && SHIFT_IS_SHIFT (shiftp, i); i++)  
         if (!SHIFT_IS_DISABLED (shiftp, i))  
           SETBIT (shiftset, SHIFT_SYMBOL (shiftp, i));  
   
       for (i = 0; i < ntokens; i++)  
         {  
           int j;  
           int defaulted = 0;  
           int count = BITISSET (shiftset, i);  
   
           for (j = 0; j < state->nlookaheads; ++j)  
             {  
               if (BITISSET (LA (state->lookaheadsp + j), i))  
                 {  
                   if (count == 0)  
                     {  
                       if (state->lookaheadsp + j != default_LA)  
                         fprintf (out,  
                                  _("    %-4s\treduce using rule %d (%s)\n"),  
                                  tags[i],  
                                  LAruleno[state->lookaheadsp + j],  
                                  tags[rule_table[LAruleno[state->lookaheadsp + j]].lhs]);  
                       else  
                         defaulted = 1;  
   
                       count++;  
                     }  
                   else  
                     {  
                       if (defaulted)  
                         fprintf (out,  
                                  _("    %-4s\treduce using rule %d (%s)\n"),  
                                  tags[i],  
                                  LAruleno[default_LA],  
                                  tags[rule_table[LAruleno[default_LA]].lhs]);  
                       defaulted = 0;  
                       fprintf (out,  
                                _("    %-4s\t[reduce using rule %d (%s)]\n"),  
                                tags[i],  
                                LAruleno[state->lookaheadsp + j],  
                                tags[rule_table[LAruleno[state->lookaheadsp + j]].lhs]);  
                     }  
                 }  
             }  
         }  
   
       if (default_LA >= 0)  
         fprintf (out, _("    $default\treduce using rule %d (%s)\n"),  
                  default_rule, tags[rule_table[default_rule].lhs]);  
     }  
 }  
   
   
 void  
404  free_conflicts (void)  free_conflicts (void)
405  {  {
406    XFREE (conflicts);    XFREE (conflicts);

Legend:
Removed from v.1.58  
changed lines
  Added in v.1.59

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