+/*-----------------------------------.
+| Print the grammar's rules on OUT. |
+`-----------------------------------*/
+
+static inline void
+blanks_print (unsigned n, FILE *out)
+{
+ for (/* Nothing*/; n > 0; --n)
+ fputc (' ', out);
+}
+
+void
+grammar_rules_print (FILE *out)
+{
+ int r;
+ symbol_t *last_lhs = NULL;
+
+ /* rule # : LHS -> RHS */
+ fprintf (out, "%s\n\n", _("Grammar"));
+ for (r = 1; r < nrules + 1; r++)
+ {
+ if (last_lhs && last_lhs != rules[r].lhs)
+ fputc ('\n', 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);
+ }
+ rule_rhs_print (&rules[r], out);
+ }
+ fputs ("\n\n", out);
+}
+