]> git.saurik.com Git - bison.git/blobdiff - doc/bison.texinfo
Do not let the scan-skel token buffer grow unboundedly in the usual case.
[bison.git] / doc / bison.texinfo
index aa6f9ee813ba9bbfaa2b43ca420bee67ce10cb4e..8cabdb63e2452014cff3ae5deaa30800a7c1749e 100644 (file)
@@ -119,7 +119,8 @@ Reference sections:
 * Copying This Manual::  License for copying this manual.
 * Index::             Cross-references to the text.
 
 * Copying This Manual::  License for copying this manual.
 * Index::             Cross-references to the text.
 
-@detailmenu --- The Detailed Node Listing ---
+@detailmenu
+ --- The Detailed Node Listing ---
 
 The Concepts of Bison
 
 
 The Concepts of Bison
 
@@ -130,6 +131,8 @@ The Concepts of Bison
                         a semantic value (the value of an integer,
                         the name of an identifier, etc.).
 * Semantic Actions::  Each rule can have an action containing C code.
                         a semantic value (the value of an integer,
                         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.
 * Bison Parser::      What are Bison's input and output,
                         how is the output used?
 * Stages::            Stages in writing and running Bison grammars.
 * Bison Parser::      What are Bison's input and output,
                         how is the output used?
 * Stages::            Stages in writing and running Bison grammars.
@@ -143,8 +146,8 @@ Examples
                         Operator precedence is introduced.
 * Simple Error Recovery::  Continuing after syntax errors.
 * Location Tracking Calc:: Demonstrating the use of @@@var{n} and @@$.
                         Operator precedence is introduced.
 * Simple Error Recovery::  Continuing after syntax errors.
 * Location Tracking Calc:: Demonstrating the use of @@@var{n} and @@$.
-* Multi-function Calc::    Calculator with memory and trig functions.
-                        It uses multiple data-types for semantic values.
+* Multi-function Calc::  Calculator with memory and trig functions.
+                           It uses multiple data-types for semantic values.
 * Exercises::         Ideas for improving the multi-function calculator.
 
 Reverse Polish Notation Calculator
 * Exercises::         Ideas for improving the multi-function calculator.
 
 Reverse Polish Notation Calculator
@@ -182,15 +185,16 @@ Bison Grammar Files
 * Rules::             How to write grammar rules.
 * Recursion::         Writing recursive rules.
 * Semantics::         Semantic values and actions.
 * 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.
 
 Outline of a Bison Grammar
 
 * 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
 
-* Prologue::          Syntax and usage of the prologue (declarations section).
+* Prologue::          Syntax and usage of the prologue.
 * Bison Declarations::  Syntax and usage of the Bison declarations section.
 * Grammar Rules::     Syntax and usage of the grammar rules section.
 * Bison Declarations::  Syntax and usage of the Bison declarations section.
 * Grammar Rules::     Syntax and usage of the grammar rules section.
-* Epilogue::          Syntax and usage of the epilogue (additional code section).
+* Epilogue::          Syntax and usage of the epilogue.
 
 Defining Language Semantics
 
 
 Defining Language Semantics
 
@@ -202,6 +206,12 @@ Defining Language Semantics
                       This says when, why and how to use the exceptional
                         action in the middle of a rule.
 
                       This says when, why and how to use the exceptional
                         action in the middle of a rule.
 
+Tracking Locations
+
+* Location Type::               Specifying a data type for locations.
+* Actions and Locations::       Using locations in actions.
+* Location Default Action::     Defining a general way to compute locations.
+
 Bison Declarations
 
 * Token Decl::        Declaring terminal symbols.
 Bison Declarations
 
 * Token Decl::        Declaring terminal symbols.
@@ -229,7 +239,7 @@ The Lexical Analyzer Function @code{yylex}
                         of the token it has read.
 * Token Positions::   How @code{yylex} must return the text position
                         (line number, etc.) of the token, if the
                         of the token it has read.
 * Token Positions::   How @code{yylex} must return the text position
                         (line number, etc.) of the token, if the
-                         actions want that.
+                        actions want that.
 * Pure Calling::      How the calling convention differs
                         in a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
 
 * Pure Calling::      How the calling convention differs
                         in a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
 
@@ -259,7 +269,7 @@ Handling Context Dependencies
 * Tie-in Recovery::   Lexical tie-ins have implications for how
                         error recovery rules must be written.
 
 * Tie-in Recovery::   Lexical tie-ins have implications for how
                         error recovery rules must be written.
 
-Understanding or Debugging Your Parser
+Debugging Your Parser
 
 * Understanding::     Understanding the structure of your parser.
 * Tracing::           Tracing the execution of your parser.
 
 * Understanding::     Understanding the structure of your parser.
 * Tracing::           Tracing the execution of your parser.
@@ -269,6 +279,7 @@ Invoking Bison
 * Bison Options::     All the options described in detail,
                         in alphabetical order by short options.
 * Option Cross Key::  Alphabetical list of long options.
 * Bison Options::     All the options described in detail,
                         in alphabetical order by short options.
 * Option Cross Key::  Alphabetical list of long options.
+* Yacc Library::      Yacc-compatible @code{yylex} and @code{main}.
 
 Frequently Asked Questions
 
 
 Frequently Asked Questions
 
@@ -3091,13 +3102,13 @@ When @code{YYLTYPE} is not defined, Bison uses a default structure type with
 four members:
 
 @example
 four members:
 
 @example
-struct
+typedef struct YYLTYPE
 @{
   int first_line;
   int first_column;
   int last_line;
   int last_column;
 @{
   int first_line;
   int first_column;
   int last_line;
   int last_column;
-@}
+@} YYLTYPE;
 @end example
 
 @node Actions and Locations
 @end example
 
 @node Actions and Locations
@@ -3175,17 +3186,23 @@ Actually, actions are not the best place to compute locations.  Since
 locations are much more general than semantic values, there is room in
 the output parser to redefine the default action to take for each
 rule.  The @code{YYLLOC_DEFAULT} macro is invoked each time a rule is
 locations are much more general than semantic values, there is room in
 the output parser to redefine the default action to take for each
 rule.  The @code{YYLLOC_DEFAULT} macro is invoked each time a rule is
-matched, before the associated action is run.
+matched, before the associated action is run.  It is also invoked
+while processing a syntax error, to compute the error's location.
 
 Most of the time, this macro is general enough to suppress location
 dedicated code from semantic actions.
 
 The @code{YYLLOC_DEFAULT} macro takes three parameters.  The first one is
 
 Most of the time, this macro is general enough to suppress location
 dedicated code from semantic actions.
 
 The @code{YYLLOC_DEFAULT} macro takes three parameters.  The first one is
-the location of the grouping (the result of the computation).  The second one
-is an array holding locations of all right hand side elements of the rule
-being matched.  The last one is the size of the right hand side rule.
+the location of the grouping (the result of the computation).  When a
+rule is matched, the second parameter is an array holding locations of
+all right hand side elements of the rule being matched, and the third
+parameter is the size of the rule's right hand side.  When processing
+a syntax error, the second parameter is an array holding locations of
+the symbols that were discarded during error processing, and the third
+parameter is the number of discarded symbols.
 
 
-By default, it is defined this way for simple @acronym{LALR}(1) parsers:
+By default, @code{YYLLOC_DEFAULT} is defined this way for simple
+@acronym{LALR}(1) parsers:
 
 @example
 @group
 
 @example
 @group
@@ -3406,7 +3423,23 @@ This says that the two alternative types are @code{double} and @code{symrec
 in the @code{%token} and @code{%type} declarations to pick one of the types
 for a terminal or nonterminal symbol (@pxref{Type Decl, ,Nonterminal Symbols}).
 
 in the @code{%token} and @code{%type} declarations to pick one of the types
 for a terminal or nonterminal symbol (@pxref{Type Decl, ,Nonterminal Symbols}).
 
-Note that, unlike making a @code{union} declaration in C, you do not write
+As an extension to @acronym{POSIX}, a tag is allowed after the
+@code{union}.  For example:
+
+@example
+@group
+%union value @{
+  double val;
+  symrec *tptr;
+@}
+@end group
+@end example
+
+specifies the union tag @code{value}, so the corresponding C type is
+@code{union value}.  If you do not specify a tag, it defaults to
+@code{YYSTYPE}.
+
+Note that, unlike making a @code{union} declaration in C, you need not write
 a semicolon after the closing brace.
 
 @node Type Decl
 a semicolon after the closing brace.
 
 @node Type Decl
@@ -3464,7 +3497,7 @@ should use @code{$$} to designate the semantic value associated to the
 (@pxref{Parser Function, , The Parser Function @code{yyparse}}).
 
 @strong{Warning:} as of Bison 1.875, this feature is still considered as
 (@pxref{Parser Function, , The Parser Function @code{yyparse}}).
 
 @strong{Warning:} as of Bison 1.875, this feature is still considered as
-experimental, as there was not enough users feedback.  In particular,
+experimental, as there was not enough user feedback.  In particular,
 the syntax might still change.
 @end deffn
 
 the syntax might still change.
 @end deffn
 
@@ -3742,7 +3775,8 @@ Request a pure (reentrant) parser program (@pxref{Pure Decl, ,A Pure
 Generate an array of token names in the parser file.  The name of the
 array is @code{yytname}; @code{yytname[@var{i}]} is the name of the
 token whose internal Bison token code number is @var{i}.  The first
 Generate an array of token names in the parser file.  The name of the
 array is @code{yytname}; @code{yytname[@var{i}]} is the name of the
 token whose internal Bison token code number is @var{i}.  The first
-three elements of @code{yytname} are always @code{"$end"},
+three elements of @code{yytname} correspond to the predefined tokens
+@code{"$end"},
 @code{"error"}, and @code{"$undefined"}; after these come the symbols
 defined in the grammar file.
 
 @code{"error"}, and @code{"$undefined"}; after these come the symbols
 defined in the grammar file.
 
@@ -3868,6 +3902,12 @@ Return immediately with value 0 (to report success).
 Return immediately with value 1 (to report failure).
 @end defmac
 
 Return immediately with value 1 (to report failure).
 @end defmac
 
+@c For now, do not document %lex-param and %parse-param, since it's
+@c not clear that the current behavior is stable enough.  For example,
+@c we may need to add %error-param.
+@clear documentparam
+
+@ifset documentparam
 If you use a reentrant parser, you can optionally pass additional
 parameter information to it in a reentrant way.  To do so, use the
 declaration @code{%parse-param}:
 If you use a reentrant parser, you can optionally pass additional
 parameter information to it in a reentrant way.  To do so, use the
 declaration @code{%parse-param}:
@@ -3875,8 +3915,8 @@ declaration @code{%parse-param}:
 @deffn {Directive} %parse-param @{@var{argument-declaration}@}
 @findex %parse-param
 Declare that an argument declared by @code{argument-declaration} is an
 @deffn {Directive} %parse-param @{@var{argument-declaration}@}
 @findex %parse-param
 Declare that an argument declared by @code{argument-declaration} is an
-additional @code{yyparse} argument.  This argument is also passed to
-@code{yyerror}.  The @var{argument-declaration} is used when declaring
+additional @code{yyparse} argument.
+The @var{argument-declaration} is used when declaring
 functions or prototypes.  The last identifier in
 @var{argument-declaration} must be the argument name.
 @end deffn
 functions or prototypes.  The last identifier in
 @var{argument-declaration} must be the argument name.
 @end deffn
@@ -3906,6 +3946,7 @@ In the grammar actions, use expressions like this to refer to the data:
 @example
 exp: @dots{}    @{ @dots{}; *randomness += 1; @dots{} @}
 @end example
 @example
 exp: @dots{}    @{ @dots{}; *randomness += 1; @dots{} @}
 @end example
+@end ifset
 
 
 @node Lexical
 
 
 @node Lexical
@@ -4112,6 +4153,7 @@ this case, omit the second argument; @code{yylex} will be called with
 only one argument.
 
 
 only one argument.
 
 
+@ifset documentparam
 If you wish to pass the additional parameter data to @code{yylex}, use
 @code{%lex-param} just like @code{%parse-param} (@pxref{Parser
 Function}).
 If you wish to pass the additional parameter data to @code{yylex}, use
 @code{%lex-param} just like @code{%parse-param} (@pxref{Parser
 Function}).
@@ -4152,6 +4194,7 @@ and finally, if both @code{%pure-parser} and @code{%locations} are used:
 int yylex   (YYSTYPE *lvalp, YYLTYPE *llocp, int *nastiness);
 int yyparse (int *nastiness, int *randomness);
 @end example
 int yylex   (YYSTYPE *lvalp, YYLTYPE *llocp, int *nastiness);
 int yyparse (int *nastiness, int *randomness);
 @end example
+@end ifset
 
 @node Error Reporting
 @section The Error Reporting Function @code{yyerror}
 
 @node Error Reporting
 @section The Error Reporting Function @code{yyerror}
@@ -4216,11 +4259,12 @@ void yyerror (char const *msg);                 /* Yacc parsers.  */
 void yyerror (YYLTYPE *locp, char const *msg);  /* GLR parsers.   */
 @end example
 
 void yyerror (YYLTYPE *locp, char const *msg);  /* GLR parsers.   */
 @end example
 
+@ifset documentparam
 If @samp{%parse-param @{int *nastiness@}} is used, then:
 
 @example
 If @samp{%parse-param @{int *nastiness@}} is used, then:
 
 @example
-void yyerror (int *randomness, char const *msg);  /* Yacc parsers.  */
-void yyerror (int *randomness, char const *msg);  /* GLR parsers.   */
+void yyerror (int *nastiness, char const *msg);  /* Yacc parsers.  */
+void yyerror (int *nastiness, char const *msg);  /* GLR parsers.   */
 @end example
 
 Finally, GLR and Yacc parsers share the same @code{yyerror} calling
 @end example
 
 Finally, GLR and Yacc parsers share the same @code{yyerror} calling
@@ -4249,6 +4293,7 @@ void yyerror (YYLTYPE *locp,
               int *nastiness, int *randomness,
               char const *msg);
 @end example
               int *nastiness, int *randomness,
               char const *msg);
 @end example
+@end ifset
 
 @noindent
 The prototypes are only indications of how the code produced by Bison
 
 @noindent
 The prototypes are only indications of how the code produced by Bison
@@ -5564,8 +5609,8 @@ useless: STR;
 @example
 calc.y: warning: 1 useless nonterminal and 1 useless rule
 calc.y:11.1-7: warning: useless nonterminal: useless
 @example
 calc.y: warning: 1 useless nonterminal and 1 useless rule
 calc.y:11.1-7: warning: useless nonterminal: useless
-calc.y:11.8-12: warning: useless rule: useless: STR
-calc.y contains 7 shift/reduce conflicts.
+calc.y:11.10-12: warning: useless rule: useless: STR
+calc.y: conflicts: 7 shift/reduce
 @end example
 
 When given @option{--report=state}, in addition to @file{calc.tab.c}, it
 @end example
 
 When given @option{--report=state}, in addition to @file{calc.tab.c}, it
@@ -5587,10 +5632,10 @@ Conflict in state 8 between rule 2 and token '*' resolved as shift.
 The next section lists states that still have conflicts.
 
 @example
 The next section lists states that still have conflicts.
 
 @example
-State 8 contains 1 shift/reduce conflict.
-State 9 contains 1 shift/reduce conflict.
-State 10 contains 1 shift/reduce conflict.
-State 11 contains 4 shift/reduce conflicts.
+State 8 conflicts: 1 shift/reduce
+State 9 conflicts: 1 shift/reduce
+State 10 conflicts: 1 shift/reduce
+State 11 conflicts: 4 shift/reduce
 @end example
 
 @noindent
 @end example
 
 @noindent
@@ -5802,8 +5847,8 @@ state 7
     exp         go to state 11
 @end example
 
     exp         go to state 11
 @end example
 
-As was announced in beginning of the report, @samp{State 8 contains 1
-shift/reduce conflict}:
+As was announced in beginning of the report, @samp{State 8 conflicts:
+1 shift/reduce}:
 
 @example
 state 8
 
 @example
 state 8
@@ -6071,10 +6116,15 @@ bison -d -o @var{output.c++} @var{infile.y}
 @noindent
 will produce @file{output.c++} and @file{outfile.h++}.
 
 @noindent
 will produce @file{output.c++} and @file{outfile.h++}.
 
+For compatibility with @acronym{POSIX}, the standard Bison
+distribution also contains a shell script called @command{yacc} that
+invokes Bison with the @option{-y} option.
+
 @menu
 * Bison Options::     All the options described in detail,
                         in alphabetical order by short options.
 * Option Cross Key::  Alphabetical list of long options.
 @menu
 * Bison Options::     All the options described in detail,
                         in alphabetical order by short options.
 * Option Cross Key::  Alphabetical list of long options.
+* Yacc Library::      Yacc-compatible @code{yylex} and @code{main}.
 @end menu
 
 @node Bison Options
 @end menu
 
 @node Bison Options
@@ -6110,10 +6160,12 @@ Equivalent to @samp{-o y.tab.c}; the parser output file is called
 @file{y.tab.c}, and the other outputs are called @file{y.output} and
 @file{y.tab.h}.  The purpose of this option is to imitate Yacc's output
 file name conventions.  Thus, the following shell script can substitute
 @file{y.tab.c}, and the other outputs are called @file{y.output} and
 @file{y.tab.h}.  The purpose of this option is to imitate Yacc's output
 file name conventions.  Thus, the following shell script can substitute
-for Yacc:
+for Yacc, and the Bison distribution contains such a script for
+compatibility with @acronym{POSIX}:
 
 @example
 
 @example
-bison -y $*
+#! /bin/sh
+bison -y "$@"
 @end example
 @end table
 
 @end example
 @end table
 
@@ -6266,6 +6318,32 @@ the corresponding short option.
 @end example
 @end ifinfo
 
 @end example
 @end ifinfo
 
+@node Yacc Library
+@section Yacc Library
+
+The Yacc library contains default implementations of the
+@code{yyerror} and @code{main} functions.  These default
+implementations are normally not useful, but @acronym{POSIX} requires
+them.  To use the Yacc library, link your program with the
+@option{-ly} option.  Note that Bison's implementation of the Yacc
+library is distributed under the terms of the @acronym{GNU} General
+Public License (@pxref{Copying}).
+
+If you use the Yacc library's @code{yyerror} function, you should
+declare @code{yyerror} as follows:
+
+@example
+int yyerror (char const *);
+@end example
+
+Bison ignores the @code{int} value returned by this @code{yyerror}.
+If you use the Yacc library's @code{main} function, your
+@code{yyparse} function should have the following type signature:
+
+@example
+int yyparse (void);
+@end example
+
 @c ================================================= Invoking Bison
 
 @node FAQ
 @c ================================================= Invoking Bison
 
 @node FAQ
@@ -6377,8 +6455,8 @@ Macro to pretend that a syntax error has just been detected: call
 @end deffn
 
 @deffn {Macro} YYERROR_VERBOSE
 @end deffn
 
 @deffn {Macro} YYERROR_VERBOSE
-An obsolete macro that you define with @code{#define} in the Bison
-declarations section to request verbose, specific error message strings
+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.
 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.
@@ -6396,15 +6474,11 @@ macro is deprecated, and is supported only for Yacc like parsers.
 @xref{Pure Calling,, Calling Conventions for Pure Parsers}.
 @end deffn
 
 @xref{Pure Calling,, Calling Conventions for Pure Parsers}.
 @end deffn
 
-@deffn {Macro} YYLTYPE
-Macro for the data type of @code{yylloc}; a structure with four
+@deffn {Type} YYLTYPE
+Data type of @code{yylloc}; by default, a structure with four
 members.  @xref{Location Type, , Data Types of Locations}.
 @end deffn
 
 members.  @xref{Location Type, , Data Types of Locations}.
 @end deffn
 
-@deffn {Type} yyltype
-Default value for YYLTYPE.
-@end deffn
-
 @deffn {Macro} YYMAXDEPTH
 Macro for specifying the maximum size of the parser stack.  @xref{Stack
 Overflow}.
 @deffn {Macro} YYMAXDEPTH
 Macro for specifying the maximum size of the parser stack.  @xref{Stack
 Overflow}.
@@ -6429,8 +6503,8 @@ grow its internal stacks.  Do @emph{not} define @code{YYSTACK_USE_ALLOCA}
 to anything else.
 @end deffn
 
 to anything else.
 @end deffn
 
-@deffn {Macro} YYSTYPE
-Macro for the data type of semantic values; @code{int} by default.
+@deffn {Type} YYSTYPE
+Data type of semantic values; @code{int} by default.
 @xref{Value Type, ,Data Types of Semantic Values}.
 @end deffn
 
 @xref{Value Type, ,Data Types of Semantic Values}.
 @end deffn
 
@@ -6536,11 +6610,13 @@ Bison declaration to assign left associativity to token(s).
 @xref{Precedence Decl, ,Operator Precedence}.
 @end deffn
 
 @xref{Precedence Decl, ,Operator Precedence}.
 @end deffn
 
+@ifset documentparam
 @deffn {Directive} %lex-param @{@var{argument-declaration}@}
 Bison declaration to specifying an additional parameter that
 @code{yylex} should accept.  @xref{Pure Calling,, Calling Conventions
 for Pure Parsers}.
 @end deffn
 @deffn {Directive} %lex-param @{@var{argument-declaration}@}
 Bison declaration to specifying an additional parameter that
 @code{yylex} should accept.  @xref{Pure Calling,, Calling Conventions
 for Pure Parsers}.
 @end deffn
+@end ifset
 
 @deffn {Directive} %merge
 Bison declaration to assign a merging function to a rule.  If there is a
 
 @deffn {Directive} %merge
 Bison declaration to assign a merging function to a rule.  If there is a
@@ -6568,11 +6644,13 @@ Bison declaration to set the name of the parser file.  @xref{Decl
 Summary}.
 @end deffn
 
 Summary}.
 @end deffn
 
+@ifset documentparam
 @deffn {Directive} %parse-param @{@var{argument-declaration}@}
 Bison declaration to specifying an additional parameter that
 @code{yyparse} should accept.  @xref{Parser Function,, The Parser
 Function @code{yyparse}}.
 @end deffn
 @deffn {Directive} %parse-param @{@var{argument-declaration}@}
 Bison declaration to specifying an additional parameter that
 @code{yyparse} should accept.  @xref{Parser Function,, The Parser
 Function @code{yyparse}}.
 @end deffn
+@end ifset
 
 @deffn {Directive} %prec
 Bison declaration to assign a precedence to a specific rule.
 
 @deffn {Directive} %prec
 Bison declaration to assign a precedence to a specific rule.