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
%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
- for `%define lr.type' and `%define lr.default_reductions' in the
+ adjusted using `%define lr.default-reductions'. See the documentation
+ for `%define lr.type' and `%define lr.default-reductions' in the
section `Bison Declaration Summary' in the Bison manual for the
details.
These features are experimental. More user feedback will help to
stabilize them.
+** Multiple %define's for any variable is now an error not a warning.
+
** %define can now be invoked via the command line.
- Each of these bison command-line options
+ Each of these command-line options
+
+ -D NAME[=VALUE]
+ --define=NAME[=VALUE]
- -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"]
+
+ 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.
- for any NAME and VALUE. Omitting `=VALUE' on the command line is
- equivalent to omitting `"VALUE"' in the declaration.
+ The following %define variables
+
+ api.push_pull
+ lr.keep_unreachable_states
+
+ have been renamed to
+
+ api.push-pull
+ lr.keep-unreachable-states
+
+ The old names are now deprecated but will be maintained indefinitely
+ for backward compatibility.
+
+** Symbols 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.
* Changes in version 2.4.2 (????-??-??):
+** %code is now a permanent feature.
+
+ A traditional Yacc prologue directive is written in the form:
+
+ %{CODE%}
+
+ To provide a more flexible alternative, Bison 2.3b introduced the
+ %code directive with the following forms for C/C++:
+
+ %code {CODE}
+ %code requires {CODE}
+ %code provides {CODE}
+ %code top {CODE}
+
+ These forms are now considered permanent features of Bison. See the
+ %code entries in the section "Bison Declaration Summary" in the Bison
+ manual for a summary of their functionality. See the section
+ "Prologue Alternatives" for a detailed discussion including the
+ advantages of %code over the traditional Yacc prologue directive.
+
+ Bison's Java feature as a whole including its current usage of %code
+ is still considered experimental.
+
* Changes in version 2.4.1 (2008-12-11):
** In the GLR defines file, unexpanded M4 macros in the yylval and yylloc