@}
@end group
@group
- | '-' exp %preg NEG @{ $$ = -$2; @}
+ | '-' exp %prec NEG @{ $$ = -$2; @}
| exp '^' exp @{ $$ = pow ($1, $3); @}
| '(' exp ')' @{ $$ = $2; @}
@end group
@findex %requires
@findex %provides
@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
inflexible.
As an alternative, Bison provides a set of more explicit directives:
per-symbol @code{%destructor}.
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
exactly one @code{%destructor} declaration in your grammar file.
The parser will invoke the @var{code} associated with one of these whenever it
@xref{Table of Symbols, ,%requires}.
@end deffn
+@deffn {Directive} %defines @var{defines-file}
+Same as above, but save in the file @var{defines-file}.
+@end deffn
+
@deffn {Directive} %destructor
Specify how the parser should reclaim the memory associated to
discarded symbols. @xref{Destructor Decl, , Freeing Discarded Symbols}.
@end deffn
-@deffn {Directive} %file-prefix="@var{prefix}"
+@deffn {Directive} %file-prefix "@var{prefix}"
Specify a prefix to use for all Bison output file names. The names are
chosen as if the input file were named @file{@var{prefix}.y}.
@end deffn
accurate syntax error messages.
@end deffn
-@deffn {Directive} %name-prefix="@var{prefix}"
+@deffn {Directive} %name-prefix "@var{prefix}"
Rename the external symbols used in the parser so that they start with
@var{prefix} instead of @samp{yy}. The precise list of symbols renamed
in C parsers
is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yynerrs},
@code{yylval}, @code{yychar}, @code{yydebug}, and
(if locations are used) @code{yylloc}. For example, if you use
-@samp{%name-prefix="c_"}, the names become @code{c_parse}, @code{c_lex},
+@samp{%name-prefix "c_"}, the names become @code{c_parse}, @code{c_lex},
and so on. In C++ parsers, it is only the surrounding namespace which is
named @var{prefix} instead of @samp{yy}.
@xref{Multiple Parsers, ,Multiple Parsers in the Same Program}.
file in its own right.
@end deffn
-@deffn {Directive} %output="@var{file}"
+@deffn {Directive} %output "@var{file}"
Specify @var{file} for the parser file.
@end deffn
@item -p @var{prefix}
@itemx --name-prefix=@var{prefix}
-Pretend that @code{%name-prefix="@var{prefix}"} was specified.
+Pretend that @code{%name-prefix "@var{prefix}"} was specified.
@xref{Decl Summary}.
@item -l
@node C++ Semantic Values
@subsection C++ Semantic Values
@c - No objects in unions
-@c - YSTYPE
+@c - YYSTYPE
@c - Printer and destructor
The @code{%union} directive works as for C, see @ref{Union Decl, ,The
@deffn {Directive} <*>
Used to define a default tagged @code{%destructor} or default tagged
@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}.
@end deffn
@deffn {Directive} <>
Used to define a default tagless @code{%destructor} or default tagless
@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}.
@end deffn
@deffn {Directive} %code @{@var{code}@}
Other than semantic actions, this is probably the most common place you should
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.
-For Java, it inserts code into the parser class.
+@comment For Java, it inserts code into the parser class.
@cindex Prologue
@findex %union
Specifically, @code{%code @{@var{code}@}} always inserts your @var{code} into
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}.
@end deffn
@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.
For example:
@}
@end smallexample
-@noindent
-For Java, @code{%code-top @{@var{code}@}} is currently unused.
+@comment @noindent
+@comment For Java, @code{%code-top @{@var{code}@}} is currently unused.
@cindex Prologue
@findex %union
on its position in the grammar file relative to any
@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}.
@end deffn
@xref{Decl Summary}.
@end deffn
+@deffn {Directive} %defines @var{defines-file}
+Same as above, but save in the file @var{defines-file}.
+@xref{Decl Summary}.
+@end deffn
+
@deffn {Directive} %destructor
Specify how the parser should reclaim the memory associated to
discarded symbols. @xref{Destructor Decl, , Freeing Discarded Symbols}.
when @code{yyerror} is called.
@end deffn
-@deffn {Directive} %file-prefix="@var{prefix}"
+@deffn {Directive} %file-prefix "@var{prefix}"
Bison declaration to set the prefix of the output files. @xref{Decl
Summary}.
@end deffn
@xref{GLR Parsers, ,Writing @acronym{GLR} Parsers}.
@end deffn
-@deffn {Directive} %name-prefix="@var{prefix}"
+@deffn {Directive} %name-prefix "@var{prefix}"
Bison declaration to rename the external symbols. @xref{Decl Summary}.
@end deffn
@xref{Precedence Decl, ,Operator Precedence}.
@end deffn
-@deffn {Directive} %output="@var{file}"
+@deffn {Directive} %output "@var{file}"
Bison declaration to set the name of the parser file. @xref{Decl
Summary}.
@end deffn
@deffn {Directive} %provides @{@var{code}@}
This is the right place to write additional definitions you would like Bison to
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
code file after Bison's required definitions.
-For Java, it inserts your @var{code} into the parser java file after the parser
-class.
+@comment For Java, it inserts your @var{code} into the parser java file after the parser
+@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}.
@end deffn
@deffn {Directive} %requires @{@var{code}@}
This is the right place to write dependency code for externally exposed
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.
Thus, this is the right place to define types referenced in
@code{%union @{@var{code}@}} directives, and it is the right place to override
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
@findex %union
generated; @pxref{Table of Symbols, ,%defines}) since Bison's required
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}.
@end deffn
@c LocalWords: pre STDC GNUC endif yy YY alloca lf stddef stdlib YYDEBUG
@c LocalWords: NUM exp subsubsection kbd Ctrl ctype EOF getchar isdigit
@c LocalWords: ungetc stdin scanf sc calc ulator ls lm cc NEG prec yyerrok
-@c LocalWords: longjmp fprintf stderr preg yylloc YYLTYPE cos ln
+@c LocalWords: longjmp fprintf stderr yylloc YYLTYPE cos ln
@c LocalWords: smallexample symrec val tptr FNCT fnctptr func struct sym
@c LocalWords: fnct putsym getsym fname arith fncts atan ptr malloc sizeof
@c LocalWords: strlen strcpy fctn strcmp isalpha symbuf realloc isalnum
@c LocalWords: ptypes itype YYPRINT trigraphs yytname expseq vindex dtype
-@c LocalWords: Rhs YYRHSLOC LE nonassoc op deffn typeless typefull yynerrs
+@c LocalWords: Rhs YYRHSLOC LE nonassoc op deffn typeless yynerrs
@c LocalWords: yychar yydebug msg YYNTOKENS YYNNTS YYNRULES YYNSTATES
@c LocalWords: cparse clex deftypefun NE defmac YYACCEPT YYABORT param
@c LocalWords: strncmp intval tindex lvalp locp llocp typealt YYBACKUP
@c LocalWords: hexflag STR exdent itemset asis DYYDEBUG YYFPRINTF args
@c LocalWords: infile ypp yxx outfile itemx tex leaderfill
@c LocalWords: hbox hss hfill tt ly yyin fopen fclose ofirst gcc ll
-@c LocalWords: yyrestart nbar yytext fst snd osplit ntwo strdup AST
+@c LocalWords: nbar yytext fst snd osplit ntwo strdup AST
@c LocalWords: YYSTACK DVI fdl printindex