Bison will stop adding a semicolon at the end of the actions (as announced
in the release 2.5):
- foo.y:2.22: warning: a ';' might be needed at the end of action code
- exp: "num" { $$ = $1 }
- ^
- foo.y:2.22: future versions of Bison will not add the ';'
+ foo.y:2.25: warning: a ';' might be needed at the end of action code
+ exp: "number" { $$ = $1 }
+ ^
+ foo.y:2.25: future versions of Bison will not add the ';'
Like other GNU packages, Bison will start using some of the C99 features
for its own code, especially the definition of variables after statements.
activated by default. The old format can still be used by invoking Bison
with -fno-caret (or -fnone).
+ Some error messages that reproduced excerpts of the grammar are now using
+ the caret information only. For instance on:
+
+ %%
+ exp: 'a' | 'a';
+
+ Bison 2.7 reports:
+
+ in.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+ in.y:2.12-14: warning: rule useless in parser due to conflicts: exp: 'a' [-Wother]
+
+ Now bison reports:
+
+ in.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+ in.y:2.12-14: warning: rule useless in parser due to conflicts [-Wother]
+ exp: 'a' | 'a';
+ ^^^
+
+ and "bison -fno-caret" reports:
+
+ in.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
+ in.y:2.12-14: warning: rule useless in parser due to conflicts [-Wother]
+
*** Enhancements of the -Werror option
The -Werror=CATEGORY option is now recognized, and will treat specified
Contributed by Valentin Tolmer.
- When developping and maintaining a grammar, useless associativity and
+ When developing and maintaining a grammar, useless associativity and
precedence directives are common. They can be a nuisance: new ambiguities
arising are sometimes masked because their conflicts are resolved due to
the extra precedence or associativity information. Furthermore, it can
%left '*'
%%
exp:
- "num"
- | exp '+' "num"
+ "number"
+ | exp '+' "number"
| exp '*' exp
;
%precedence '='
%%
- exp: "var" '=' "num";
+ exp: "var" '=' "number";
will produce a
%nonassoc '='
%%
- exp: "var" '=' "num";
+ exp: "var" '=' "number";
The warning is:
%nonassoc '='
^^^
+** Empty rules
+
+ With help from Joel E. Denny and Gabriel Rassoul.
+
+ Empty rules (i.e., with an empty right-hand side) can now be explicitly
+ marked by the new %empty directive. Using %empty on a non-empty rule is
+ an error. The new -Wempty-rule warning reports empty rules without
+ %empty. On the following grammar:
+
+ %%
+ s: a b c;
+ a: ;
+ b: %empty;
+ c: 'a' %empty;
+
+ bison reports:
+
+ 3.4-5: warning: empty rule without %empty [-Wempty-rule]
+ a: {}
+ ^^
+ 5.8-13: error: %empty on non-empty rule
+ c: 'a' %empty {};
+ ^^^^^^
+
** Java skeleton improvements
Contributed by Paolo Bonzini.
;
list:
- /* nothing */ { /* Generates an empty string list */ }
+ %empty { /* Generates an empty string list. */ }
| list item ";" { std::swap ($$, $1); $$.push_back ($2); }
;
exp: exp '+' exp { $exp = $1 + $3; };
^^^
- The default behaviour for now is still not to display these unless
- explictly asked with -fcaret (or -fall). However, in a later release, it
+ The default behavior for now is still not to display these unless
+ explicitly asked with -fcaret (or -fall). However, in a later release, it
will be made the default behavior (but may still be deactivated with
-fno-caret).
Other issues in the test suite have been addressed.
- Nul characters are correctly displayed in error messages.
+ Null characters are correctly displayed in error messages.
When possible, yylloc is correctly initialized before calling yylex. It
is no longer necessary to initialize it in the %initial-action.
LocalWords: Automake TMPDIR LESSEQ ylwrap endif yydebug YYTOKEN YYLSP ival hh
LocalWords: extern YYTOKENTYPE TOKENTYPE yytokentype tokentype STYPE lval pdf
LocalWords: lang yyoutput dvi html ps POSIX lvalp llocp Wother nterm arg init
- LocalWords: TOK calc yyo fval Wconflicts
+ LocalWords: TOK calc yyo fval Wconflicts parsers yystackp yyval yynerrs
+ LocalWords: Théophile Ranquet Santet fno fnone stype associativity Tolmer
+ LocalWords: Wprecedence Rassoul Wempty Paolo Bonzini parser's Michiel loc
+ LocalWords: redeclaration sval fcaret reentrant XSLT xsl Wmaybe yyvsp Tedi
+ LocalWords: pragmas noreturn untyped Rozenman unexpanded Wojciech Polak
+ LocalWords: Alexandre MERCHANTABILITY
Local Variables:
mode: outline