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
These features are experimental. More user feedback will help to
stabilize them.
-** %define can now be invoked via the command line.
+** %define improvements.
- Each of these bison command-line options
+*** Multiple invocations for any variable is now an error not a warning.
- -D NAME=VALUE
- --define=NAME=VALUE
+*** Can now be invoked via the command line.
+
+ Each of these command-line options
+
+ -D NAME[=VALUE]
+ --define=NAME[=VALUE]
+
+ -F NAME[=VALUE]
+ --force-define=NAME[=VALUE]
is equivalent to this grammar file declaration
- %define NAME "VALUE"
+ %define NAME ["VALUE"]
- for any NAME and VALUE. Omitting `=VALUE' on the command line is
- equivalent to omitting `"VALUE"' in the declaration.
+ except that the manner in which Bison processes multiple definitions
+ for the same NAME differs. Most importantly, -F and --force-define
+ quietly override %define, but -D and --define do not. For further
+ details, see the section "Bison Options" in the Bison manual.
-** %define variables renamed.
+*** Variables renamed.
The following %define variables
The old names are now deprecated but will be maintained indefinitely
for backward compatibility.
+*** Values no longer need to be quoted in grammar file.
+
+ If a %define value is an identifier, it no longer needs to be placed
+ within quotations marks. For example,
+
+ %define api.push-pull "push"
+
+ can be rewritten as
+
+ %define api.push-pull push
+
+** Symbol names.
+
+ Consistently with directives (such as %error-verbose) and variables
+ (e.g. push-pull), symbol names may include dashes in any position,
+ similarly to periods and underscores. This is GNU extension over
+ POSIX Yacc whose use is reported by -Wyacc, and rejected in Yacc
+ mode (--yacc).
+
** Temporary hack for adding a semicolon to the user action.
Previously, Bison appended a semicolon to every user action for
about a missing semicolon where it did not before. Future releases of
Bison will cease to append semicolons entirely.
+** Character literals not of length one.
+
+ Previously, Bison quietly converted all character literals to length
+ one. For example, without warning, Bison interpreted the operators in
+ the following grammar to be the same token:
+
+ exp: exp '++'
+ | exp '+' exp
+ ;
+
+ Bison now warns when a character literal is not of length one. In
+ some future release, Bison will report an error instead.
+
+** Verbose error messages fixed for nonassociative tokens.
+
+ When %error-verbose is specified, syntax error messages produced by
+ the generated parser include the unexpected token as well as a list of
+ expected tokens. Previously, this list erroneously included tokens
+ that would actually induce a syntax error because conflicts for them
+ were resolved with %nonassoc. Such tokens are now properly omitted
+ from the list.
+
* Changes in version 2.4.2 (????-??-??):
+** Detection of GNU M4 1.4.6 or newer during configure is improved.
+
** %code is now a permanent feature.
A traditional Yacc prologue directive is written in the form: