]> git.saurik.com Git - bison.git/blobdiff - NEWS
* NEWS: Add entry for recent .output file lookahead set fix.
[bison.git] / NEWS
diff --git a/NEWS b/NEWS
index fc5550f9f571fe3cca1efb6fc09a4fb21f0ede20..bf260476b0253dd1cc70431f1a5680e021625695 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,76 +3,113 @@ Bison News
 
 Changes in version 2.3a+ (????-??-??):
 
 
 Changes in version 2.3a+ (????-??-??):
 
+* Previously, Bison sometimes generated parser tables with states that were
+  unreachable due to conflicts in predecessor states.  Bison now:
+
+    1. Removes unreachable states.
+
+    2. Does not report any conflicts that appeared in unreachable states.
+       WARNING: As a result, you may need to update %expect and %expect-rr
+       directives in existing grammar files.
+
+    3. For any rule used only in such states, Bison now reports the rule as
+       "never reduced because of conflicts".
+
+* When instructed to generate a `.output' file including lookahead sets
+  (using `--report=lookahead', for example), Bison now prints each reduction's
+  lookahead set only next to the associated state's one item that (1) is
+  associated with the same rule as the reduction and (2) has its dot at the end
+  of its RHS.  Previously, Bison also erroneously printed the lookahead set
+  next to all of the state's other items associated with the same rule.  This
+  bug affected only the `.output' file and not the generated parser source
+  code.
+
 * The -g and --graph options now output graphs in Graphviz DOT format,
   not VCG format.
 
 * The -g and --graph options now output graphs in Graphviz DOT format,
   not VCG format.
 
-* The Yacc prologue alternatives from Bison 2.3a have been rewritten as the
-  following directives:
-
-    1. %code {CODE}
-
-       Other than semantic actions, this is probably the most common place you
-       should write verbatim code for the parser implementation.  For C/C++, it
-       replaces the traditional Yacc prologue, `%{CODE%}', for most purposes.
-       For Java, it inserts your CODE into the parser class.  Compare with:
-
-         - `%{CODE%}' appearing after the first `%union {CODE}' in a C/C++
-           based grammar file.  While Bison will continue to support `%{CODE%}'
-           for backward compatibility, `%code {CODE}' is cleaner as its
-           functionality does not depend on its position in the grammar file
-           relative to any `%union {CODE}'.  Specifically, `%code {CODE}'
-           always inserts your CODE into the parser code file after the usual
-           contents of the parser header file.
-         - `%after-header {CODE}', which only Bison 2.3a supported.
-
-    2. %requires {CODE}
-
-       This is the right place to write dependency code for externally exposed
-       definitions required by Bison.  For C/C++, such exposed definitions are
-       those usually appearing in the parser header file.  Thus, this is the
-       right place to define types referenced in `%union {CODE}' directives,
-       and it is the right place to override Bison's default YYSTYPE and
-       YYLTYPE definitions.  For Java, this is the right place to write import
-       directives.  Compare with:
-
-         - `%{CODE%}' appearing before the first `%union {CODE}' in a C/C++
-           based grammar file.  Unlike `%{CODE%}', `%requires {CODE}' inserts
-           your CODE both into the parser code file and into the parser header
-           file since Bison's required definitions should depend on it in both
-           places.
-         - `%start-header {CODE}', which only Bison 2.3a supported.
-
-    3. %provides {CODE}
-    
-       This is the right place to write additional definitions you would like
-       Bison to expose externally.  For C/C++, this directive inserts your CODE
-       both into the parser header file and into the parser code file after
-       Bison's required definitions.  For Java, it inserts your CODE into the
-       parser java file after the parser class.  Compare with:
-
-         - `%end-header {CODE}', which only Bison 2.3a supported.
-
-    4. %code-top {CODE}
-
-       Occasionally for C/C++ it is desirable to insert code near the top of
-       the parser code file.  For example:
-
-         %code-top {
-           #define _GNU_SOURCE
-           #include <stdio.h>
-         }
-
-       For Java, `%code-top {CODE}' is currently unused.  Compare with:
-
-         - `%{CODE%}' appearing before the first `%union {CODE}' in a C/C++
-           based grammar file.  `%code-top {CODE}' is cleaner as its
-           functionality does not depend on its position in the grammar file
-           relative to any `%union {CODE}'.
-         - `%before-header {CODE}', which only Bison 2.3a supported.
-
-  If you have multiple occurrences of any one of the above four directives,
-  Bison will concatenate the contents in the order they appear in the grammar
-  file.
+* An experimental directive %language specifies the language of the
+  generated parser, which can be C (the default) or C++.  This
+  directive affects the skeleton used, and the names of the generated
+  files if the grammar file's name ends in ".y".
+
+* The grammar file may now specify the name of the parser header file using
+  %defines.  For example:
+
+    %defines "parser.h"
+
+* The `=' that used to be required in the following directives is now
+  deprecated:
+
+    %file-prefix "parser"
+    %name-prefix "c_"
+    %output "parser.c"
+
+* The quotes around NAME that used to be required in the following directive
+  are now deprecated:
+
+    %define NAME "VALUE"
+
+* Bison 2.3a provided a new set of directives as a more flexible alternative to
+  the traditional Yacc prologue blocks.  Those have now been consolidated into
+  a single %code directive with an optional qualifier field, which identifies
+  the purpose of the code and thus the location(s) where Bison should generate
+  it:
+
+    1. `%code          {CODE}' replaces `%after-header  {CODE}'
+    2. `%code requires {CODE}' replaces `%start-header  {CODE}'
+    3. `%code provides {CODE}' replaces `%end-header    {CODE}'
+    4. `%code top      {CODE}' replaces `%before-header {CODE}'
+
+  See the %code entries in section `Bison Declaration Summary' in the Bison
+  manual for a summary of the new functionality.  See the new section `Prologue
+  Alternatives' for a detailed discussion including the advantages of %code
+  over the traditional Yacc prologues.
+
+  The prologue alternatives are experimental.  More user feedback will help to
+  determine whether they should become permanent features.
+
+* Revised warning: unset or unused mid-rule values
+
+  Since Bison 2.2, Bison has warned about mid-rule values that are set but not
+  used within any of the actions of the parent rule.  For example, Bison warns
+  about unused $2 in:
+
+    exp: '1' { $$ = 1; } '+' exp { $$ = $1 + $4; };
+
+  Now, Bison also warns about mid-rule values that are used but not set.  For
+  example, Bison warns about unset $$ in the mid-rule action in:
+
+    exp: '1' { $1 = 1; } '+' exp { $$ = $2 + $4; };
+
+  However, Bison now disables both of these warnings by default since they
+  sometimes prove to be false alarms in existing grammars employing the Yacc
+  constructs $0 or $-N (where N is some positive integer).
+
+  To enable these warnings, specify the flag `--warnings=midrule-values' or
+  `-W', which is a synonym for `--warnings=all'.
+
+* Bison now recognizes two separate kinds of default %destructor's and
+  %printer's:
+
+    1. Place `<*>' in a %destructor/%printer symbol list to define a default
+       %destructor/%printer for all grammar symbols for which you have formally
+       declared semantic type tags.
+
+    2. Place `<>' in a %destructor/%printer symbol list to define a default
+       %destructor/%printer for all grammar symbols without declared semantic
+       type tags.
+
+  Bison no longer supports the `%symbol-default' notation from Bison 2.3a.
+  `<*>' and `<>' combined achieve the same effect with one exception: Bison no
+  longer applies any %destructor to a mid-rule value if that mid-rule value is
+  not actually ever referenced using either $$ or $n in a semantic action.
+
+  The default %destructor's and %printer's are experimental.  More user
+  feedback will help to determine whether they should become permanent
+  features.
+
+  See the section `Freeing Discarded Symbols' in the Bison manual for further
+  details.
 
 Changes in version 2.3a, 2006-09-13:
 
 
 Changes in version 2.3a, 2006-09-13:
 
@@ -107,6 +144,10 @@ Changes in version 2.3a, 2006-09-13:
   also prints its line number to `stdout'.  It performs only the second
   `%destructor' in this case, so it invokes `free' only once.
 
   also prints its line number to `stdout'.  It performs only the second
   `%destructor' in this case, so it invokes `free' only once.
 
