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.