]> git.saurik.com Git - bison.git/blobdiff - NEWS
Don't put the pre-prologue in the header file. For the yacc.c code
[bison.git] / NEWS
diff --git a/NEWS b/NEWS
index a1bf9ae1d0bf14b964b38b9b78a91461d77dcdaf..d841db6f6fa6205e4b8cc1d648fe25f61c7ef180 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,60 @@ Changes in version 2.3+:
   helps to sanitize the global namespace during preprocessing, but POSIX Yacc
   requires them.  Bison still generates an enum for token names in all cases.
 
+* Handling of prologue blocks is now more consistent but potentially backward
+  incompatible.
+
+  As before, you declare prologue blocks in your grammar file with the
+  `%{ ... %}' syntax.  To generate the pre-prologue, Bison concatenates all
+  prologue blocks that you've declared before any %union.  If you've declared a
+  %union, Bison concatenates all prologue blocks that you've declared after it
+  to generate the post-prologue.  (The new %before-definitions and
+  %after-definitions have a similar effect as %union on the prologues.  See
+  below.)
+
+  Previous versions of Bison inserted the pre-prologue into both the header
+  file and the code file in all cases except for LALR(1) parsers in C.  In the
+  latter case, Bison inserted it only into the code file.  For parsers in C++,
+  the point of insertion was before any token definitions (which associate
+  token numbers with names).  For parsers in C, the point of insertion was
+  after the token definitions.
+
+  Now, Bison never inserts the pre-prologue into the header file.  In the code
+  file, it always inserts it before the token definitions.
+
+* Bison now provides the %before-definitions and %after-definitions directives.
+
+  For example, in your grammar file:
+
+    %{
+      /* A pre-prologue block.  For Yacc portability, Bison no longer puts this
+       * in the header file.  In the code file, Bison inserts it before any
+       * %before-definitions blocks.  */
+    %}
+    %before-definitions {
+      /* Bison inserts this into both the header file and code file.  In both
+       * files, the point of insertion is before any Bison-generated token,
+       * semantic type, location type, and class definitions.  This is a good
+       * place to define %union dependencies, for example.  */
+    }
+    %union {
+      /* With previous versions of Bison, the first %union in your grammar file
+       * separated the pre-prologue blocks from the post-prologue blocks.  Now,
+       * the first %union, %before-definitions, or %after-definitions does
+       * that.  */
+    }
+    %after-definitions {
+      /* If you want something in the header file and in the code file and it
+       * depends on any of the Bison-generated definitions in the header file,
+       * put it here.  */
+    }
+    %{
+      /* A post-prologue block.  If you want something in the code file but not
+       * in the header file and it depends on Bison-generated definitions, put
+       * it here.  In the code file, Bison inserts it after any
+       * %after-definitions blocks.  */
+    %}
+
 * 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.