+  [Although we failed to mention this here in the 2.3a release, the default
+  %destructor's and %printer's were experimental, and they were rewritten in
+  future versions.]
+
 * Except for LALR(1) parsers in C with POSIX Yacc emulation enabled (with `-y',
   `--yacc', or `%yacc'), Bison no longer generates #define statements for
   associating token numbers with token names.  Removing the #define statements
 * Except for LALR(1) parsers in C with POSIX Yacc emulation enabled (with `-y',
   `--yacc', or `%yacc'), Bison no longer generates #define statements for
   associating token numbers with token names.  Removing the #define statements
@@ -177,6 +218,9 @@ Changes in version 2.3a, 2006-09-13:
   If you have multiple occurrences of any one of the above declarations, Bison
   will concatenate the contents in declaration order.
 
   If you have multiple occurrences of any one of the above declarations, Bison
   will concatenate the contents in declaration order.
 
+  [Although we failed to mention this here in the 2.3a release, the prologue
+  alternatives were experimental, and they were rewritten in future versions.]
+
 * The option `--report=look-ahead' has been changed to `--report=lookahead'.
   The old spelling still works, but is not documented and may be removed
   in a future release.
 * The option `--report=look-ahead' has been changed to `--report=lookahead'.
   The old spelling still works, but is not documented and may be removed
   in a future release.
@@ -891,21 +935,19 @@ End:
 -----
 
 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
 -----
 
 Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-2004, 2005, 2006 Free Software Foundation, Inc.
+2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 This file is part of Bison, the GNU Compiler Compiler.
 
 
 This file is part of Bison, the GNU Compiler Compiler.
 
-Bison is free software; you can redistribute it and/or modify
+This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
 
-Bison is distributed in the hope that it will be useful,
+This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with autoconf; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.