From d2d1b42b0730316f4f70eb416dcc767ffaaa2019 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 30 Nov 2001 10:49:01 +0000 Subject: [PATCH] * src/reduce.c (reduce_output): Formatting changes. * src/print.c (print_results, print_grammar): Likewise. * tests/regression.at (Rule Line Numbers) (Solved SR Conflicts, Unresolved SR Conflicts): Adjust. --- ChangeLog | 7 +++++++ src/conflicts.c | 4 ++++ src/print.c | 16 +++++++++++----- src/reduce.c | 40 ++++++++++++++++++---------------------- tests/reduce.at | 6 ++++-- tests/regression.at | 17 +++++++++++++++-- 6 files changed, 59 insertions(+), 31 deletions(-) diff --git a/ChangeLog b/ChangeLog index afc46aa4..bfc68edd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2001-11-30 Akim Demaille + + * src/reduce.c (reduce_output): Formatting changes. + * src/print.c (print_results, print_grammar): Likewise. + * tests/regression.at (Rule Line Numbers) + (Solved SR Conflicts, Unresolved SR Conflicts): Adjust. + 2001-11-30 Akim Demaille * src/reduce.c (nonterminals_reduce): Instead of throwing away diff --git a/src/conflicts.c b/src/conflicts.c index b6bacb94..82ce1460 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -419,6 +419,7 @@ conflict_report (int src_num, int rrc_num) void conflicts_output (FILE *out) { + bool printed_sth = FALSE; int i; for (i = 0; i < nstates; i++) if (conflicts[i]) @@ -426,7 +427,10 @@ conflicts_output (FILE *out) fprintf (out, _("State %d contains "), i); fputs (conflict_report (count_sr_conflicts (i), count_rr_conflicts (i)), out); + printed_sth = TRUE; } + if (printed_sth) + fputs ("\n\n", out); } diff --git a/src/print.c b/src/print.c index 6a302962..977be596 100644 --- a/src/print.c +++ b/src/print.c @@ -181,11 +181,11 @@ print_actions (FILE *out, int state) static void print_state (FILE *out, int state) { - fputs ("\n\n", out); fprintf (out, _("state %d"), state); fputs ("\n\n", out); print_core (out, state); print_actions (out, state); + fputs ("\n\n", out); } /*-----------------------------------------. @@ -212,7 +212,7 @@ print_grammar (FILE *out) int column = 0; /* rule # : LHS -> RHS */ - fprintf (out, "\n%s\n\n", _("Grammar")); + fprintf (out, "%s\n\n", _("Grammar")); fprintf (out, " %s\n", _("Number, Line, Rule")); for (i = 1; i <= nrules; i++) /* Don't print rules disabled in reduce_grammar_tables. */ @@ -228,9 +228,11 @@ print_grammar (FILE *out) fprintf (out, " /* %s */", _("empty")); fputc ('\n', out); } + fputs ("\n\n", out); + /* TERMINAL (type #) : rule #s terminal is on RHS */ - fprintf (out, "\n%s\n\n", _("Terminals, with rules where they appear")); + fprintf (out, "%s\n\n", _("Terminals, with rules where they appear")); fprintf (out, "%s (-1)\n", tags[0]); for (i = 0; i <= max_user_token_number; i++) @@ -252,9 +254,10 @@ print_grammar (FILE *out) } fprintf (out, "%s\n", buffer); } + fputs ("\n\n", out); + - fprintf (out, "\n%s\n\n", - _("Nonterminals, with rules where they appear")); + fprintf (out, "%s\n\n", _("Nonterminals, with rules where they appear")); for (i = ntokens; i <= nsyms - 1; i++) { int left_count = 0, right_count = 0; @@ -309,6 +312,7 @@ print_grammar (FILE *out) } fprintf (out, "%s\n", buffer); } + fputs ("\n\n", out); } void @@ -324,6 +328,8 @@ print_results (void) size_t size = obstack_object_size (&output_obstack); fwrite (obstack_finish (&output_obstack), 1, size, out); + if (size) + fputs ("\n\n", out); reduce_output (out); conflicts_output (out); diff --git a/src/reduce.c b/src/reduce.c index 7e164c50..626c195c 100644 --- a/src/reduce.c +++ b/src/reduce.c @@ -407,50 +407,46 @@ nonterminals_reduce (void) void reduce_output (FILE *out) { - int i; - rule r; - bool b; - if (nuseless_nonterminals > 0) { - fprintf (out, _("Useless nonterminals:")); - fprintf (out, "\n\n"); + int i; + fprintf (out, "%s\n\n", _("Useless nonterminals:")); for (i = 0; i < nuseless_nonterminals; ++i) fprintf (out, " %s\n", tags[nsyms + i]); + fputs ("\n\n", out); } - b = FALSE; - for (i = 0; i < ntokens; i++) - { + + { + bool b = FALSE; + int i; + for (i = 0; i < ntokens; i++) if (!BITISSET (V, i) && !BITISSET (V1, i)) { if (!b) - { - fprintf (out, "\n\n"); - fprintf (out, _("Terminals which are not used:")); - fprintf (out, "\n\n"); - b = TRUE; - } + fprintf (out, "%s\n\n", _("Terminals which are not used:")); + b = TRUE; fprintf (out, " %s\n", tags[i]); } - } + if (b) + fputs ("\n\n", out); + } if (nuseless_productions > 0) { - fprintf (out, "\n\n"); - fprintf (out, _("Useless rules:")); - fprintf (out, "\n\n"); + int i; + fprintf (out, "%s\n\n", _("Useless rules:")); for (i = 1; i <= nrules; i++) if (!BITISSET (P, i)) { + rule r; fprintf (out, "#%-4d ", i); fprintf (out, "%s :\t", tags[rule_table[i].lhs]); for (r = &ritem[rule_table[i].rhs]; *r >= 0; r++) fprintf (out, " %s", tags[*r]); - fprintf (out, ";\n"); + fputs (";\n", out); } + fputs ("\n\n", out); } - if (nuseless_nonterminals > 0 || nuseless_productions > 0 || b) - fprintf (out, "\n\n"); } static void diff --git a/tests/reduce.at b/tests/reduce.at index 08601d50..73856df9 100644 --- a/tests/reduce.at +++ b/tests/reduce.at @@ -44,10 +44,12 @@ AT_DATA([[input.y]], exp: useful; ]]) -AT_CHECK([[bison input.y]]) +AT_CHECK([[bison input.y]], 0, [], +[[input.y contains 9 useless nonterminals +]]) AT_CHECK([[sed -n '/^Grammar/q;/^$/!p' input.output]], 0, -[[Terminals which are not used: +[[Useless nonterminals: useless1 useless2 useless3 diff --git a/tests/regression.at b/tests/regression.at index f6b5fe0d..f141c4b8 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -63,12 +63,14 @@ AT_CHECK([bison input.y -o input.c -v], 0, [], AT_CHECK([cat input.output], [], [[State 4 contains 1 shift/reduce conflict. + Grammar Number, Line, Rule 1 3 exp -> exp OP exp 2 3 exp -> NUM + Terminals, with rules where they appear $ (-1) @@ -76,6 +78,7 @@ error (256) NUM (257) 2 OP (258) 1 + Nonterminals, with rules where they appear exp (5) @@ -138,6 +141,8 @@ state 5 state 6 $default accept + + ]]) AT_CLEANUP @@ -162,12 +167,14 @@ AT_CHECK([bison input.y -o input.c -v], 0, [], []) AT_CHECK([cat input.output], [], [[Conflict in state 4 between rule 1 and token OP resolved as shift. + Grammar Number, Line, Rule 1 4 exp -> exp OP exp 2 4 exp -> NUM + Terminals, with rules where they appear $ (-1) @@ -175,6 +182,7 @@ error (256) NUM (257) 2 OP (258) 1 + Nonterminals, with rules where they appear exp (5) @@ -236,6 +244,8 @@ state 5 state 6 $default accept + + ]]) AT_CLEANUP @@ -283,8 +293,7 @@ AT_CHECK([bison input.y -o input.c -v], 0, [], []) # Check the contents of the report. AT_CHECK([cat input.output], [], -[[ -Grammar +[[Grammar Number, Line, Rule 1 2 @1 -> /* empty */ @@ -292,6 +301,7 @@ Grammar 3 15 @2 -> /* empty */ 4 15 expr -> @2 'c' + Terminals, with rules where they appear $ (-1) @@ -300,6 +310,7 @@ $ (-1) 'c' (99) 4 error (256) + Nonterminals, with rules where they appear expr (6) @@ -378,6 +389,8 @@ state 7 state 8 $default accept + + ]]) AT_CLEANUP -- 2.47.2