X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/15e46f2df4623a5a4b2c2f50a1be20947a7e3099..2d404819d0e4041bade235660b28a6541c5379d5:/doc/bison.texinfo?ds=inline diff --git a/doc/bison.texinfo b/doc/bison.texinfo index 915c8111..3bb41ab0 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -33,7 +33,7 @@ This manual (@value{UPDATED}) is for GNU Bison (version @value{VERSION}), the GNU parser generator. -Copyright @copyright{} 1988-1993, 1995, 1998-2011 Free Software +Copyright @copyright{} 1988-1993, 1995, 1998-2012 Free Software Foundation, Inc. @quotation @@ -125,7 +125,7 @@ The Concepts of Bison the name of an identifier, etc.). * Semantic Actions:: Each rule can have an action containing C code. * GLR Parsers:: Writing parsers for general context-free languages. -* Locations Overview:: Tracking Locations. +* Locations:: Overview of location tracking. * Bison Parser:: What are Bison's input and output, how is the output used? * Stages:: Stages in writing and running Bison grammars. @@ -181,14 +181,15 @@ Multi-Function Calculator: @code{mfcalc} Bison Grammar Files -* Grammar Outline:: Overall layout of the grammar file. -* Symbols:: Terminal and nonterminal symbols. -* Rules:: How to write grammar rules. -* Recursion:: Writing recursive rules. -* Semantics:: Semantic values and actions. -* Locations:: Locations and actions. -* Declarations:: All kinds of Bison declarations are described here. -* Multiple Parsers:: Putting more than one Bison parser in one program. +* Grammar Outline:: Overall layout of the grammar file. +* Symbols:: Terminal and nonterminal symbols. +* Rules:: How to write grammar rules. +* Recursion:: Writing recursive rules. +* Semantics:: Semantic values and actions. +* Tracking Locations:: Locations and actions. +* Named References:: Using named references in actions. +* Declarations:: All kinds of Bison declarations are described here. +* Multiple Parsers:: Putting more than one Bison parser in one program. Outline of a Bison Grammar @@ -207,7 +208,6 @@ Defining Language Semantics * Mid-Rule Actions:: Most actions go at the end of a rule. This says when, why and how to use the exceptional action in the middle of a rule. -* Named References:: Using named references in actions. Tracking Locations @@ -451,7 +451,7 @@ use Bison or Yacc, we suggest you start by reading this chapter carefully. the name of an identifier, etc.). * Semantic Actions:: Each rule can have an action containing C code. * GLR Parsers:: Writing parsers for general context-free languages. -* Locations Overview:: Tracking Locations. +* Locations:: Overview of location tracking. * Bison Parser:: What are Bison's input and output, how is the output used? * Stages:: Stages in writing and running Bison grammars. @@ -1278,7 +1278,7 @@ will suffice. Otherwise, we suggest %@} @end example -@node Locations Overview +@node Locations @section Locations @cindex location @cindex textual location @@ -1290,9 +1290,10 @@ the @dfn{textual location}, or @dfn{location}, of each syntactic construct. Bison provides a mechanism for handling these locations. Each token has a semantic value. In a similar fashion, each token has an -associated location, but the type of locations is the same for all tokens and -groupings. Moreover, the output parser is equipped with a default data -structure for storing locations (@pxref{Locations}, for more details). +associated location, but the type of locations is the same for all tokens +and groupings. Moreover, the output parser is equipped with a default data +structure for storing locations (@pxref{Tracking Locations}, for more +details). Like semantic values, locations can be reached in actions using a dedicated set of constructs. In the example above, the location of the whole grouping @@ -2695,14 +2696,15 @@ The Bison grammar file conventionally has a name ending in @samp{.y}. @xref{Invocation, ,Invoking Bison}. @menu -* Grammar Outline:: Overall layout of the grammar file. -* Symbols:: Terminal and nonterminal symbols. -* Rules:: How to write grammar rules. -* Recursion:: Writing recursive rules. -* Semantics:: Semantic values and actions. -* Locations:: Locations and actions. -* Declarations:: All kinds of Bison declarations are described here. -* Multiple Parsers:: Putting more than one Bison parser in one program. +* Grammar Outline:: Overall layout of the grammar file. +* Symbols:: Terminal and nonterminal symbols. +* Rules:: How to write grammar rules. +* Recursion:: Writing recursive rules. +* Semantics:: Semantic values and actions. +* Tracking Locations:: Locations and actions. +* Named References:: Using named references in actions. +* Declarations:: All kinds of Bison declarations are described here. +* Multiple Parsers:: Putting more than one Bison parser in one program. @end menu @node Grammar Outline @@ -3462,7 +3464,6 @@ the numbers associated with @var{x} and @var{y}. * Mid-Rule Actions:: Most actions go at the end of a rule. This says when, why and how to use the exceptional action in the middle of a rule. -* Named References:: Using named references in actions. @end menu @node Value Type @@ -3583,8 +3584,8 @@ the addition-expression just recognized by the rule. If there were a useful semantic value associated with the @samp{+} token, it could be referred to as @code{$2}. -@xref{Named References,,Using Named References}, for more information -about using the named references construct. +@xref{Named References}, for more information about using the named +references construct. Note that the vertical-bar character @samp{|} is really a rule separator, and actions are attached to a single rule. This is a @@ -3880,94 +3881,7 @@ compound: subroutine Now Bison can execute the action in the rule for @code{subroutine} without deciding which rule for @code{compound} it will eventually use. -@node Named References -@subsection Using Named References -@cindex named references - -While every semantic value can be accessed with positional references -@code{$@var{n}} and @code{$$}, it's often much more convenient to refer to -them by name. First of all, original symbol names may be used as named -references. For example: - -@example -@group -invocation: op '(' args ')' - @{ $invocation = new_invocation ($op, $args, @@invocation); @} -@end group -@end example - -@noindent -The positional @code{$$}, @code{@@$}, @code{$n}, and @code{@@n} can be -mixed with @code{$name} and @code{@@name} arbitrarily. For example: - -@example -@group -invocation: op '(' args ')' - @{ $$ = new_invocation ($op, $args, @@$); @} -@end group -@end example - -@noindent -However, sometimes regular symbol names are not sufficient due to -ambiguities: - -@example -@group -exp: exp '/' exp - @{ $exp = $exp / $exp; @} // $exp is ambiguous. - -exp: exp '/' exp - @{ $$ = $1 / $exp; @} // One usage is ambiguous. - -exp: exp '/' exp - @{ $$ = $1 / $3; @} // No error. -@end group -@end example - -@noindent -When ambiguity occurs, explicitly declared names may be used for values and -locations. Explicit names are declared as a bracketed name after a symbol -appearance in rule definitions. For example: -@example -@group -exp[result]: exp[left] '/' exp[right] - @{ $result = $left / $right; @} -@end group -@end example - -@noindent -Explicit names may be declared for RHS and for LHS symbols as well. In order -to access a semantic value generated by a mid-rule action, an explicit name -may also be declared by putting a bracketed name after the closing brace of -the mid-rule action code: -@example -@group -exp[res]: exp[x] '+' @{$left = $x;@}[left] exp[right] - @{ $res = $left + $right; @} -@end group -@end example - -@noindent - -In references, in order to specify names containing dots and dashes, an explicit -bracketed syntax @code{$[name]} and @code{@@[name]} must be used: -@example -@group -if-stmt: IF '(' expr ')' THEN then.stmt ';' - @{ $[if-stmt] = new_if_stmt ($expr, $[then.stmt]); @} -@end group -@end example - -It often happens that named references are followed by a dot, dash or other -C punctuation marks and operators. By default, Bison will read -@code{$name.suffix} as a reference to symbol value @code{$name} followed by -@samp{.suffix}, i.e., an access to the @samp{suffix} field of the semantic -value. In order to force Bison to recognize @code{name.suffix} in its entirety -as the name of a semantic value, bracketed syntax @code{$[name.suffix]} -must be used. - - -@node Locations +@node Tracking Locations @section Tracking Locations @cindex location @cindex textual location @@ -4037,8 +3951,8 @@ The location of the @var{n}th component of the right hand side is In addition, the named references construct @code{@@@var{name}} and @code{@@[@var{name}]} may also be used to address the symbol locations. -@xref{Named References,,Using Named References}, for more information -about using the named references construct. +@xref{Named References}, for more information about using the named +references construct. Here is a basic example using the default data type for locations: @@ -4175,6 +4089,99 @@ macro should expand to something that can be used as a single statement when it is followed by a semicolon. @end itemize +@node Named References +@section Named References +@cindex named references + +As described in the preceding sections, the traditional way to refer to any +semantic value or location is a @dfn{positional reference}, which takes the +form @code{$@var{n}}, @code{$$}, @code{@@@var{n}}, and @code{@@$}. However, +such a reference is not very descriptive. Moreover, if you later decide to +insert or remove symbols in the right-hand side of a grammar rule, the need +to renumber such references can be tedious and error-prone. + +To avoid these issues, you can also refer to a semantic value or location +using a @dfn{named reference}. First of all, original symbol names may be +used as named references. For example: + +@example +@group +invocation: op '(' args ')' + @{ $invocation = new_invocation ($op, $args, @@invocation); @} +@end group +@end example + +@noindent +Positional and named references can be mixed arbitrarily. For example: + +@example +@group +invocation: op '(' args ')' + @{ $$ = new_invocation ($op, $args, @@$); @} +@end group +@end example + +@noindent +However, sometimes regular symbol names are not sufficient due to +ambiguities: + +@example +@group +exp: exp '/' exp + @{ $exp = $exp / $exp; @} // $exp is ambiguous. + +exp: exp '/' exp + @{ $$ = $1 / $exp; @} // One usage is ambiguous. + +exp: exp '/' exp + @{ $$ = $1 / $3; @} // No error. +@end group +@end example + +@noindent +When ambiguity occurs, explicitly declared names may be used for values and +locations. Explicit names are declared as a bracketed name after a symbol +appearance in rule definitions. For example: +@example +@group +exp[result]: exp[left] '/' exp[right] + @{ $result = $left / $right; @} +@end group +@end example + +@noindent +In order to access a semantic value generated by a mid-rule action, an +explicit name may also be declared by putting a bracketed name after the +closing brace of the mid-rule action code: +@example +@group +exp[res]: exp[x] '+' @{$left = $x;@}[left] exp[right] + @{ $res = $left + $right; @} +@end group +@end example + +@noindent + +In references, in order to specify names containing dots and dashes, an explicit +bracketed syntax @code{$[name]} and @code{@@[name]} must be used: +@example +@group +if-stmt: IF '(' expr ')' THEN then.stmt ';' + @{ $[if-stmt] = new_if_stmt ($expr, $[then.stmt]); @} +@end group +@end example + +It often happens that named references are followed by a dot, dash or other +C punctuation marks and operators. By default, Bison will read +@samp{$name.suffix} as a reference to symbol value @code{$name} followed by +@samp{.suffix}, i.e., an access to the @code{suffix} field of the semantic +value. In order to force Bison to recognize @samp{name.suffix} in its +entirety as the name of a semantic value, the bracketed syntax +@samp{$[name.suffix]} must be used. + +The named references feature is experimental. More user feedback will help +to stabilize it. + @node Declarations @section Bison Declarations @cindex declarations, Bison @@ -4621,12 +4628,12 @@ redefine it from @code{$end} to, for example, @code{END}: @cindex mid-rule actions Finally, Bison will never invoke a @code{%destructor} for an unreferenced mid-rule semantic value (@pxref{Mid-Rule Actions,,Actions in Mid-Rule}). -That is, Bison does not consider a mid-rule to have a semantic value if you do -not reference @code{$$} in the mid-rule's action or @code{$@var{n}} (where -@var{n} is the RHS symbol position of the mid-rule) in any later action in that -rule. -However, if you do reference either, the Bison-generated parser will invoke the -@code{<>} @code{%destructor} whenever it discards the mid-rule symbol. +That is, Bison does not consider a mid-rule to have a semantic value if you +do not reference @code{$$} in the mid-rule's action or @code{$@var{n}} +(where @var{n} is the right-hand side symbol position of the mid-rule) in +any later action in that rule. However, if you do reference either, the +Bison-generated parser will invoke the @code{<>} @code{%destructor} whenever +it discards the mid-rule symbol. @ignore @noindent @@ -4992,9 +4999,8 @@ Unless your parser is pure, the parser header file declares (Reentrant) Parser}. If you have also used locations, the parser header file declares -@code{YYLTYPE} and @code{yylloc} using a protocol similar to that of -the @code{YYSTYPE} macro and @code{yylval}. @xref{Locations, -,Tracking Locations}. +@code{YYLTYPE} and @code{yylloc} using a protocol similar to that of the +@code{YYSTYPE} macro and @code{yylval}. @xref{Tracking Locations}. This parser header file is normally essential if you wish to put the definition of @code{yylex} in a separate source file, because @@ -5368,11 +5374,11 @@ contain default reductions. @xref{Default Reductions}. (The ability to specify where default reductions should be used is experimental. More user feedback will help to stabilize it.) -@item Accepted Values: @code{full}, @code{consistent}, @code{accepting} +@item Accepted Values: @code{most}, @code{consistent}, @code{accepting} @item Default Value: @itemize @item @code{accepting} if @code{lr.type} is @code{canonical-lr}. -@item @code{full} otherwise. +@item @code{most} otherwise. @end itemize @end itemize @@ -5996,12 +6002,12 @@ then the code in @code{yylex} might look like this: @subsection Textual Locations of Tokens @vindex yylloc -If you are using the @samp{@@@var{n}}-feature (@pxref{Locations, , -Tracking Locations}) in actions to keep track of the textual locations -of tokens and groupings, then you must provide this information in -@code{yylex}. The function @code{yyparse} expects to find the textual -location of a token just parsed in the global variable @code{yylloc}. -So @code{yylex} must store the proper data in that variable. +If you are using the @samp{@@@var{n}}-feature (@pxref{Tracking Locations}) +in actions to keep track of the textual locations of tokens and groupings, +then you must provide this information in @code{yylex}. The function +@code{yyparse} expects to find the textual location of a token just parsed +in the global variable @code{yylloc}. So @code{yylex} must store the proper +data in that variable. By default, the value of @code{yylloc} is a structure and you need only initialize the members that are going to be used by the actions. The @@ -6338,9 +6344,9 @@ Actions}). @deffn {Value} @@$ @findex @@$ -Acts like a structure variable containing information on the textual location -of the grouping made by the current rule. @xref{Locations, , -Tracking Locations}. +Acts like a structure variable containing information on the textual +location of the grouping made by the current rule. @xref{Tracking +Locations}. @c Check if those paragraphs are still useful or not. @@ -6364,9 +6370,9 @@ Tracking Locations}. @deffn {Value} @@@var{n} @findex @@@var{n} -Acts like a structure variable containing information on the textual location -of the @var{n}th component of the current rule. @xref{Locations, , -Tracking Locations}. +Acts like a structure variable containing information on the textual +location of the @var{n}th component of the current rule. @xref{Tracking +Locations}. @end deffn @node Internationalization @@ -7449,7 +7455,7 @@ To adjust which states have default reductions enabled, use the Specify the kind of states that are permitted to contain default reductions. The accepted values of @var{WHERE} are: @itemize -@item @code{full} (default for LALR and IELR) +@item @code{most} (default for LALR and IELR) @item @code{consistent} @item @code{accepting} (default for canonical LR) @end itemize @@ -7562,10 +7568,9 @@ never physically copied. In our experience, the performance penalty of LAC has proven insignificant for practical grammars. @end itemize -While the basic premise behind LAC has been recognized in the parser -community for years, for the first publication that uses the term LAC and -that discusses Bison's LAC implementation, @pxref{Bibliography,,Denny 2010 -May}. +While the LAC algorithm shares techniques that have been recognized in the +parser community for years, for the publication that introduces LAC, +@pxref{Bibliography,,Denny 2010 May}. @node Unreachable States @subsection Unreachable States @@ -8740,10 +8745,24 @@ These warnings are not enabled by default since they sometimes prove to be false alarms in existing grammars employing the Yacc constructs @code{$0} or @code{$-@var{n}} (where @var{n} is some positive integer). - @item yacc Incompatibilities with POSIX Yacc. +@item conflicts-sr +@itemx conflicts-rr +S/R and R/R conflicts. These warnings are enabled by default. However, if +the @code{%expect} or @code{%expect-rr} directive is specified, an +unexpected number of conflicts is an error, and an expected number of +conflicts is not reported, so @option{-W} and @option{--warning} then have +no effect on the conflict report. + +@item other +All warnings not categorized above. These warnings are enabled by default. + +This category is provided merely for the sake of completeness. Future +releases of Bison may move warnings from this category to new, more specific +categories. + @item all All the warnings. @item none @@ -9157,10 +9176,10 @@ is some time and/or some talented C++ hacker willing to contribute to Bison. @c - %define filename_type "const symbol::Symbol" When the directive @code{%locations} is used, the C++ parser supports -location tracking, see @ref{Locations, , Locations Overview}. Two -auxiliary classes define a @code{position}, a single point in a file, -and a @code{location}, a range composed of a pair of -@code{position}s (possibly spanning several files). +location tracking, see @ref{Tracking Locations}. Two auxiliary classes +define a @code{position}, a single point in a file, and a @code{location}, a +range composed of a pair of @code{position}s (possibly spanning several +files). @deftypemethod {position} {std::string*} file The name of the file. It will always be handled as a pointer, the @@ -10081,14 +10100,13 @@ can be used to print the semantic values. This however may change @c - class Position @c - class Location -When the directive @code{%locations} is used, the Java parser -supports location tracking, see @ref{Locations, , Locations Overview}. -An auxiliary user-defined class defines a @dfn{position}, a single point -in a file; Bison itself defines a class representing a @dfn{location}, -a range composed of a pair of positions (possibly spanning several -files). The location class is an inner class of the parser; the name -is @code{Location} by default, and may also be renamed using -@samp{%define location_type "@var{class-name}"}. +When the directive @code{%locations} is used, the Java parser supports +location tracking, see @ref{Tracking Locations}. An auxiliary user-defined +class defines a @dfn{position}, a single point in a file; Bison itself +defines a class representing a @dfn{location}, a range composed of a pair of +positions (possibly spanning several files). The location class is an inner +class of the parser; the name is @code{Location} by default, and may also be +renamed using @samp{%define location_type "@var{class-name}"}. The location class treats the position as a completely opaque value. By default, the class name is @code{Position}, but this can be changed @@ -10972,22 +10990,22 @@ See @url{http://lists.gnu.org/}. @deffn {Variable} @@$ In an action, the location of the left-hand side of the rule. -@xref{Locations, , Locations Overview}. +@xref{Tracking Locations}. @end deffn @deffn {Variable} @@@var{n} -In an action, the location of the @var{n}-th symbol of the right-hand -side of the rule. @xref{Locations, , Locations Overview}. +In an action, the location of the @var{n}-th symbol of the right-hand side +of the rule. @xref{Tracking Locations}. @end deffn @deffn {Variable} @@@var{name} -In an action, the location of a symbol addressed by name. -@xref{Locations, , Locations Overview}. +In an action, the location of a symbol addressed by name. @xref{Tracking +Locations}. @end deffn @deffn {Variable} @@[@var{name}] -In an action, the location of a symbol addressed by name. -@xref{Locations, , Locations Overview}. +In an action, the location of a symbol addressed by name. @xref{Tracking +Locations}. @end deffn @deffn {Variable} $$