From: Akim Demaille Date: Mon, 2 Oct 2000 08:08:52 +0000 (+0000) Subject: * src/conflicts.c (conflict_report): New function. X-Git-Tag: BISON-1_28b~113 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/0619caf0b1e1f05b710bac41bcefa6d12206f285 * src/conflicts.c (conflict_report): New function. (conflict_log, verbose_conflict_log): Replace with... (print_conflicts): this function. Adjust dependencies. * src/conflicts.h: New file. Propagate its inclusion. --- diff --git a/ChangeLog b/ChangeLog index c019e7da..8430f5c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2000-10-02 Akim Demaille + + * src/conflicts.c (conflict_report): New function. + (conflict_log, verbose_conflict_log): Replace with... + (print_conflicts): this function. + Adjust dependencies. + * src/conflicts.h: New file. + Propagate its inclusion. + + 2000-10-02 Akim Demaille * src/nullable.h: New file. diff --git a/src/Makefile.am b/src/Makefile.am index 99e0c890..cebc1fd4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -18,7 +18,7 @@ bison_SOURCES = LR0.c allocate.c closure.c complain.c conflicts.c \ EXTRA_bison_SOURCES = vmsgetargs.c -noinst_HEADERS = alloc.h closure.h complain.h \ +noinst_HEADERS = alloc.h closure.h complain.h conflicts.h \ derives.h \ files.h getargs.h gram.h lalr.h lex.h nullable.h \ output.h state.h \ diff --git a/src/conflicts.c b/src/conflicts.c index 08bc1feb..2ade63da 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -25,22 +25,16 @@ #include "gram.h" #include "state.h" #include "lalr.h" +#include "conflicts.h" extern char **tags; extern int fixed_outfiles; -extern void initialize_conflicts PARAMS ((void)); -extern void conflict_log PARAMS ((void)); -extern void verbose_conflict_log PARAMS ((void)); -extern void print_reductions PARAMS ((int)); -extern void finalize_conflicts PARAMS ((void)); - -char any_conflicts; +int any_conflicts = 0; errs **err_table; int expected_conflicts; static char *conflicts; - static unsigned *shiftset; static unsigned *lookaheadset; static int src_total; @@ -275,7 +269,6 @@ void initialize_conflicts (void) { int i; -/* errs *sp; JF unused */ conflicts = NEW2 (nstates, char); shiftset = NEW2 (tokensetsize, unsigned); @@ -290,13 +283,6 @@ initialize_conflicts (void) } - - - - - - - /*---------------------------------------------. | Count the number of shift/reduce conflicts. | `---------------------------------------------*/ @@ -422,49 +408,29 @@ count_rr_conflicts (int state) } } -/*------------------------------------. -| Give a report about the conflicts. | -`------------------------------------*/ +/*----------------------------------------------------------. +| Output to OUT a human readable report on shift/reduce and | +| reduce/reduce conflict numbers (SRC_NUM, RRC_NUM). | +`----------------------------------------------------------*/ static void -total_conflicts (void) +conflict_report (FILE *out, int src_num, int rrc_num) { - if (src_total == expected_conflicts && rrc_total == 0) - return; + if (src_num == 1) + fprintf (out, _(" 1 shift/reduce conflict")); + else if (src_num > 1) + fprintf (out, _(" %d shift/reduce conflicts"), src_num); - if (fixed_outfiles) - { - /* If invoked under the name `yacc', use the output format - specified by POSIX. */ - fprintf (stderr, _("conflicts: ")); - if (src_total > 0) - fprintf (stderr, _(" %d shift/reduce"), src_total); - if (src_total > 0 && rrc_total > 0) - fprintf (stderr, ","); - if (rrc_total > 0) - fprintf (stderr, _(" %d reduce/reduce"), rrc_total); - putc ('\n', stderr); - } - else - { - fprintf (stderr, _("%s contains"), infile); + if (src_num > 0 && rrc_num > 0) + fprintf (out, _(" and")); - if (src_total == 1) - fprintf (stderr, _(" 1 shift/reduce conflict")); - else if (src_total > 1) - fprintf (stderr, _(" %d shift/reduce conflicts"), src_total); + if (rrc_num == 1) + fprintf (out, _(" 1 reduce/reduce conflict")); + else if (rrc_num > 1) + fprintf (out, _(" %d reduce/reduce conflicts"), rrc_num); - if (src_total > 0 && rrc_total > 0) - fprintf (stderr, _(" and")); - - if (rrc_total == 1) - fprintf (stderr, _(" 1 reduce/reduce conflict")); - else if (rrc_total > 1) - fprintf (stderr, _(" %d reduce/reduce conflicts"), rrc_total); - - putc ('.', stderr); - putc ('\n', stderr); - } + putc ('.', out); + putc ('\n', out); } @@ -473,13 +439,15 @@ total_conflicts (void) `---------------------------------------------*/ void -conflict_log (void) +print_conflicts (void) { int i; src_total = 0; rrc_total = 0; + /* Count the total number of conflicts, and if wanted, give a + detailed report in FOUTPUT. */ for (i = 0; i < nstates; i++) { if (conflicts[i]) @@ -488,58 +456,37 @@ conflict_log (void) count_rr_conflicts (i); src_total += src_count; rrc_total += rrc_count; + + if (verboseflag) + { + fprintf (foutput, _("State %d contains"), i); + conflict_report (foutput, src_count, rrc_count); + } } } - total_conflicts (); -} - - -void -verbose_conflict_log (void) -{ - int i; - - src_total = 0; - rrc_total = 0; - - for (i = 0; i < nstates; i++) + /* Report the total number of conflicts on STDERR. */ + if (fixed_outfiles) { - if (conflicts[i]) - { - count_sr_conflicts (i); - count_rr_conflicts (i); - src_total += src_count; - rrc_total += rrc_count; - - fprintf (foutput, _("State %d contains"), i); - - if (src_count == 1) - fprintf (foutput, _(" 1 shift/reduce conflict")); - else if (src_count > 1) - fprintf (foutput, _(" %d shift/reduce conflicts"), src_count); - - if (src_count > 0 && rrc_count > 0) - fprintf (foutput, _(" and")); - - if (rrc_count == 1) - fprintf (foutput, _(" 1 reduce/reduce conflict")); - else if (rrc_count > 1) - fprintf (foutput, _(" %d reduce/reduce conflicts"), rrc_count); - - putc ('.', foutput); - putc ('\n', foutput); - } + /* If invoked with `--yacc', use the output format specified by + POSIX. */ + fprintf (stderr, _("conflicts: ")); + if (src_total > 0) + fprintf (stderr, _(" %d shift/reduce"), src_total); + if (src_total > 0 && rrc_total > 0) + fprintf (stderr, ","); + if (rrc_total > 0) + fprintf (stderr, _(" %d reduce/reduce"), rrc_total); + putc ('\n', stderr); + } + else + { + fprintf (stderr, _("%s contains"), infile); + conflict_report (stderr, src_total, rrc_total); } - - total_conflicts (); } - - - - void print_reductions (int state) { diff --git a/src/conflicts.h b/src/conflicts.h new file mode 100644 index 00000000..43c8a2c6 --- /dev/null +++ b/src/conflicts.h @@ -0,0 +1,33 @@ +/* Find and resolve or report look-ahead conflicts for bison, + Copyright (C) 2000 Free Software Foundation, Inc. + + This file is part of Bison, the GNU Compiler Compiler. + + Bison is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + Bison is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Bison; see the file COPYING. If not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#ifndef CONFLICTS_H_ +# define CONFLICTS_H_ + +void initialize_conflicts PARAMS ((void)); +void print_conflicts PARAMS ((void)); +void print_reductions PARAMS ((int)); +void finalize_conflicts PARAMS ((void)); + +/* Were there conflicts? */ +extern int any_conflicts; +extern errs **err_table; +extern int expected_conflicts; +#endif /* !CONFLICTS_H_ */ diff --git a/src/output.c b/src/output.c index 20b33618..54955b62 100644 --- a/src/output.c +++ b/src/output.c @@ -100,13 +100,13 @@ #include "output.h" #include "lalr.h" #include "reader.h" +#include "conflicts.h" extern void berror PARAMS((const char *)); extern char **tags; extern short *user_toknums; extern int final_state; -extern errs **err_table; static int nvectors; diff --git a/src/print.c b/src/print.c index 8e10e4cf..061a0fee 100644 --- a/src/print.c +++ b/src/print.c @@ -25,18 +25,12 @@ #include "gram.h" #include "state.h" #include "lalr.h" +#include "conflicts.h" extern char **tags; extern int nstates; -extern errs **err_table; -extern char any_conflicts; -extern char *conflicts; extern int final_state; -extern void conflict_log PARAMS ((void)); -extern void verbose_conflict_log PARAMS ((void)); -extern void print_reductions PARAMS ((int)); - extern void terse PARAMS ((void)); extern void verbose PARAMS ((void)); @@ -53,7 +47,7 @@ void terse (void) { if (any_conflicts) - conflict_log (); + print_conflicts (); } @@ -63,7 +57,7 @@ verbose (void) int i; if (any_conflicts) - verbose_conflict_log (); + print_conflicts (); print_grammar ();