%define lr.type: make values lowercase IDs.

That is, "LALR" => "lalr", "IELR" => "ielr", and
"canonical LR" => "canonical-lr".
* NEWS (2.5): Update documentation.
* doc/bison.texinfo (Decl Summary): Likewise.
* src/ielr.c (ielr): Use new values.
* src/ielr.h (ielr): Update documentation.
* src/reader.c (prepare_percent_define_front_end_variables): Use
and validate new values.
* tests/existing.at (AT_TEST_EXISTING_GRAMMAR): Update test
grammars.
* tests/reduce.at (AT_TEST_LR_TYPE): Likewise.
(cherry picked from commit 6ba9640406)
This commit is contained in:
Joel E. Denny
2009-08-28 00:57:06 -04:00
parent 4bb975e1ad
commit 3a414bbfa0
10 changed files with 44 additions and 29 deletions

View File

@@ -1,3 +1,18 @@
2009-08-28 Joel E. Denny <jdenny@clemson.edu>
%define lr.type: make values lowercase IDs.
That is, "LALR" => "lalr", "IELR" => "ielr", and
"canonical LR" => "canonical-lr".
* NEWS (2.5): Update documentation.
* doc/bison.texinfo (Decl Summary): Likewise.
* src/ielr.c (ielr): Use new values.
* src/ielr.h (ielr): Update documentation.
* src/reader.c (prepare_percent_define_front_end_variables): Use
and validate new values.
* tests/existing.at (AT_TEST_EXISTING_GRAMMAR): Update test
grammars.
* tests/reduce.at (AT_TEST_LR_TYPE): Likewise.
2009-08-27 Eric Blake <ebb9@byu.net>
scan-gram: avoid portability trap with ctype usage.

6
NEWS
View File

