]> git.saurik.com Git - bison.git/blobdiff - NEWS
* NEWS (2.5): Document fix for -Wno-KEY.
[bison.git] / NEWS
diff --git a/NEWS b/NEWS
index 99814004ff6b96128ad26592920e240da479cc2a..64a257043e6feab361b342d165c0729b56c2c5fe 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -62,6 +62,14 @@ Bison News
 
 * Changes in version 2.5 (????-??-??):
 
+** Grammar symbol names can now contain non-initial dashes:
+
+  Consistently with directives (such as %error-verbose) and with
+  %define variables (e.g. push-pull), grammar symbol names may contain
+  dashes in any position except the beginning.  This is a GNU
+  extension over POSIX Yacc.  Thus, use of this extension is reported
+  by -Wyacc and rejected in Yacc mode (--yacc).
+
 ** Named references:
 
   Historically, Yacc and Bison have supported positional references
@@ -108,27 +116,27 @@ Bison News
     %define lr.type ielr
     %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
-  section `Bison Declaration Summary' in the Bison manual for the
-  details.
+  The default-reduction optimization in the parser tables can also be
+  adjusted using `%define lr.default-reductions'.  For details on both
+  of these features, see the new section `Tuning LR' in the Bison
+  manual.
 
   These features are experimental.  More user feedback will help to
   stabilize them.
 
-** LAC (lookahead correction) for syntax error handling:
+** LAC (Lookahead Correction) for syntax error handling:
 
   Canonical LR, IELR, and LALR can suffer from a couple of problems
   upon encountering a syntax error.  First, the parser might perform
   additional parser stack reductions before discovering the syntax
-  error.  Such reductions perform user semantic actions that are
+  error.  Such reductions can perform user semantic actions that are
   unexpected because they are based on an invalid token, and they
   cause error recovery to begin in a different syntactic context than
   the one in which the invalid token was encountered.  Second, when
-  verbose error messages are enabled (with %error-verbose or `#define
-  YYERROR_VERBOSE'), the expected token list in the syntax error
-  message can both contain invalid tokens and omit valid tokens.
+  verbose error messages are enabled (with %error-verbose or the
+  obsolete `#define YYERROR_VERBOSE'), the expected token list in the
+  syntax error message can both contain invalid tokens and omit valid
+  tokens.
 
   The culprits for the above problems are %nonassoc, default
   reductions in inconsistent states, and parser state merging.  Thus,
@@ -136,11 +144,11 @@ Bison News
   %nonassoc is used or if default reductions are enabled for
   inconsistent states.
 
-  LAC is a new mechanism within the parsing algorithm that completely
-  solves these problems for canonical LR, IELR, and LALR without
-  sacrificing %nonassoc, default reductions, or state mering.  When
-  LAC is in use, canonical LR and IELR behave exactly the same for
-  both syntactically acceptable and syntactically unacceptable input.
+  LAC is a new mechanism within the parsing algorithm that solves
+  these problems for canonical LR, IELR, and LALR without sacrificing
+  %nonassoc, default reductions, or state merging.  When LAC is in
+  use, canonical LR and IELR behave almost exactly the same for both
+  syntactically acceptable and syntactically unacceptable input.
   While LALR still does not support the full language-recognition
   power of canonical LR and IELR, LAC at least enables LALR's syntax
   error handling to correctly reflect LALR's language-recognition
@@ -151,20 +159,14 @@ Bison News
 
     %define parse.lac full
 
-  See the documentation for `%define parse.lac' in the section `Bison
-  Declaration Summary' in the Bison manual for additional details.
+  See the new section `LAC' in the Bison manual for additional
+  details including a few caveats.
 
   LAC is an experimental feature.  More user feedback will help to
   stabilize it.
 
-** Unrecognized %code qualifiers are now errors not warnings.
-
 ** %define improvements:
 
-*** Unrecognized variables are now errors not warnings.
-
-*** Multiple invocations for any variable is now an error not a warning.
-
 *** Can now be invoked via the command line:
 
   Each of these command-line options
@@ -210,13 +212,73 @@ Bison News
 
     %define api.push-pull push
 
-** Grammar symbol names can now contain dashes:
+*** Unrecognized variables are now errors not warnings.
+
+*** Multiple invocations for any variable is now an error not a warning.
+
+** Unrecognized %code qualifiers are now errors not warnings.
+
+** Character literals not of length one:
 
-  Consistently with directives (such as %error-verbose) and variables
-  (e.g. push-pull), grammar 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).
+  Previously, Bison quietly converted all character literals to length
+  one.  For example, without warning, Bison interpreted the operators in
+  the following grammar to be the same token:
+
+    exp: exp '++'
+       | exp '+' exp
+       ;
+
+  Bison now warns when a character literal is not of length one.  In
+  some future release, Bison will start reporting an error instead.
+
+** Destructor calls fixed for lookaheads altered in semantic actions:
+
+  Previously for deterministic parsers in C, if a user semantic action
+  altered yychar, the parser in some cases used the old yychar value to
+  determine which destructor to call for the lookahead upon a syntax
+  error or upon parser return.  This bug has been fixed.
+
+** C++ parsers use YYRHSLOC:
+
+  Similarly to the C parsers, the C++ parsers now define the YYRHSLOC
+  macro and use it in the default YYLLOC_DEFAULT.  You are encouraged
+  to use it.  If, for instance, your location structure has "first"
+  and "last" members, instead of
+
+      # define YYLLOC_DEFAULT(Current, Rhs, N)                             \
+        do                                                                 \
+          if (N)                                                           \
+            {                                                              \
+              (Current).first = (Rhs)[1].location.first;                   \
+              (Current).last  = (Rhs)[N].location.last;                    \
+            }                                                              \
+          else                                                             \
+            {                                                              \
+              (Current).first = (Current).last = (Rhs)[0].location.last;   \
+            }                                                              \
+        while (false)
+
+  use:
+
+      # define YYLLOC_DEFAULT(Current, Rhs, N)                             \
+        do                                                                 \
+          if (N)                                                           \
+            {                                                              \
+              (Current).first = YYRHSLOC (Rhs, 1).first;                   \
+              (Current).last  = YYRHSLOC (Rhs, N).last;                    \
+            }                                                              \
+          else                                                             \
+            {                                                              \
+              (Current).first = (Current).last = YYRHSLOC (Rhs, 0).last;   \
+            }                                                              \
+        while (false)
+
+** YYLLOC_DEFAULT in C++:
+
+  The default implementation of YYLLOC_DEFAULT used to be issued in
+  the header file.  It is now output in the implementation file, after
+  the user %code sections so that its #ifndef guard does not try to
+  override the user's YYLLOC_DEFAULT if provided.
 
 ** YYFAIL now produces warnings and Java parsers no longer implement it:
 
@@ -250,26 +312,13 @@ Bison News
   about a missing semicolon where it did not before.  Future releases of
   Bison will cease to append semicolons entirely.
 
-** Character literals not of length one:
-
-  Previously, Bison quietly converted all character literals to length
-  one.  For example, without warning, Bison interpreted the operators in
-  the following grammar to be the same token:
-
-    exp: exp '++'
-       | exp '+' exp
-       ;
-
-  Bison now warns when a character literal is not of length one.  In
-  some future release, Bison will start reporting an error instead.
-
 ** Verbose syntax error message fixes:
 
-  When %error-verbose or `#define YYERROR_VERBOSE' is specified,
-  syntax error messages produced by the generated parser include the
-  unexpected token as well as a list of expected tokens.  The effect
-  of %nonassoc on these verbose messages has been corrected in two
-  ways, but a complete fix requires LAC, described above:
+  When %error-verbose or the obsolete `#define YYERROR_VERBOSE' is
+  specified, syntax error messages produced by the generated parser
+  include the unexpected token as well as a list of expected tokens.
+  The effect of %nonassoc on these verbose messages has been corrected
+  in two ways, but a more complete fix requires LAC, described above:
 
 *** When %nonassoc is used, there can exist parser states that accept no
     tokens, and so the parser does not always require a lookahead token
@@ -301,54 +350,23 @@ Bison News
     canonical LR.  However, LAC is still experimental and is disabled
     by default.
 
-** Destructor calls fixed for lookaheads altered in semantic actions:
-
-  Previously for deterministic parsers in C, if a user semantic action
-  altered yychar, the parser in some cases used the old yychar value to
-  determine which destructor to call for the lookahead upon a syntax
-  error or upon parser return.  This bug has been fixed.
+** Java skeleton fixes:
 
-** C++ parsers use YYRHSLOC:
+*** A location handling bug has been fixed.
 
-  Similarly to the C parsers, the C++ parsers now define the YYRHSLOC
-  macro and use it in the default YYLLOC_DEFAULT.  You are encouraged
-  to use it.  If, for instance, your location structure has "first"
-  and "last" members, instead of
+*** The top element of each of the value stack and location stack is now
+    cleared when popped so that it can be garbage collected.
 
-      # define YYLLOC_DEFAULT(Current, Rhs, N)                             \
-        do                                                                 \
-          if (N)                                                           \
-            {                                                              \
-              (Current).first = (Rhs)[1].location.first;                   \
-              (Current).last  = (Rhs)[N].location.last;                    \
-            }                                                              \
-          else                                                             \
-            {                                                              \
-              (Current).first = (Current).last = (Rhs)[0].location.last;   \
-            }                                                              \
-        while (false)
+*** Parser traces now print the top element of the stack.
 
-  use:
+** -W/--warnings fixes:
 
-      # define YYLLOC_DEFAULT(Current, Rhs, N)                             \
-        do                                                                 \
-          if (N)                                                           \
-            {                                                              \
-              (Current).first = YYRHSLOC (Rhs, 1).first;                   \
-              (Current).last  = YYRHSLOC (Rhs, N).last;                    \
-            }                                                              \
-          else                                                             \
-            {                                                              \
-              (Current).first = (Current).last = YYRHSLOC (Rhs, 0).last;   \
-            }                                                              \
-        while (false)
+*** Bison now properly recognizes the "no-" versions of categories:
 
-** YYLLOC_DEFAULT in C++:
+  For example, given the following command line, Bison now enables all
+  warnings except warnings for incompatibilities with POSIX Yacc:
 
-  The default implementation of YYLLOC_DEFAULT used to be issued in
-  the header file.  It is now output in the implementation file, after
-  the user %code sections so that its #ifndef guard does not try to
-  override the user's YYLLOC_DEFAULT if provided.
+    bison -Wall,no-yacc gram.y
 
 * Changes in version 2.4.3 (2010-08-05):
 
@@ -1511,9 +1529,7 @@ End:
 
 -----
 
-Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
-Inc.
+Copyright (C) 1995-2011 Free Software Foundation, Inc.
 
 This file is part of Bison, the GNU Parser Generator.