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

Diff of /bison/src/print.c

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

revision 1.69 by akim, Sat Jun 15 18:21:11 2002 UTC revision 1.70 by akim, Sat Jun 15 18:23:12 2002 UTC
# Line 47  print_token (int extnum, int token) Line 47  print_token (int extnum, int token)
47  }  }
48  #endif  #endif
49    
 static inline const char *  
 escape (const char *s)  
 {  
   return quotearg_n_style (1, escape_quoting_style, s);  
 }  
   
 /* Be cautious not to use twice the same slot in a single expression. */  
 static inline const char *  
 escape2 (const char *s)  
 {  
   return quotearg_n_style (2, escape_quoting_style, s);  
 }  
   
50    
51  /*--------------------------------.  /*--------------------------------.
52  | Report information on a state.  |  | Report information on a state.  |
# Line 94  print_core (FILE *out, state_t *state) Line 81  print_core (FILE *out, state_t *state)
81              sp++;              sp++;
82    
83            rule = -(*sp);            rule = -(*sp);
84            fprintf (out, "    %s  ->  ", escape (rules[rule].lhs->tag));            fprintf (out, "    %s  ->  ", symbol_tag_get (rules[rule].lhs));
85    
86            for (sp = rules[rule].rhs; sp < sp1; sp++)            for (sp = rules[rule].rhs; sp < sp1; sp++)
87              fprintf (out, "%s ", escape (symbols[*sp]->tag));              fprintf (out, "%s ", symbol_tag_get (symbols[*sp]));
88    
89            fputc ('.', out);            fputc ('.', out);
90    
91            for (/* Nothing */; *sp >= 0; ++sp)            for (/* Nothing */; *sp >= 0; ++sp)
92              fprintf (out, " %s", escape (symbols[*sp]->tag));              fprintf (out, " %s", symbol_tag_get (symbols[*sp]));
93    
94            /* Display the lookaheads?  */            /* Display the lookaheads?  */
95            if (report_flag & report_lookaheads)            if (report_flag & report_lookaheads)
# Line 123  print_core (FILE *out, state_t *state) Line 110  print_core (FILE *out, state_t *state)
110                        if (bitset_test (LA[state->lookaheadsp + j], k)                        if (bitset_test (LA[state->lookaheadsp + j], k)
111                            && LArule[state->lookaheadsp + j]->number == rule)                            && LArule[state->lookaheadsp + j]->number == rule)
112                          fprintf (out, "%s%s",                          fprintf (out, "%s%s",
113                                   quotearg_style (escape_quoting_style,                                   symbol_tag_get (symbols[k]),
                                                  symbols[k]->tag),  
114                                   --nlookaheads ? ", " : "");                                   --nlookaheads ? ", " : "");
115                    fprintf (out, "]");                    fprintf (out, "]");
116                  }                  }
# Line 152  print_shifts (FILE *out, state_t *state) Line 138  print_shifts (FILE *out, state_t *state)
138          symbol_number_t symbol = states[state1]->accessing_symbol;          symbol_number_t symbol = states[state1]->accessing_symbol;
139          fprintf (out,          fprintf (out,
140                   _("    %-4s\tshift, and go to state %d\n"),                   _("    %-4s\tshift, and go to state %d\n"),
141                   escape (symbols[symbol]->tag), state1);                   symbol_tag_get (symbols[symbol]), state1);
142        }        }
143    
144    if (i > 0)    if (i > 0)
# Line 169  print_errs (FILE *out, state_t *state) Line 155  print_errs (FILE *out, state_t *state)
155    for (i = 0; i < errp->nerrs; ++i)    for (i = 0; i < errp->nerrs; ++i)
156      if (errp->errs[i])      if (errp->errs[i])
157        fprintf (out, _("    %-4s\terror (nonassociative)\n"),        fprintf (out, _("    %-4s\terror (nonassociative)\n"),
158                 escape (symbols[errp->errs[i]]->tag));                 symbol_tag_get (symbols[errp->errs[i]]));
159    
160    if (i > 0)    if (i > 0)
161      fputc ('\n', out);      fputc ('\n', out);
# Line 193  print_gotos (FILE *out, state_t *state) Line 179  print_gotos (FILE *out, state_t *state)
179              int state1 = shiftp->shifts[i];              int state1 = shiftp->shifts[i];
180              symbol_number_t symbol = states[state1]->accessing_symbol;              symbol_number_t symbol = states[state1]->accessing_symbol;
181              fprintf (out, _("    %-4s\tgo to state %d\n"),              fprintf (out, _("    %-4s\tgo to state %d\n"),
182                       escape (symbols[symbol]->tag), state1);                       symbol_tag_get (symbols[symbol]), state1);
183            }            }
184    
185        fputc ('\n', out);        fputc ('\n', out);
# Line 217  print_reductions (FILE *out, state_t *st Line 203  print_reductions (FILE *out, state_t *st
203        int rule = redp->rules[0];        int rule = redp->rules[0];
204        symbol_number_t symbol = rules[rule].lhs->number;        symbol_number_t symbol = rules[rule].lhs->number;
205        fprintf (out, _("    $default\treduce using rule %d (%s)\n\n"),        fprintf (out, _("    $default\treduce using rule %d (%s)\n\n"),
206                 rule - 1, escape (symbols[symbol]->tag));                 rule - 1, symbol_tag_get (symbols[symbol]));
207        return;        return;
208      }      }
209    
# Line 246  print_reductions (FILE *out, state_t *st Line 232  print_reductions (FILE *out, state_t *st
232        for (i = 0; i < ntokens; i++)        for (i = 0; i < ntokens; i++)
233          if (bitset_test (lookaheadset, i))          if (bitset_test (lookaheadset, i))
234            fprintf (out, _("    %-4s\t[reduce using rule %d (%s)]\n"),            fprintf (out, _("    %-4s\t[reduce using rule %d (%s)]\n"),
235                     escape (symbols[i]->tag),                     symbol_tag_get (symbols[i]),
236                     default_rule->number - 1,                     default_rule->number - 1,
237                     escape2 (default_rule->lhs->tag));                     symbol_tag_get_n (default_rule->lhs, 1));
238    
239        fprintf (out, _("    $default\treduce using rule %d (%s)\n\n"),        fprintf (out, _("    $default\treduce using rule %d (%s)\n\n"),
240                 default_rule->number - 1,                 default_rule->number - 1,
241                 escape (default_rule->lhs->tag));                 symbol_tag_get (default_rule->lhs));
242      }      }
243    else if (state->nlookaheads >= 1)    else if (state->nlookaheads >= 1)
244      {      {
# Line 302  print_reductions (FILE *out, state_t *st Line 288  print_reductions (FILE *out, state_t *st
288                      if (state->lookaheadsp + j != default_LA)                      if (state->lookaheadsp + j != default_LA)
289                        fprintf (out,                        fprintf (out,
290                                 _("    %-4s\treduce using rule %d (%s)\n"),                                 _("    %-4s\treduce using rule %d (%s)\n"),
291                                 escape (symbols[i]->tag),                                 symbol_tag_get (symbols[i]),
292                                 LArule[state->lookaheadsp + j]->number - 1,                                 LArule[state->lookaheadsp + j]->number - 1,
293                                 escape2 (LArule[state->lookaheadsp + j]->lhs->tag));                                 symbol_tag_get_n (LArule[state->lookaheadsp + j]->lhs, 1));
294                      else                      else
295                        defaulted = 1;                        defaulted = 1;
296    
# Line 315  print_reductions (FILE *out, state_t *st Line 301  print_reductions (FILE *out, state_t *st
301                      if (defaulted)                      if (defaulted)
302                        fprintf (out,                        fprintf (out,
303                                 _("    %-4s\treduce using rule %d (%s)\n"),                                 _("    %-4s\treduce using rule %d (%s)\n"),
304                                 escape (symbols[i]->tag),                                 symbol_tag_get (symbols[i]),
305                                 LArule[default_LA]->number - 1,                                 LArule[default_LA]->number - 1,
306                                 escape2 (LArule[default_LA]->lhs->tag));                                 symbol_tag_get_n (LArule[default_LA]->lhs, 1));
307                      defaulted = 0;                      defaulted = 0;
308                      fprintf (out,                      fprintf (out,
309                               _("    %-4s\t[reduce using rule %d (%s)]\n"),                               _("    %-4s\t[reduce using rule %d (%s)]\n"),
310                               escape (symbols[i]->tag),                               symbol_tag_get (symbols[i]),
311                               LArule[state->lookaheadsp + j]->number - 1,                               LArule[state->lookaheadsp + j]->number - 1,
312                               escape2 (LArule[state->lookaheadsp + j]->lhs->tag));                               symbol_tag_get_n (LArule[state->lookaheadsp + j]->lhs, 1));
313                    }                    }
314                }                }
315          }          }
# Line 331  print_reductions (FILE *out, state_t *st Line 317  print_reductions (FILE *out, state_t *st
317        if (default_LA >= 0)        if (default_LA >= 0)
318          fprintf (out, _("    $default\treduce using rule %d (%s)\n"),          fprintf (out, _("    $default\treduce using rule %d (%s)\n"),
319                   default_rule->number - 1,                   default_rule->number - 1,
320                   escape (default_rule->lhs->tag));                   symbol_tag_get (default_rule->lhs));
321      }      }
322  }  }
323    
# Line 389  static void Line 375  static void
375  print_grammar (FILE *out)  print_grammar (FILE *out)
376  {  {
377    symbol_number_t i;    symbol_number_t i;
   int j;  
378    item_number_t *rule;    item_number_t *rule;
379    char buffer[90];    char buffer[90];
380    int column = 0;    int column = 0;
381    
382    /* rule # : LHS -> RHS */    grammar_rules_print (out);
   fprintf (out, "%s\n\n", _("Grammar"));  
   fprintf (out, "  %s\n", _("Number, Line, Rule"));  
   for (j = 1; j < nrules + 1; j++)  
     {  
       fprintf (out, "  %3d %3d %s ->",  
                j - 1, rules[j].location.first_line,  
                escape (rules[j].lhs->tag));  
       rule = rules[j].rhs;  
       if (*rule >= 0)  
         while (*rule >= 0)  
           fprintf (out, " %s", escape (symbols[*rule++]->tag));  
       else  
         fprintf (out, " /* %s */", _("empty"));  
       fputc ('\n', out);  
     }  
   fputs ("\n\n", out);  
   
383    
384    /* TERMINAL (type #) : rule #s terminal is on RHS */    /* TERMINAL (type #) : rule #s terminal is on RHS */
385    fprintf (out, "%s\n\n", _("Terminals, with rules where they appear"));    fprintf (out, "%s\n\n", _("Terminals, with rules where they appear"));
386    for (i = 0; i < max_user_token_number + 1; i++)    for (i = 0; i < max_user_token_number + 1; i++)
387      if (token_translations[i] != undeftoken->number)      if (token_translations[i] != undeftoken->number)
388        {        {
389            const char *tag = symbol_tag_get (symbols[token_translations[i]]);
390            int r;
391          buffer[0] = 0;          buffer[0] = 0;
392          column = strlen (escape (symbols[token_translations[i]]->tag));          column = strlen (tag);
393          fputs (escape (symbols[token_translations[i]]->tag), out);          fputs (tag, out);
394          END_TEST (50);          END_TEST (50);
395          sprintf (buffer, " (%d)", i);          sprintf (buffer, " (%d)", i);
396    
397          for (j = 1; j < nrules + 1; j++)          for (r = 1; r < nrules + 1; r++)
398            for (rule = rules[j].rhs; *rule >= 0; rule++)            for (rule = rules[r].rhs; *rule >= 0; rule++)
399              if (item_number_as_symbol_number (*rule) == token_translations[i])              if (item_number_as_symbol_number (*rule) == token_translations[i])
400                {                {
401                  END_TEST (65);                  END_TEST (65);
402                  sprintf (buffer + strlen (buffer), " %d", j - 1);                  sprintf (buffer + strlen (buffer), " %d", r - 1);
403                  break;                  break;
404                }                }
405          fprintf (out, "%s\n", buffer);          fprintf (out, "%s\n", buffer);
# Line 441  print_grammar (FILE *out) Line 411  print_grammar (FILE *out)
411    for (i = ntokens; i < nsyms; i++)    for (i = ntokens; i < nsyms; i++)
412      {      {
413        int left_count = 0, right_count = 0;        int left_count = 0, right_count = 0;
414          int r;
415          const char *tag = symbol_tag_get (symbols[i]);
416    
417        for (j = 1; j < nrules + 1; j++)        for (r = 1; r < nrules + 1; r++)
418          {          {
419            if (rules[j].lhs->number == i)            if (rules[r].lhs->number == i)
420              left_count++;              left_count++;
421            for (rule = rules[j].rhs; *rule >= 0; rule++)            for (rule = rules[r].rhs; *rule >= 0; rule++)
422              if (item_number_as_symbol_number (*rule) == i)              if (item_number_as_symbol_number (*rule) == i)
423                {                {
424                  right_count++;                  right_count++;
# Line 455  print_grammar (FILE *out) Line 427  print_grammar (FILE *out)
427          }          }
428    
429        buffer[0] = 0;        buffer[0] = 0;
430        fputs (escape (symbols[i]->tag), out);        fputs (tag, out);
431        column = strlen (escape (symbols[i]->tag));        column = strlen (tag);
432        sprintf (buffer, " (%d)", i);        sprintf (buffer, " (%d)", i);
433        END_TEST (0);        END_TEST (0);
434    
# Line 465  print_grammar (FILE *out) Line 437  print_grammar (FILE *out)
437            END_TEST (50);            END_TEST (50);
438            sprintf (buffer + strlen (buffer), _(" on left:"));            sprintf (buffer + strlen (buffer), _(" on left:"));
439    
440            for (j = 1; j < nrules + 1; j++)            for (r = 1; r < nrules + 1; r++)
441              {              {
442                END_TEST (65);                END_TEST (65);
443                if (rules[j].lhs->number == i)                if (rules[r].lhs->number == i)
444                  sprintf (buffer + strlen (buffer), " %d", j - 1);                  sprintf (buffer + strlen (buffer), " %d", r - 1);
445              }              }
446          }          }
447    
# Line 479  print_grammar (FILE *out) Line 451  print_grammar (FILE *out)
451              sprintf (buffer + strlen (buffer), ",");              sprintf (buffer + strlen (buffer), ",");
452            END_TEST (50);            END_TEST (50);
453            sprintf (buffer + strlen (buffer), _(" on right:"));            sprintf (buffer + strlen (buffer), _(" on right:"));
454            for (j = 1; j < nrules + 1; j++)            for (r = 1; r < nrules + 1; r++)
455              {              {
456                for (rule = rules[j].rhs; *rule >= 0; rule++)                for (rule = rules[r].rhs; *rule >= 0; rule++)
457                  if (item_number_as_symbol_number (*rule) == i)                  if (item_number_as_symbol_number (*rule) == i)
458                    {                    {
459                      END_TEST (65);                      END_TEST (65);
460                      sprintf (buffer + strlen (buffer), " %d", j - 1);                      sprintf (buffer + strlen (buffer), " %d", r - 1);
461                      break;                      break;
462                    }                    }
463              }              }

Legend:
Removed from v.1.69  
changed lines
  Added in v.1.70

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