mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 01:03: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>
|
2000-10-02 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* src/nullable.h: New file.
|
* 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
|
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 \
|
derives.h \
|
||||||
files.h getargs.h gram.h lalr.h lex.h nullable.h \
|
files.h getargs.h gram.h lalr.h lex.h nullable.h \
|
||||||
output.h state.h \
|
output.h state.h \
|
||||||
|
|||||||
171
src/conflicts.c
171
src/conflicts.c
@@ -25,22 +25,16 @@
|
|||||||
#include "gram.h"
|
#include "gram.h"
|
||||||
#include "state.h"
|
#include "state.h"
|
||||||
#include "lalr.h"
|
#include "lalr.h"
|
||||||
|
#include "conflicts.h"
|
||||||
|
|
||||||
extern char **tags;
|
extern char **tags;
|
||||||
extern int fixed_outfiles;
|
extern int fixed_outfiles;
|
||||||
|
|
||||||
extern void initialize_conflicts PARAMS ((void));
|
int any_conflicts = 0;
|
||||||
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;
|
|
||||||
errs **err_table;
|
errs **err_table;
|
||||||
int expected_conflicts;
|
int expected_conflicts;
|
||||||
static char *conflicts;
|
static char *conflicts;
|
||||||
|
|
||||||
|
|
||||||
static unsigned *shiftset;
|
static unsigned *shiftset;
|
||||||
static unsigned *lookaheadset;
|
static unsigned *lookaheadset;
|
||||||
static int src_total;
|
static int src_total;
|
||||||
@@ -275,7 +269,6 @@ void
|
|||||||
initialize_conflicts (void)
|
initialize_conflicts (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
/* errs *sp; JF unused */
|
|
||||||
|
|
||||||
conflicts = NEW2 (nstates, char);
|
conflicts = NEW2 (nstates, char);
|
||||||
shiftset = NEW2 (tokensetsize, unsigned);
|
shiftset = NEW2 (tokensetsize, unsigned);
|
||||||
@@ -290,13 +283,6 @@ initialize_conflicts (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------.
|
/*---------------------------------------------.
|
||||||
| Count the number of shift/reduce conflicts. |
|
| 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
|
static void
|
||||||
total_conflicts (void)
|
conflict_report (FILE *out, int src_num, int rrc_num)
|
||||||
{
|
{
|
||||||
if (src_total == expected_conflicts && rrc_total == 0)
|
if (src_num == 1)
|
||||||
return;
|
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 (fixed_outfiles)
|
||||||
{
|
{
|
||||||
/* If invoked under the name `yacc', use the output format
|
/* If invoked with `--yacc', use the output format specified by
|
||||||
specified by POSIX. */
|
POSIX. */
|
||||||
fprintf (stderr, _("conflicts: "));
|
fprintf (stderr, _("conflicts: "));
|
||||||
if (src_total > 0)
|
if (src_total > 0)
|
||||||
fprintf (stderr, _(" %d shift/reduce"), src_total);
|
fprintf (stderr, _(" %d shift/reduce"), src_total);
|
||||||
@@ -448,98 +482,11 @@ total_conflicts (void)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf (stderr, _("%s contains"), infile);
|
fprintf (stderr, _("%s contains"), infile);
|
||||||
|
conflict_report (stderr, src_total, rrc_total);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------.
|
|
||||||
| 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
|
void
|
||||||
print_reductions (int state)
|
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 "output.h"
|
||||||
#include "lalr.h"
|
#include "lalr.h"
|
||||||
#include "reader.h"
|
#include "reader.h"
|
||||||
|
#include "conflicts.h"
|
||||||
|
|
||||||
extern void berror PARAMS((const char *));
|
extern void berror PARAMS((const char *));
|
||||||
|
|
||||||
extern char **tags;
|
extern char **tags;
|
||||||
extern short *user_toknums;
|
extern short *user_toknums;
|
||||||
extern int final_state;
|
extern int final_state;
|
||||||
extern errs **err_table;
|
|
||||||
|
|
||||||
|
|
||||||
static int nvectors;
|
static int nvectors;
|
||||||
|
|||||||
12
src/print.c
12
src/print.c
@@ -25,18 +25,12 @@
|
|||||||
#include "gram.h"
|
#include "gram.h"
|
||||||
#include "state.h"
|
#include "state.h"
|
||||||
#include "lalr.h"
|
#include "lalr.h"
|
||||||
|
#include "conflicts.h"
|
||||||
|
|
||||||
extern char **tags;
|
extern char **tags;
|
||||||
extern int nstates;
|
extern int nstates;
|
||||||
extern errs **err_table;
|
|
||||||
extern char any_conflicts;
|
|
||||||
extern char *conflicts;
|
|
||||||
extern int final_state;
|
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 terse PARAMS ((void));
|
||||||
extern void verbose PARAMS ((void));
|
extern void verbose PARAMS ((void));
|
||||||
|
|
||||||
@@ -53,7 +47,7 @@ void
|
|||||||
terse (void)
|
terse (void)
|
||||||
{
|
{
|
||||||
if (any_conflicts)
|
if (any_conflicts)
|
||||||
conflict_log ();
|
print_conflicts ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -63,7 +57,7 @@ verbose (void)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (any_conflicts)
|
if (any_conflicts)
|
||||||
verbose_conflict_log ();
|
print_conflicts ();
|
||||||
|
|
||||||
print_grammar ();
|
print_grammar ();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user