X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/6574576cfb6e5039e8a21714e8d9bf482ae7c32f..aba47f562429848270983cd4c3e0c5fd44e71bcd:/NEWS diff --git a/NEWS b/NEWS index 3816fdd5..e06cb77a 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,26 @@ GNU Bison NEWS Missing semicolons at the end of actions are no longer added (as announced in the release 2.5). +*** Use of YACC='bison -y' + + TL;DR: With Autoconf <= 2.69, pass -Wno-yacc to (AM_)YFLAGS if you use + Bison extensions. + + Traditional Yacc generates 'y.tab.c' whatever the name of the input file. + Therefore Makefiles written for Yacc expect 'y.tab.c' (and possibly + 'y.tab.h' and 'y.outout') to be generated from 'foo.y'. + + To this end, for ages, AC_PROG_YACC, Autoconf's macro to look for an + implementation of Yacc, was using Bison as 'bison -y'. While it does + ensure compatible output file names, it also enables warnings for + incompatibilities with POSIX Yacc. In other words, 'bison -y' triggers + warnings for Bison extensions. + + Autoconf 2.70+ fixes this incompatibility by using YACC='bison -o y.tab.c' + (which also generates 'y.tab.h' and 'y.output' when needed). + Alternatively, disable Yacc warnings by passing '-Wno-yacc' to your Yacc + flags (YFLAGS, or AM_YFLAGS with Automake). + ** Bug fixes *** The epilogue is no longer affected by internal #defines (glr.c) @@ -42,6 +62,8 @@ GNU Bison NEWS Changes in Bison 2.7 introduced a dependency on FILE and fprintf when locations are enabled. This is fixed. +*** Warnings about useless %pure-parser/%define api.pure are restored + ** Diagnostics reported by Bison Most of these features were contributed by Théophile Ranquet and Victor @@ -236,6 +258,23 @@ GNU Bison NEWS %param {arg1_type *arg1} {arg2_type *arg2} +** Types of values for %define variables + + Bison used to make no difference between '%define foo bar' and '%define + foo "bar"'. The former is now called a 'keyword value', and the latter a + 'string value'. A third kind was added: 'code values', such as '%define + foo {bar}'. + + Keyword variables are used for fixed value sets, e.g., + + %define lr.type lalr + + Code variables are used for value in the target language, e.g., + + %define api.value.type {struct semantic_type} + + String variables are used remaining cases, e.g. file names. + ** Variable api.token.prefix The variable api.token.prefix changes the way tokens are identified in @@ -243,7 +282,7 @@ GNU Bison NEWS with identifiers in the target language. For instance %token FILE for ERROR - %define api.token.prefix "TOK_" + %define api.token.prefix {TOK_} %% start: FILE for ERROR; @@ -274,11 +313,13 @@ GNU Bison NEWS yylval.ival = 42; return INT; yylval.sval = "42"; return STRING; - The %define variable api.value.type supports several special values. The - value "union" means that the user provides genuine types, not union member - names such as "ival" and "sval" above. + The %define variable api.value.type supports both keyword and code values. + + The keyword value 'union' means that the user provides genuine types, not + union member names such as "ival" and "sval" above (WARNING: will fail if + -y/--yacc/%yacc is enabled). - %define api.value.type "union" + %define api.value.type union %token INT "integer" %token STRING "string" %printer { fprintf (yyo, "%d", $$); } @@ -288,15 +329,15 @@ GNU Bison NEWS yylval.INT = 42; return INT; yylval.STRING = "42"; return STRING; - The value "variant" is somewhat equivalent, but for C++ special provision - is made to allow classes to be used (more about this below). + The keyword value variant is somewhat equivalent, but for C++ special + provision is made to allow classes to be used (more about this below). - %define api.value.type "variant" + %define api.value.type variant %token INT "integer" %token STRING "string" - Any other name is a user type to use. This is where YYSTYPE used to be - used. + Code values (in braces) denote user defined types. This is where YYSTYPE + used to be used. %code requires { @@ -313,7 +354,7 @@ GNU Bison NEWS } u; }; } - %define api.value.type "struct my_value" + %define api.value.type {struct my_value} %token INT "integer" %token STRING "string" %printer { fprintf (yyo, "%d", $$); } @@ -548,6 +589,21 @@ GNU Bison NEWS ... } +*** C++ locations + + There are operator- and operator-= for 'location'. Negative line/column + increments can no longer underflow the resulting value. + +* Noteworthy changes in release ?.? (????-??-??) [?] + +** Bug fixes + +*** Fix compiler attribute portability (yacc.c) + + With locations enabled, __attribute__ was used unprotected. + +*** Fix some compiler warnings (lalr1.cc) + * Noteworthy changes in release 2.7 (2012-12-12) [stable] ** Bug fixes