@value{VERSION}), the @acronym{GNU} parser generator.
Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1998,
-1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software
-Foundation, Inc.
+1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free
+Software Foundation, Inc.
@quotation
Permission is granted to copy, distribute and/or modify this document
equivalent groupings. The symbol name is used in writing grammar rules.
By convention, it should be all lower case.
-Symbol names can contain letters, digits (not at the beginning),
-underscores and periods. Periods make sense only in nonterminals.
+Symbol names can contain letters, underscores, period, and (not at the
+beginning) digits and dashes. Dashes in symbol names are a GNU
+extension, incompatible with @acronym{POSIX} Yacc. Terminal symbols
+that contain periods or dashes make little sense: since they are not
+valid symbols (in most programming languages) they are not exported as
+token names.
There are three ways of writing terminal symbols in the grammar:
@end deffn
@deffn {Directive} %debug
-In the parser file, define the macro @code{YYDEBUG} to 1 if it is not
-already defined, so that the debugging facilities are compiled.
-@end deffn
+Instrument the output parser for traces. Obsoleted by @samp{%define
+parse.trace}.
@xref{Tracing, ,Tracing Your Parser}.
+@end deffn
@deffn {Directive} %define @var{variable}
@deffnx {Directive} %define @var{variable} "@var{value}"
Some of the accepted @var{variable}s are:
-@itemize @bullet
+@table @code
@item api.pure
@findex %define api.pure
@item Default Value: @code{"false"}
@end itemize
+@c api.pure
@item api.push_pull
@findex %define api.push_pull
@item Default Value: @code{"pull"}
@end itemize
+@c api.push_pull
+
+@item error-verbose
+@findex %define error-verbose
+@itemize
+@item Languages(s):
+all.
+@item Purpose:
+Enable the generation of more verbose error messages than a instead of
+just plain @w{@code{"syntax error"}}. @xref{Error Reporting, ,The Error
+Reporting Function @code{yyerror}}.
+@item Accepted Values:
+Boolean
+@item Default Value:
+@code{false}
+@end itemize
+@c error-verbose
+
@item lr.keep_unreachable_states
@findex %define lr.keep_unreachable_states
However, Bison does not compute which goto actions are useless.
@end itemize
@end itemize
+@c lr.keep_unreachable_states
@item namespace
@findex %define namespace
The parser namespace is @code{foo} and @code{yylex} is referenced as
@code{bar::lex}.
@end itemize
+@c namespace
+
+@item parse.assert
+@findex %define parse.assert
+
+@itemize
+@item Languages(s): C++
+
+@item Purpose: Issue runtime assertions to catch invalid uses.
+In C++, when variants are used, symbols must be constructed and
+destroyed properly. This option checks these constraints.
+
+@item Accepted Values: Boolean
+
+@item Default Value: @code{false}
@end itemize
+@c parse.assert
+
+@item parse.trace
+@findex %define parse.trace
+
+@itemize
+@item Languages(s): C, C++
+
+@item Purpose: Require parser instrumentation for tracing.
+In C/C++, define the macro @code{YYDEBUG} to 1 in the parser file if it
+is not already defined, so that the debugging facilities are compiled.
+@xref{Tracing, ,Tracing Your Parser}.
+
+@item Accepted Values: Boolean
+@item Default Value: @code{false}
+@end itemize
+@end table
+@c parse.trace
@end deffn
+@c %define
@deffn {Directive} %defines
Write a header file containing macro definitions for the token type
receives one argument. For a syntax error, the string is normally
@w{@code{"syntax error"}}.
-@findex %error-verbose
-If you invoke the directive @code{%error-verbose} in the Bison
+@findex %define error-verbose
+If you invoke the directive @code{%define error-verbose} in the Bison
declarations section (@pxref{Bison Declarations, ,The Bison Declarations
Section}), then Bison provides a more verbose and specific error message
string instead of just plain @w{@code{"syntax error"}}.
@item the directive @samp{%debug}
@findex %debug
-Add the @code{%debug} directive (@pxref{Decl Summary, ,Bison
-Declaration Summary}). This is a Bison extension, which will prove
-useful when Bison will output parsers for languages that don't use a
-preprocessor. Unless @acronym{POSIX} and Yacc portability matter to
-you, this is
-the preferred solution.
+Add the @code{%debug} directive (@pxref{Decl Summary, ,Bison Declaration
+Summary}). This Bison extension is maintained for backward
+compatibility with previous versions of Bison.
+
+@item the variable @samp{parse.trace}
+@findex %define parse.trace
+Add the @samp{%define parse.trace} directive (@pxref{Decl Summary,
+,Bison Declaration Summary}), or pass the @option{-Dparse.trace} option
+(@pxref{Bison Options}). This is a Bison extension, which is especially
+useful for languages that don't use a preprocessor. Unless
+@acronym{POSIX} and Yacc portability matter to you, this is the
+preferred solution.
@end table
-We suggest that you always enable the debug option so that debugging is
+We suggest that you always enable the trace option so that debugging is
always possible.
The trace facility outputs messages with macro calls of the form
like @samp{%glr-parser}, Bison might not be Yacc-compatible even if
this option is specified.
-@item -W
-@itemx --warnings
+@item -W [@var{category}]
+@itemx --warnings[=@var{category}]
Output warnings falling in @var{category}. @var{category} can be one
of:
@table @code
@comment file: calc++-parser.yy
@example
-%debug
-%error-verbose
+%define parse.trace
+%define error-verbose
@end example
@noindent
@code{%defines} directive or the @option{-d}/@option{--defines} options.
@c FIXME: Possible code change.
-Currently, support for debugging is always compiled
-in. Thus the @code{%debug} and @code{%token-table} directives and the
+Currently, support for tracing is always compiled
+in. Thus the @samp{%define parse.trace} and @samp{%token-table}
+directives and the
@option{-t}/@option{--debug} and @option{-k}/@option{--token-table}
options have no effect. This may change in the future to eliminate
-unused code in the generated parser, so use @code{%debug} explicitly
+unused code in the generated parser, so use @samp{%define parse.trace}
+explicitly
if needed. Also, in the future the
@code{%token-table} directive might enable a public interface to
access the token names and codes.
@deftypemethod {YYParser} {boolean} getErrorVerbose ()
@deftypemethodx {YYParser} {void} setErrorVerbose (boolean @var{verbose})
Get or set the option to produce verbose error messages. These are only
-available with the @code{%error-verbose} directive, which also turn on
+available with the @code{%define error-verbose} directive, which also turn on
verbose error messages.
@end deftypemethod
Equip the parser for debugging. @xref{Decl Summary}.
@end deffn
-@deffn {Directive} %debug
-Equip the parser for debugging. @xref{Decl Summary}.
-@end deffn
-
@ifset defaultprec
@deffn {Directive} %default-prec
Assign a precedence to rules that lack an explicit @samp{%prec}
@end deffn
@deffn {Directive} %error-verbose
-Bison declaration to request verbose, specific error message strings
-when @code{yyerror} is called.
+An obsolete directive standing for @samp{%define error-verbose}.
@end deffn
@deffn {Directive} %file-prefix "@var{prefix}"
@deffn {Function} yyerror
User-supplied function to be called by @code{yyparse} on error.
-@xref{Error Reporting, ,The Error
-Reporting Function @code{yyerror}}.
+@xref{Error Reporting, ,The Error Reporting Function @code{yyerror}}.
@end deffn
@deffn {Macro} YYERROR_VERBOSE
-An obsolete macro that you define with @code{#define} in the prologue
-to request verbose, specific error message strings
-when @code{yyerror} is called. It doesn't matter what definition you
-use for @code{YYERROR_VERBOSE}, just whether you define it. Using
-@code{%error-verbose} is preferred.
+An obsolete macro used in the @file{yacc.c} skeleton, that you define
+with @code{#define} in the prologue to request verbose, specific error
+message strings when @code{yyerror} is called. It doesn't matter what
+definition you use for @code{YYERROR_VERBOSE}, just whether you define
+it. Using @code{%define error-verbose} is preferred (@pxref{Error
+Reporting, ,The Error Reporting Function @code{yyerror}}).
@end deffn
@deffn {Macro} YYINITDEPTH