mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
* 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.
This commit is contained in:
10
ChangeLog
10
ChangeLog
@@ -1,3 +1,13 @@
|
||||
2000-10-02 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* 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 <akim@epita.fr>
|
||||
|
||||
* src/nullable.h: New file.
|
||||
|
||||
@@ -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 \
|
||||
|
||||
171
src/conflicts.c
171
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,20 +408,68 @@ 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 (src_num > 0 && rrc_num > 0)
|
||||
fprintf (out, _(" and"));
|
||||
|
||||
if (rrc_num == 1)
|
||||
fprintf (out, _(" 1 reduce/reduce conflict"));
|
||||
else if (rrc_num > 1)
|
||||
fprintf (out, _(" %d reduce/reduce conflicts"), rrc_num);
|
||||
|
||||
putc ('.', out);
|
||||
putc ('\n', out);
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------.
|
||||
| Compute and give a report on the conflicts. |
|
||||
`---------------------------------------------*/
|
||||
|
||||
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])
|
||||
{
|
||||
count_sr_conflicts (i);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Report the total number of conflicts on STDERR. */
|
||||
if (fixed_outfiles)
|
||||
{
|
||||
/* If invoked under the name `yacc', use the output format
|
||||
specified by POSIX. */
|
||||
/* 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);
|
||||
@@ -448,98 +482,11 @@ total_conflicts (void)
|
||||
else
|
||||
{
|
||||
fprintf (stderr, _("%s contains"), infile);
|
||||
|
||||
if (src_total == 1)
|
||||
fprintf (stderr, _(" 1 shift/reduce conflict"));
|
||||
else if (src_total > 1)
|
||||
fprintf (stderr, _(" %d shift/reduce conflicts"), src_total);
|
||||
|
||||
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);
|
||||
conflict_report (stderr, src_total, rrc_total);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------.
|
||||
| Compute and give a report on the conflicts. |
|
||||
`---------------------------------------------*/
|
||||
|
||||
void
|
||||
conflict_log (void)
|
||||
{
|
||||
int i;
|
||||
|
||||
src_total = 0;
|
||||
rrc_total = 0;
|
||||
|
||||
for (i = 0; i < nstates; i++)
|
||||
{
|
||||
if (conflicts[i])
|
||||
{
|
||||
count_sr_conflicts (i);
|
||||
count_rr_conflicts (i);
|
||||
src_total += src_count;
|
||||
rrc_total += rrc_count;
|
||||
}
|
||||
}
|
||||
|
||||
total_conflicts ();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
verbose_conflict_log (void)
|
||||
{
|
||||
int i;
|
||||
|
||||
src_total = 0;
|
||||
rrc_total = 0;
|
||||
|
||||
for (i = 0; i < nstates; i++)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
total_conflicts ();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void
|
||||
print_reductions (int state)
|
||||
{
|
||||
|
||||
33
src/conflicts.h
Normal file
33
src/conflicts.h
Normal file
@@ -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_ */
|
||||
@@ -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;
|
||||
|
||||
12
src/print.c
12
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 ();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user