mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
* src/conflicts.c (conflicts_print): Don't print file name twice
when %expect fails because there were no conflicts. * doc/bison.texinfo (Expect Decl): Tighten up wording in previous change. * tests/conflicts.at (%expect not enough, %expect too much): (%expect with reduce conflicts): Adjust to new behavior. * src/conflicts.c (conflicts_print): Unsatisfied %expectation are errors. * NEWS: Document this. * doc/bison.texinfo (Expect Decl): Likewise.
This commit is contained in:
16
ChangeLog
16
ChangeLog
@@ -1,3 +1,19 @@
|
||||
2005-11-18 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* src/conflicts.c (conflicts_print): Don't print file name twice
|
||||
when %expect fails because there were no conflicts.
|
||||
* doc/bison.texinfo (Expect Decl): Tighten up wording in previous
|
||||
change.
|
||||
* tests/conflicts.at (%expect not enough, %expect too much):
|
||||
(%expect with reduce conflicts): Adjust to new behavior.
|
||||
|
||||
2005-11-18 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* src/conflicts.c (conflicts_print): Unsatisfied %expectation are
|
||||
errors.
|
||||
* NEWS: Document this.
|
||||
* doc/bison.texinfo (Expect Decl): Likewise.
|
||||
|
||||
2005-11-16 Akim Demaille <akim@epita.fr>
|
||||
|
||||
Generalize the display of semantic values and locations in traces.
|
||||
|
||||
4
NEWS
4
NEWS
@@ -3,6 +3,10 @@ Bison News
|
||||
|
||||
Changes in version 2.1a:
|
||||
|
||||
* %expect, %expect-rr
|
||||
Incorrect numbers of expected conflicts are now actual errors,
|
||||
instead of warnings.
|
||||
|
||||
* GLR, YACC parsers.
|
||||
The %parse-params are available in the %destructor's (and the
|
||||
experimental %printer's) as per the documentation.
|
||||
|
||||
@@ -3913,19 +3913,18 @@ The declaration looks like this:
|
||||
%expect @var{n}
|
||||
@end example
|
||||
|
||||
Here @var{n} is a decimal integer. The declaration says there should be
|
||||
no warning if there are @var{n} shift/reduce conflicts and no
|
||||
reduce/reduce conflicts. The usual warning is
|
||||
given if there are either more or fewer conflicts, or if there are any
|
||||
reduce/reduce conflicts.
|
||||
Here @var{n} is a decimal integer. The declaration says there should
|
||||
be @var{n} shift/reduce conflicts and no reduce/reduce conflicts.
|
||||
Bison reports an error if the number of shift/reduce conflicts differs
|
||||
from @var{n}, or if there are any reduce/reduce conflicts.
|
||||
|
||||
For normal @acronym{LALR}(1) parsers, reduce/reduce conflicts are more serious,
|
||||
and should be eliminated entirely. Bison will always report
|
||||
reduce/reduce conflicts for these parsers. With @acronym{GLR} parsers, however,
|
||||
both shift/reduce and reduce/reduce are routine (otherwise, there
|
||||
would be no need to use @acronym{GLR} parsing). Therefore, it is also possible
|
||||
to specify an expected number of reduce/reduce conflicts in @acronym{GLR}
|
||||
parsers, using the declaration:
|
||||
For normal @acronym{LALR}(1) parsers, reduce/reduce conflicts are more
|
||||
serious, and should be eliminated entirely. Bison will always report
|
||||
reduce/reduce conflicts for these parsers. With @acronym{GLR}
|
||||
parsers, however, both kinds of conflicts are routine; otherwise,
|
||||
there would be no need to use @acronym{GLR} parsing. Therefore, it is
|
||||
also possible to specify an expected number of reduce/reduce conflicts
|
||||
in @acronym{GLR} parsers, using the declaration:
|
||||
|
||||
@example
|
||||
%expect-rr @var{n}
|
||||
@@ -3946,12 +3945,12 @@ go back to the beginning.
|
||||
|
||||
@item
|
||||
Add an @code{%expect} declaration, copying the number @var{n} from the
|
||||
number which Bison printed.
|
||||
number which Bison printed. With @acronym{GLR} parsers, add an
|
||||
@code{%expect-rr} declaration as well.
|
||||
@end itemize
|
||||
|
||||
Now Bison will stop annoying you if you do not change the number of
|
||||
conflicts, but it will warn you again if changes in the grammar result
|
||||
in more or fewer conflicts.
|
||||
Now Bison will warn you if you introduce an unexpected conflict, but
|
||||
will keep silent otherwise.
|
||||
|
||||
@node Start Decl
|
||||
@subsection The Start-Symbol
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Find and resolve or report look-ahead conflicts for bison,
|
||||
|
||||
Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2003, 2004
|
||||
Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of Bison, the GNU Compiler Compiler.
|
||||
@@ -464,11 +464,13 @@ conflicts_print (void)
|
||||
/* Is the number of SR conflicts OK? Either EXPECTED_CONFLICTS is
|
||||
not set, and then we want 0 SR, or else it is specified, in which
|
||||
case we want equality. */
|
||||
bool src_ok = false;
|
||||
bool rrc_ok = false;
|
||||
bool src_ok;
|
||||
bool rrc_ok;
|
||||
|
||||
int src_total = 0;
|
||||
int rrc_total = 0;
|
||||
int src_expected;
|
||||
int rrc_expected;
|
||||
|
||||
/* Conflicts by state. */
|
||||
{
|
||||
@@ -488,33 +490,36 @@ conflicts_print (void)
|
||||
expected_rr_conflicts = -1;
|
||||
}
|
||||
|
||||
src_ok =
|
||||
src_total == (expected_sr_conflicts == -1 ? 0 : expected_sr_conflicts);
|
||||
rrc_ok =
|
||||
rrc_total == (expected_rr_conflicts == -1 ? 0 : expected_rr_conflicts);
|
||||
src_expected = expected_sr_conflicts == -1 ? 0 : expected_sr_conflicts;
|
||||
rrc_expected = expected_rr_conflicts == -1 ? 0 : expected_rr_conflicts;
|
||||
src_ok = src_total == src_expected;
|
||||
rrc_ok = rrc_total == rrc_expected;
|
||||
|
||||
/* If there are as many RR conflicts and SR conflicts as
|
||||
expected, then there is nothing to report. */
|
||||
if (rrc_ok && src_ok)
|
||||
if (rrc_ok & src_ok)
|
||||
return;
|
||||
|
||||
/* Report the total number of conflicts on STDERR. */
|
||||
if (! yacc_flag)
|
||||
fprintf (stderr, "%s: ", current_file);
|
||||
conflict_report (stderr, src_total, rrc_total);
|
||||
if (src_total | rrc_total)
|
||||
{
|
||||
if (! yacc_flag)
|
||||
fprintf (stderr, "%s: ", current_file);
|
||||
conflict_report (stderr, src_total, rrc_total);
|
||||
}
|
||||
|
||||
if (expected_sr_conflicts != -1 || expected_rr_conflicts != -1)
|
||||
{
|
||||
int sr = expected_sr_conflicts == -1 ? 0 : expected_sr_conflicts;
|
||||
int rr = expected_rr_conflicts == -1 ? 0 : expected_rr_conflicts;
|
||||
if (! src_ok)
|
||||
warn (ngettext ("expected %d shift/reduce conflict",
|
||||
"expected %d shift/reduce conflicts",
|
||||
sr), sr);
|
||||
complain (ngettext ("expected %d shift/reduce conflict",
|
||||
"expected %d shift/reduce conflicts",
|
||||
src_expected),
|
||||
src_expected);
|
||||
if (! rrc_ok)
|
||||
warn (ngettext ("expected %d reduce/reduce conflict",
|
||||
"expected %d reduce/reduce conflicts",
|
||||
rr), rr);
|
||||
complain (ngettext ("expected %d reduce/reduce conflict",
|
||||
"expected %d reduce/reduce conflicts",
|
||||
rrc_expected),
|
||||
rrc_expected);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -482,9 +482,9 @@ AT_DATA([input.y],
|
||||
exp: exp OP exp | NUM;
|
||||
]])
|
||||
|
||||
AT_CHECK([bison -o input.c input.y], 0, [],
|
||||
AT_CHECK([bison -o input.c input.y], 1, [],
|
||||
[input.y: conflicts: 1 shift/reduce
|
||||
input.y: warning: expected 0 shift/reduce conflicts
|
||||
input.y: expected 0 shift/reduce conflicts
|
||||
])
|
||||
AT_CLEANUP
|
||||
|
||||
@@ -519,9 +519,9 @@ AT_DATA([input.y],
|
||||
exp: exp OP exp | NUM;
|
||||
]])
|
||||
|
||||
AT_CHECK([bison -o input.c input.y], 0, [],
|
||||
AT_CHECK([bison -o input.c input.y], 1, [],
|
||||
[input.y: conflicts: 1 shift/reduce
|
||||
input.y: warning: expected 2 shift/reduce conflicts
|
||||
input.y: expected 2 shift/reduce conflicts
|
||||
])
|
||||
AT_CLEANUP
|
||||
|
||||
@@ -539,9 +539,9 @@ program: a 'a' | a a;
|
||||
a: 'a';
|
||||
]])
|
||||
|
||||
AT_CHECK([bison -o input.c input.y], 0, [],
|
||||
AT_CHECK([bison -o input.c input.y], 1, [],
|
||||
[input.y: conflicts: 1 reduce/reduce
|
||||
input.y: warning: expected 0 reduce/reduce conflicts
|
||||
input.y: expected 0 reduce/reduce conflicts
|
||||
])
|
||||
AT_CLEANUP
|
||||
|
||||
|
||||
Reference in New Issue
Block a user