X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/203b9274149813e3ad763f1b800c83dcff07237f..9bc0dd679f19b79f7250d2b16563b590a3b032bb:/NEWS diff --git a/NEWS b/NEWS index a1bf9ae1..d841db6f 100644 --- 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.