+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.
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
@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
@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.
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
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
facilitate the development of a grammar.
@end itemize
-@item Default Value: @code{"LALR"}
+@item Default Value: @code{"lalr"}
@end itemize
@item namespace
/* 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);
* - \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);
-/* 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
#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"
-/* 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
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");
/* 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
};
[[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])
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, $@))
])