Bison News
----------
-Changes in version 2.3+:
+Changes in version 2.3a+ (????-??-??):
+
+* The -g and --graph options now output graphs in Graphviz DOT format,
+ not VCG format.
+
+* 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 declarations is now
+ deprecated:
+
+ %file-prefix "parser"
+ %name-prefix "c_"
+ %output "parser.c"
+
+* 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.
+
+* 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. It replaces
+ the traditional Yacc prologue, `%{CODE%}', for most purposes. Compare
+ with:
+
+ - `%{CODE%}' appearing after the first `%union {CODE}' in a 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. 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. Compare with:
+
+ - `%{CODE%}' appearing before the first `%union {CODE}' in a 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. That is, this directive inserts your CODE
+ both into the parser header file and into the parser code file after
+ Bison's required definitions. Compare with:
+
+ - `%end-header {CODE}', which only Bison 2.3a supported.
+
+ 4. %code-top {CODE}
+
+ Occasionally it is desirable to insert code near the top of the parser
+ code file. For example:
+
+ %code-top {
+ #define _GNU_SOURCE
+ #include <stdio.h>
+ }
+
+ Compare with:
+
+ - `%{CODE%}' appearing before the first `%union {CODE}' in a 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.
+
+ The prologue alternatives are experimental. More user feedback will help to
+ determine whether they should become permanent features.
+
+ Also see the new section `Prologue Alternatives' in the Bison manual.
+
+Changes in version 2.3a, 2006-09-13:
+
+* Instead of %union, you can define and use your own union type
+ YYSTYPE if your grammar contains at least one <type> tag.
+ Your YYSTYPE need not be a macro; it can be a typedef.
+ This change is for compatibility with other Yacc implementations,
+ and is required by POSIX.
* Locations columns and lines start at 1.
In accordance with the GNU Coding Standards and Emacs.
+* You may now declare per-type and default %destructor's and %printer's:
+
+ For example:
+
+ %union { char *string; }
+ %token <string> STRING1
+ %token <string> STRING2
+ %type <string> string1
+ %type <string> string2
+ %union { char character; }
+ %token <character> CHR
+ %type <character> chr
+ %destructor { free ($$); } %symbol-default
+ %destructor { free ($$); printf ("%d", @$.first_line); } STRING1 string1
+ %destructor { } <character>
+
+ guarantees that, when the parser discards any user-defined symbol that has a
+ semantic type tag other than `<character>', it passes its semantic value to
+ `free'. However, when the parser discards a `STRING1' or a `string1', it
+ 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
`%{ ... %}' syntax. To generate the pre-prologue, Bison concatenates all
prologue blocks that you've declared before the first %union. To generate
the post-prologue, Bison concatenates all prologue blocks that you've
- declared after the first %union.
+ declared after the first %union.
Previous releases 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
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.