Document Yacc prologue alternatives and default %destructor's and

%printer's as experimental.  Don't mention Java yet.  Discussed at
<http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00002.html>.
* NEWS (2.3a+): Say they're experimental.  Remove any mention of Java.
(2.3a): Annotate this entry to say the old forms of these features were
also experimental.
* doc/bison.texinfo (Prologue Alternatives, Freeing Discarded Symbols,
Bison Symbols): Say they're experimental.  Comment out any mention
of Java (we'll want this back eventually).
This commit is contained in:
Joel E. Denny
2006-12-05 23:13:41 +00:00
parent 02975b9aad
commit 8589431355
3 changed files with 105 additions and 41 deletions

View File

@@ -1,3 +1,15 @@
2006-12-05 Joel E. Denny <jdenny@ces.clemson.edu>
Document Yacc prologue alternatives and default %destructor's and
%printer's as experimental. Don't mention Java yet. Discussed at
<http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00002.html>.
* NEWS (2.3a+): Say they're experimental. Remove any mention of Java.
(2.3a): Annotate this entry to say the old forms of these features were
also experimental.
* doc/bison.texinfo (Prologue Alternatives, Freeing Discarded Symbols,
Bison Symbols): Say they're experimental. Comment out any mention
of Java (we'll want this back eventually).
2006-12-01 Joel E. Denny <jdenny@ces.clemson.edu> 2006-12-01 Joel E. Denny <jdenny@ces.clemson.edu>
Support a file name argument to %defines. Deprecate `=' in Support a file name argument to %defines. Deprecate `=' in

73
NEWS
View File

@@ -54,6 +54,10 @@ Changes in version 2.3a+ (????-??-??):
longer applies any %destructor to a mid-rule value if that mid-rule value is 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. 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 See the section `Freeing Discarded Symbols' in the Bison manual for further
details. details.
@@ -63,68 +67,68 @@ Changes in version 2.3a+ (????-??-??):
1. %code {CODE} 1. %code {CODE}
Other than semantic actions, this is probably the most common place you Other than semantic actions, this is probably the most common place you
should write verbatim code for the parser implementation. For C/C++, it should write verbatim code for the parser implementation. It replaces
replaces the traditional Yacc prologue, `%{CODE%}', for most purposes. the traditional Yacc prologue, `%{CODE%}', for most purposes. Compare
For Java, it inserts your CODE into the parser class. Compare with: with:
- `%{CODE%}' appearing after the first `%union {CODE}' in a C/C++ - `%{CODE%}' appearing after the first `%union {CODE}' in a grammar
based grammar file. While Bison will continue to support `%{CODE%}' file. While Bison will continue to support `%{CODE%}' for backward
for backward compatibility, `%code {CODE}' is cleaner as its compatibility, `%code {CODE}' is cleaner as its functionality does
functionality does not depend on its position in the grammar file not depend on its position in the grammar file relative to any
relative to any `%union {CODE}'. Specifically, `%code {CODE}' `%union {CODE}'. Specifically, `%code {CODE}' always inserts your
always inserts your CODE into the parser code file after the usual CODE into the parser code file after the usual contents of the
contents of the parser header file. parser header file.
- `%after-header {CODE}', which only Bison 2.3a supported. - `%after-header {CODE}', which only Bison 2.3a supported.
2. %requires {CODE} 2. %requires {CODE}
This is the right place to write dependency code for externally exposed This is the right place to write dependency code for externally exposed
definitions required by Bison. For C/C++, such exposed definitions are definitions required by Bison. Such exposed definitions are those
those usually appearing in the parser header file. Thus, this is the usually appearing in the parser header file. Thus, this is the right
right place to define types referenced in `%union {CODE}' directives, place to define types referenced in `%union {CODE}' directives, and it
and it is the right place to override Bison's default YYSTYPE and is the right place to override Bison's default YYSTYPE and YYLTYPE
YYLTYPE definitions. For Java, this is the right place to write import definitions. Compare with:
directives. Compare with:
- `%{CODE%}' appearing before the first `%union {CODE}' in a C/C++ - `%{CODE%}' appearing before the first `%union {CODE}' in a grammar
based grammar file. Unlike `%{CODE%}', `%requires {CODE}' inserts file. Unlike `%{CODE%}', `%requires {CODE}' inserts your CODE both
your CODE both into the parser code file and into the parser header into the parser code file and into the parser header file since
file since Bison's required definitions should depend on it in both Bison's required definitions should depend on it in both places.
places.
- `%start-header {CODE}', which only Bison 2.3a supported. - `%start-header {CODE}', which only Bison 2.3a supported.
3. %provides {CODE} 3. %provides {CODE}
This is the right place to write additional definitions you would like This is the right place to write additional definitions you would like
Bison to expose externally. For C/C++, this directive inserts your CODE Bison to expose externally. That is, this directive inserts your CODE
both into the parser header file and into the parser code file after both into the parser header file and into the parser code file after
Bison's required definitions. For Java, it inserts your CODE into the Bison's required definitions. Compare with:
parser java file after the parser class. Compare with:
- `%end-header {CODE}', which only Bison 2.3a supported. - `%end-header {CODE}', which only Bison 2.3a supported.
4. %code-top {CODE} 4. %code-top {CODE}
Occasionally for C/C++ it is desirable to insert code near the top of Occasionally it is desirable to insert code near the top of the parser
the parser code file. For example: code file. For example:
%code-top { %code-top {
#define _GNU_SOURCE #define _GNU_SOURCE
#include <stdio.h> #include <stdio.h>
} }
For Java, `%code-top {CODE}' is currently unused. Compare with: Compare with:
- `%{CODE%}' appearing before the first `%union {CODE}' in a C/C++ - `%{CODE%}' appearing before the first `%union {CODE}' in a grammar
based grammar file. `%code-top {CODE}' is cleaner as its file. `%code-top {CODE}' is cleaner as its functionality does not
functionality does not depend on its position in the grammar file depend on its position in the grammar file relative to any
relative to any `%union {CODE}'. `%union {CODE}'.
- `%before-header {CODE}', which only Bison 2.3a supported. - `%before-header {CODE}', which only Bison 2.3a supported.
If you have multiple occurrences of any one of the above four directives, 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 Bison will concatenate the contents in the order they appear in the grammar
file. 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. Also see the new section `Prologue Alternatives' in the Bison manual.
Changes in version 2.3a, 2006-09-13: Changes in version 2.3a, 2006-09-13:
@@ -160,6 +164,10 @@ Changes in version 2.3a, 2006-09-13:
also prints its line number to `stdout'. It performs only the second also prints its line number to `stdout'. It performs only the second
`%destructor' in this case, so it invokes `free' only once. `%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', * Except for LALR(1) parsers in C with POSIX Yacc emulation enabled (with `-y',
`--yacc', or `%yacc'), Bison no longer generates #define statements for `--yacc', or `%yacc'), Bison no longer generates #define statements for
associating token numbers with token names. Removing the #define statements associating token numbers with token names. Removing the #define statements
@@ -230,6 +238,9 @@ Changes in version 2.3a, 2006-09-13:
If you have multiple occurrences of any one of the above declarations, Bison If you have multiple occurrences of any one of the above declarations, Bison
will concatenate the contents in declaration order. 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 option `--report=look-ahead' has been changed to `--report=lookahead'.
The old spelling still works, but is not documented and may be removed The old spelling still works, but is not documented and may be removed
in a future release. in a future release.

View File

@@ -2684,6 +2684,10 @@ feature test macros can affect the behavior of Bison-generated
@findex %requires @findex %requires
@findex %provides @findex %provides
@findex %code-top @findex %code-top
(The prologue alternatives described here are experimental.
More user feedback will help to determine whether they should become permanent
features.)
The functionality of @var{Prologue} sections can often be subtle and The functionality of @var{Prologue} sections can often be subtle and
inflexible. inflexible.
As an alternative, Bison provides a set of more explicit directives: As an alternative, Bison provides a set of more explicit directives:
@@ -4271,6 +4275,9 @@ grammar symbol that has that semantic type tag unless that symbol has its own
per-symbol @code{%destructor}. per-symbol @code{%destructor}.
Finally, you can define two different kinds of default @code{%destructor}s. Finally, you can define two different kinds of default @code{%destructor}s.
(These default forms are experimental.
More user feedback will help to determine whether they should become permanent
features.)
You can place each of @code{<*>} and @code{<>} in the @var{symbols} list of You can place each of @code{<*>} and @code{<>} in the @var{symbols} list of
exactly one @code{%destructor} declaration in your grammar file. exactly one @code{%destructor} declaration in your grammar file.
The parser will invoke the @var{code} associated with one of these whenever it The parser will invoke the @var{code} associated with one of these whenever it
@@ -8573,12 +8580,22 @@ Separates alternate rules for the same result nonterminal.
@deffn {Directive} <*> @deffn {Directive} <*>
Used to define a default tagged @code{%destructor} or default tagged Used to define a default tagged @code{%destructor} or default tagged
@code{%printer}. @code{%printer}.
This feature is experimental.
More user feedback will help to determine whether it should become a permanent
feature.
@xref{Destructor Decl, , Freeing Discarded Symbols}. @xref{Destructor Decl, , Freeing Discarded Symbols}.
@end deffn @end deffn
@deffn {Directive} <> @deffn {Directive} <>
Used to define a default tagless @code{%destructor} or default tagless Used to define a default tagless @code{%destructor} or default tagless
@code{%printer}. @code{%printer}.
This feature is experimental.
More user feedback will help to determine whether it should become a permanent
feature.
@xref{Destructor Decl, , Freeing Discarded Symbols}. @xref{Destructor Decl, , Freeing Discarded Symbols}.
@end deffn @end deffn
@@ -8591,9 +8608,10 @@ Start-Symbol}. It cannot be used in the grammar.
@deffn {Directive} %code @{@var{code}@} @deffn {Directive} %code @{@var{code}@}
Other than semantic actions, this is probably the most common place you should Other than semantic actions, this is probably the most common place you should
write verbatim code for the parser implementation. write verbatim code for the parser implementation.
For C/C++, it replaces the traditional Yacc prologue, It replaces the traditional Yacc prologue,
@comment For C/C++, it replaces the traditional Yacc prologue,
@code{%@{@var{code}%@}}, for most purposes. @code{%@{@var{code}%@}}, for most purposes.
For Java, it inserts code into the parser class. @comment For Java, it inserts code into the parser class.
@cindex Prologue @cindex Prologue
@findex %union @findex %union
@@ -8607,11 +8625,17 @@ not depend on its position in the grammar file relative to any
Specifically, @code{%code @{@var{code}@}} always inserts your @var{code} into Specifically, @code{%code @{@var{code}@}} always inserts your @var{code} into
the parser code file after the usual contents of the parser header file. the parser code file after the usual contents of the parser header file.
(Like all the Yacc prologue alternative directives, this directive is
experimental.
More user feedback will help to determine whether it should become a permanent
feature.)
@xref{Prologue Alternatives}. @xref{Prologue Alternatives}.
@end deffn @end deffn
@deffn {Directive} %code-top @{@var{code}@} @deffn {Directive} %code-top @{@var{code}@}
Occasionally for C/C++ it is desirable to insert code near the top of the Occasionally it is desirable to insert code near the top of the
@comment Occasionally for C/C++ it is desirable to insert code near the top of the
parser code file. parser code file.
For example: For example:
@@ -8622,8 +8646,8 @@ For example:
@} @}
@end smallexample @end smallexample
@noindent @comment @noindent
For Java, @code{%code-top @{@var{code}@}} is currently unused. @comment For Java, @code{%code-top @{@var{code}@}} is currently unused.
@cindex Prologue @cindex Prologue
@findex %union @findex %union
@@ -8633,6 +8657,11 @@ Compare with @code{%@{@var{code}%@}} appearing before the first
on its position in the grammar file relative to any on its position in the grammar file relative to any
@code{%union @{@var{code}@}}. @code{%union @{@var{code}@}}.
(Like all the Yacc prologue alternative directives, this directive is
experimental.
More user feedback will help to determine whether it should become a permanent
feature.)
@xref{Prologue Alternatives}. @xref{Prologue Alternatives}.
@end deffn @end deffn
@@ -8767,11 +8796,17 @@ Bison declaration to assign a precedence to a specific rule.
@deffn {Directive} %provides @{@var{code}@} @deffn {Directive} %provides @{@var{code}@}
This is the right place to write additional definitions you would like Bison to This is the right place to write additional definitions you would like Bison to
expose externally. expose externally.
For C/C++, this directive inserts your @var{code} both into the parser header That is, this directive inserts your @var{code} both into the parser header
@comment For C/C++, this directive inserts your @var{code} both into the parser header
file (if generated; @pxref{Table of Symbols, ,%defines}) and into the parser file (if generated; @pxref{Table of Symbols, ,%defines}) and into the parser
code file after Bison's required definitions. code file after Bison's required definitions.
For Java, it inserts your @var{code} into the parser java file after the parser @comment For Java, it inserts your @var{code} into the parser java file after the parser
class. @comment class.
(Like all the Yacc prologue alternative directives, this directive is
experimental.
More user feedback will help to determine whether it should become a permanent
feature.)
@xref{Prologue Alternatives}. @xref{Prologue Alternatives}.
@end deffn @end deffn
@@ -8789,12 +8824,13 @@ Require a Version of Bison}.
@deffn {Directive} %requires @{@var{code}@} @deffn {Directive} %requires @{@var{code}@}
This is the right place to write dependency code for externally exposed This is the right place to write dependency code for externally exposed
definitions required by Bison. definitions required by Bison.
For C/C++, such exposed definitions are those usually appearing in the parser Such exposed definitions are those usually appearing in the parser
@comment For C/C++, such exposed definitions are those usually appearing in the parser
header file. header file.
Thus, this is the right place to define types referenced in Thus, this is the right place to define types referenced in
@code{%union @{@var{code}@}} directives, and it is the right place to override @code{%union @{@var{code}@}} directives, and it is the right place to override
Bison's default @code{YYSTYPE} and @code{YYLTYPE} definitions. Bison's default @code{YYSTYPE} and @code{YYLTYPE} definitions.
For Java, this is the right place to write import directives. @comment For Java, this is the right place to write import directives.
@cindex Prologue @cindex Prologue
@findex %union @findex %union
@@ -8806,6 +8842,11 @@ Unlike @code{%@{@var{code}%@}}, @code{%requires @{@var{code}@}} inserts your
generated; @pxref{Table of Symbols, ,%defines}) since Bison's required generated; @pxref{Table of Symbols, ,%defines}) since Bison's required
definitions should depend on it in both places. definitions should depend on it in both places.
(Like all the Yacc prologue alternative directives, this directive is
experimental.
More user feedback will help to determine whether it should become a permanent
feature.)
@xref{Prologue Alternatives}. @xref{Prologue Alternatives}.
@end deffn @end deffn