Also, it is possible to add code to the parser's constructors using
"%code init" and "%define init_throws".
+** Variable api.tokens.prefix
+
+ The variable api.tokens.prefix changes the way tokens are identified in
+ the generated files. This is especially useful to avoid collisions
+ with identifiers in the target language. For instance
+
+ %token FILE for ERROR
+ %define api.tokens.prefix "TOK_"
+ %%
+ start: FILE for ERROR;
+
+ will generate the definition of the symbols TOK_FILE, TOK_for, and
+ TOK_ERROR in the generated sources. In particular, the scanner must
+ use these prefixed token names, although the grammar itself still
+ uses the short names (as in the sample rule given above).
+
+** Variable api.namespace
+
+ The "namespace" variable is renamed "api.namespace". Backward
+ compatibility is ensured, but upgrading is recommended.
+
+** Variable parse.error
+
+ The variable error controls the verbosity of error messages. The
+ use of the %error-verbose directive is deprecated in favor of
+ %define parse.error "verbose".
+
* Changes in version 2.5 (????-??-??):
** IELR(1) and Canonical LR(1) Support
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.
+
+*** Multiple invocations for any variable is now an error not a warning.
- Each of these bison command-line options
+*** Can now be invoked via the command line.
- -D NAME=VALUE
- --define=NAME=VALUE
+ 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.
-** Symbols names
+*** 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,
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: