*** Obsolete features
- Support for YYFAIL is removed, as announced since Bison 2.4.2.
+ Support for YYFAIL is removed (deprecated in Bison 2.4.2).
Support for yystype and yyltype (instead of YYSTYPE and YYLTYPE)
- is removed, as announced in Bison 1.875.
+ is removed (deprecated in Bison 1.875).
+ Support for YYPARSE_PARAM is removed (deprecated in Bison 1.875).
** Warnings
+*** Deprecated constructs
+
+ The new 'deprecated' warning category flags obsolete constructs whose
+ support will be discontinued. It is enabled by default. These warnings
+ used to be reported as 'other' warnings.
+
*** Warning categories are now displayed
For instance:
3.28-34: warning: type <type3> is used, but is not associated to any symbol
4.28-34: warning: type <type4> is used, but is not associated to any symbol
-*** Undeclared symbols
+*** Undefined but unused symbols
- Bison used to raise an error for %printer and %destructor directives for
- undefined symbols.
+ Bison used to raise an error for undefined symbols that are not used in
+ the grammar. This is now only a warning.
%printer {} symbol1
%destructor {} symbol2
+ %type <type> symbol3
%%
exp: "a";
- This is now only a warning.
-
*** Useless destructors or printers
Bison now warns about useless destructors or printers. In the following
%printer {} token1 <type1> <type3>
%destructor {} token2 <type2> <type4>
+*** Conflicts
+
+ The warnings and error messages about shift/reduce and reduce/reduce
+ conflicts have been normalized. For instance on the following foo.y file:
+
+ %glr-parser
+ %%
+ exp: exp '+' exp | '0' | '0';
+
+ compare the previous version of bison:
+
+ $ bison foo.y
+ foo.y: conflicts: 1 shift/reduce, 2 reduce/reduce
+ $ bison -Werror foo.y
+ bison: warnings being treated as errors
+ foo.y: conflicts: 1 shift/reduce, 2 reduce/reduce
+
+ with the new behavior:
+
+ $ bison foo.y
+ foo.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
+ foo.y: warning: 2 reduce/reduce conflicts [-Wconflicts-rr]
+ $ bison -Werror foo.y
+ foo.y: error: 1 shift/reduce conflict [-Werror=conflicts-sr]
+ foo.y: error: 2 reduce/reduce conflicts [-Werror=conflicts-rr]
+
+ When %expect or %expect-rr is used, such as with bar.y:
+
+ %expect 0
+ %glr-parser
+ %%
+ exp: exp '+' exp | '0' | '0';
+
+ Former behavior:
+
+ $ bison bar.y
+ bar.y: conflicts: 1 shift/reduce, 2 reduce/reduce
+ bar.y: expected 0 shift/reduce conflicts
+ bar.y: expected 0 reduce/reduce conflicts
+
+ New one:
+
+ $ bison bar.y
+ bar.y: error: shift/reduce conflicts: 1 found, 0 expected
+ bar.y: error: reduce/reduce conflicts: 2 found, 0 expected
+
** Additional yylex/yyparse arguments
The new directive %param declares additional arguments to both yylex and
** Java skeleton improvements
- The constants for token names were moved to the Lexer interface.
- Also, it is possible to add code to the parser's constructors using
- "%code init" and "%define init_throws".
+ The constants for token names were moved to the Lexer interface. Also, it
+ is possible to add code to the parser's constructors using "%code init"
+ and "%define init_throws".
** C++ skeletons improvements
-*** parser header (%defines) is no longer mandatory (lalr1.cc)
+*** The parser header is no longer mandatory (lalr1.cc, glr.cc)
- In which case, if needed, the support classes are defined in the generated
- parser, instead of additional files (location.hh, position.hh and
- stack.hh).
+ Using %defines is now optional. Without it, the needed support classes
+ are defined in the generated parser, instead of additional files (such as
+ location.hh, position.hh and stack.hh).
-*** locations are no longer mandatory (lalr1.cc, glr.cc)
+*** Locations are no longer mandatory (lalr1.cc, glr.cc)
Both lalr1.cc and glr.cc no longer require %location.
** Variable api.namespace
- The "namespace" variable is renamed "api.namespace". Backward
+ 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".
+ This variable controls the verbosity of error messages. The use of the
+ %error-verbose directive is deprecated in favor of "%define parse.error
+ verbose".
** Semantic predicates
- The new, experimental, semantic-predicate feature allows actions of
- the form %?{ BOOLEAN-EXPRESSION }, which cause syntax errors (as for
+ The new, experimental, semantic-predicate feature allows actions of the
+ form "%?{ BOOLEAN-EXPRESSION }", which cause syntax errors (as for
YYERROR) if the expression evaluates to 0, and are evaluated immediately
- in GLR parsers, rather than being deferred. The result is that they
- allow the programmer to prune possible parses based on the values of
- run-time expressions.
+ in GLR parsers, rather than being deferred. The result is that they allow
+ the programmer to prune possible parses based on the values of run-time
+ expressions.
+
+** The directive %expect-rr is now an error in non GLR mode
+
+ It used to be an error only if used in non GLR mode, _and_ if there are
+ reduce/reduce conflicts.
* Noteworthy changes in release ?.? (????-??-??) [?]
+** Bug fixes
+
+ Bugs in the test suite have been fixed.
+
+ Some errors in translations have been addressed, and --help now directs
+ users to the appropriate place to report them.
+
+ Stray Info files shipped by accident are removed.
+
+ Incorrect definitions of YY_, issued by yacc.c when no parser header is
+ generated, are removed.
+
+** Changes in the format of errors and exceptions output
+
+ This used to be the format of many error reports:
+
+ foo.y:5.10-24: result type clash on merge function 'merge': <t3> != <t2>
+ foo.y:4.13-27: previous declaration
+
+ It is now:
+
+ foo.y:5.10-25: result type clash on merge function 'merge': <t3> != <t2>
+ foo.y:4.13-27: previous declaration
+
+* Noteworthy changes in release 2.6.2 (2012-08-03) [stable]
+
+** Bug fixes
+
+ Buffer overruns, complaints from Flex, and portability issues in the test
+ suite have been fixed.
+
+** Spaces in %lex- and %parse-param (lalr1.cc, glr.cc)
+
+ Trailing end-of-lines in %parse-param or %lex-param would result in
+ invalid C++. This is fixed.
+
+** Spurious spaces and end-of-lines
+
+ The generated files no longer end (nor start) with empty lines.
+
+* Noteworthy changes in release 2.6.1 (2012-07-30) [stable]
+
Bison no longer executes user-specified M4 code when processing a grammar.
** Future Changes