@@ -20,9 +20,9 @@ Bison News
default. You can specify the type of parser tables in the grammar
file with these directives:
%define lr.type "LALR"
%define lr.type "IELR"
%define lr.type "canonical LR"
%define lr.type "lalr"
%define lr.type "ielr"
%define lr.type "canonical-lr"
The default reduction optimization in the parser tables can also be
adjusted using `%define lr.default-reductions'. See the documentation

View File

@@ -4956,7 +4956,7 @@ without performing any extra reductions.
@item Default Value:
@itemize
@item @code{"accepting"} if @code{lr.type} is @code{"canonical LR"}.
@item @code{"accepting"} if @code{lr.type} is @code{"canonical-lr"}.
@item @code{"all"} otherwise.
@end itemize
@end itemize
@@ -5020,7 +5020,7 @@ More user feedback will help to stabilize it.)
@item Accepted Values:
@itemize
@item @code{"LALR"}.
@item @code{"lalr"}.
While Bison generates @acronym{LALR} parser tables by default for
historical reasons, @acronym{IELR} or canonical @acronym{LR} is almost
always preferable for deterministic parsers.
@@ -5049,7 +5049,7 @@ investigate such problems while ignoring the more subtle differences
from @acronym{IELR} and canonical @acronym{LR}.
@end itemize
@item @code{"IELR"}.
@item @code{"ielr"}.
@acronym{IELR} is a minimal @acronym{LR} algorithm.
That is, given any grammar (@acronym{LR} or non-@acronym{LR}),
@acronym{IELR} and canonical @acronym{LR} always accept exactly the same
@@ -5063,7 +5063,7 @@ grammars, the number of conflicts for @acronym{IELR} is often an order
of magnitude less as well.
This can significantly reduce the complexity of developing of a grammar.
@item @code{"canonical LR"}.
@item @code{"canonical-lr"}.
@cindex delayed syntax errors
@cindex syntax errors delayed
The only advantage of canonical @acronym{LR} over @acronym{IELR} is
@@ -5079,7 +5079,7 @@ Even when canonical @acronym{LR} behavior is ultimately desired,
facilitate the development of a grammar.
@end itemize
@item Default Value: @code{"LALR"}
@item Default Value: @code{"lalr"}
@end itemize
@item namespace

View File

@@ -1095,11 +1095,11 @@ ielr (void)
/* Examine user options. */
{
char *type = muscle_percent_define_get ("lr.type");
if (0 == strcmp (type, "LALR"))
if (0 == strcmp (type, "lalr"))
lr_type = LR_TYPE__LALR;
else if (0 == strcmp (type, "IELR"))
else if (0 == strcmp (type, "ielr"))
lr_type = LR_TYPE__IELR;
else if (0 == strcmp (type, "canonical LR"))
else if (0 == strcmp (type, "canonical-lr"))
lr_type = LR_TYPE__CANONICAL_LR;
else
aver (false);

View File

@@ -33,9 +33,9 @@
* - \c ::states is of size \c ::nstates (which might be greater than
* <tt>::nstates \@pre</tt>) and defines the type of parser specified by
* the value of the \c \%define variable \c lr.type. Its value can be:
* - \c "LALR".
* - \c "IELR".
* - \c "canonical LR".
* - \c "lalr".
* - \c "ielr".
* - \c "canonical-lr".
*/
void ielr (void);

View File

@@ -1,4 +1,4 @@
/* A Bison parser, made by GNU Bison 2.4.1.124-faff. */
/* A Bison parser, made by GNU Bison 2.4.1.128-4bb9. */
/* Skeleton implementation for Bison's Yacc-like parsers in C
@@ -45,7 +45,7 @@
#define YYBISON 1
/* Bison version. */
#define YYBISON_VERSION "2.4.1.124-faff"
#define YYBISON_VERSION "2.4.1.128-4bb9"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"

View File

@@ -1,4 +1,4 @@
/* A Bison parser, made by GNU Bison 2.4.1.124-faff. */
/* A Bison parser, made by GNU Bison 2.4.1.128-4bb9. */
/* Skeleton interface for Bison's Yacc-like parsers in C

View File

@@ -608,9 +608,9 @@ prepare_percent_define_front_end_variables (void)
char *lr_type;
/* IELR would be a better default, but LALR is historically the
default. */
muscle_percent_define_default ("lr.type", "LALR");
muscle_percent_define_default ("lr.type", "lalr");
lr_type = muscle_percent_define_get ("lr.type");
if (0 != strcmp (lr_type, "canonical LR"))
if (0 != strcmp (lr_type, "canonical-lr"))
muscle_percent_define_default ("lr.default-reductions", "all");
else
muscle_percent_define_default ("lr.default-reductions", "accepting");
@@ -620,7 +620,7 @@ prepare_percent_define_front_end_variables (void)
/* Check %define front-end variables. */
{
static char const * const values[] = {
"lr.type", "LALR", "IELR", "canonical LR", NULL,
"lr.type", "lalr", "ielr", "canonical-lr", NULL,
"lr.default-reductions", "all", "consistent", "accepting", NULL,
NULL
};

View File

@@ -42,18 +42,18 @@ AT_CHECK([[diff -u input-lalr.output input.output \
[[0]], [$1])])
AT_TEST_TABLES_AND_PARSE([$2[: LALR(1)]], [[LALR]], [[last-state]],
[[%define lr.type "LALR"
[[%define lr.type "lalr"
]$3],
[$4], [$5], [$6], [$7],
[AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12])
AT_TEST_TABLES_AND_PARSE([$2[: IELR(1)]], [[IELR]], [[last-state]],
[[%define lr.type "IELR"
[[%define lr.type "ielr"
]$3],
[$4], [$5], [$6], [$7],
[AT_LALR1_DIFF_CHECK([$8])$9], [$10], [$11], [$12])
AT_TEST_TABLES_AND_PARSE([$2[: Canonical LR(1)]], [[canonical LR]],
[[last-state,no-xml]],
[[%define lr.type "canonical LR"
[[%define lr.type "canonical-lr"
]$3],
[$4], [$5], [$6], [$7],
[$9], [$10], [$11], [$12])

View File

@@ -375,19 +375,19 @@ m4_define([AT_TEST_LR_TYPE],
AT_TEST_TABLES_AND_PARSE([[no %define lr.type: ]$1],
[[LALR]], [[]],
[$2], m4_shiftn(2, $@))
AT_TEST_TABLES_AND_PARSE([[%define lr.type "LALR": ]$1],
AT_TEST_TABLES_AND_PARSE([[%define lr.type "lalr": ]$1],
[[LALR]], [[]],
[[%define lr.type "LALR"
[[%define lr.type "lalr"
]$2],
m4_shiftn(2, $@))
AT_TEST_TABLES_AND_PARSE([[%define lr.type "IELR": ]$1],
AT_TEST_TABLES_AND_PARSE([[%define lr.type "ielr": ]$1],
[[IELR]], [[]],
[[%define lr.type "IELR"
[[%define lr.type "ielr"
]$2],
m4_shiftn(2, $@))
AT_TEST_TABLES_AND_PARSE([[%define lr.type "canonical LR": ]$1],
AT_TEST_TABLES_AND_PARSE([[%define lr.type "canonical-lr": ]$1],
[[canonical LR]], [[]],
[[%define lr.type "canonical LR"
[[%define lr.type "canonical-lr"
]$2],
m4_shiftn(2, $@))
])