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

Diff of /bison/src/gram.c

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

revision 1.39 by akim, Sun Jun 30 17:31:19 2002 UTC revision 1.40 by akim, Sun Jun 30 17:33:08 2002 UTC
# Line 47  int glr_parser = 0; Line 47  int glr_parser = 0;
47  int pure_parser = 0;  int pure_parser = 0;
48    
49    
50    /*----------------------------------------------------------------.
51    | Print this RULE's number and lhs on OUT.  If a PREVIOUS_LHS was |
52    | already displayed (by a previous call for another rule), avoid  |
53    | useless repetitions.                                            |
54    `----------------------------------------------------------------*/
55    
56    void
57    rule_lhs_print (rule_t *rule, symbol_t *previous_lhs, FILE *out)
58    {
59      fprintf (out, "  %3d ", rule->number - 1);
60      if (previous_lhs != rule->lhs)
61        {
62          fprintf (out, "%s:", symbol_tag_get (rule->lhs));
63        }
64      else
65        {
66          int n;
67          for (n = strlen (symbol_tag_get (previous_lhs)); n > 0; --n)
68            fputc (' ', out);
69          fputc ('|', out);
70        }
71    }
72    
73    
74  /*--------------------------------------.  /*--------------------------------------.
75  | Return the number of symbols in RHS.  |  | Return the number of symbols in RHS.  |
76  `--------------------------------------*/  `--------------------------------------*/
# Line 139  ritem_longest_rhs (void) Line 163  ritem_longest_rhs (void)
163  | (exclusive) on OUT under TITLE.                                 |  | (exclusive) on OUT under TITLE.                                 |
164  `----------------------------------------------------------------*/  `----------------------------------------------------------------*/
165    
 static inline void  
 blanks_print (unsigned n, FILE *out)  
 {  
   for (/* Nothing*/; n > 0; --n)  
     fputc (' ', out);  
 }  
   
166  void  void
167  grammar_rules_partial_print (FILE *out, const char *title,  grammar_rules_partial_print (FILE *out, const char *title,
168                               rule_number_t begin, rule_number_t end)                               rule_number_t begin, rule_number_t end)
169  {  {
170    int r;    int r;
171    symbol_t *last_lhs = NULL;    symbol_t *previous_lhs = NULL;
172    
173    /* rule # : LHS -> RHS */    /* rule # : LHS -> RHS */
174    fprintf (out, "%s\n\n", title);    fprintf (out, "%s\n\n", title);
175    for (r = begin; r < end; r++)    for (r = begin; r < end; r++)
176      {      {
177        if (last_lhs && last_lhs != rules[r].lhs)        if (previous_lhs && previous_lhs != rules[r].lhs)
178          fputc ('\n', out);          fputc ('\n', out);
179          rule_lhs_print (&rules[r], previous_lhs, out);
       fprintf (out, "  %3d ", r - 1);  
       if (last_lhs != rules[r].lhs)  
         {  
           last_lhs = rules[r].lhs;  
           fprintf (out, "%s:", symbol_tag_get (last_lhs));  
         }  
       else  
         {  
           blanks_print (strlen (symbol_tag_get (last_lhs)), out);  
           fputc ('|', out);  
         }  
180        rule_rhs_print (&rules[r], out);        rule_rhs_print (&rules[r], out);
181          previous_lhs = rules[r].lhs;
182      }      }
183    fputs ("\n\n", out);    fputs ("\n\n", out);
184  }  }

Legend:
Removed from v.1.39  
changed lines
  Added in v.1.40

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