1 Ceci est le fichier Info bison.info, produit par Makeinfo version 4.0b
2 à partir bison.texinfo.
5 * bison: (bison). GNU Project parser generator (yacc replacement).
8 This file documents the Bison parser generator.
10 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1998, 1999,
11 2000, 2001 Free Software Foundation, Inc.
13 Permission is granted to make and distribute verbatim copies of this
14 manual provided the copyright notice and this permission notice are
15 preserved on all copies.
17 Permission is granted to copy and distribute modified versions of
18 this manual under the conditions for verbatim copying, provided also
19 that the sections entitled "GNU General Public License" and "Conditions
20 for Using Bison" are included exactly as in the original, and provided
21 that the entire resulting derived work is distributed under the terms
22 of a permission notice identical to this one.
24 Permission is granted to copy and distribute translations of this
25 manual into another language, under the above conditions for modified
26 versions, except that the sections entitled "GNU General Public
27 License", "Conditions for Using Bison" and this permission notice may be
28 included in translations approved by the Free Software Foundation
29 instead of in the original English.
32 File: bison.info, Node: Value Type, Next: Multiple Types, Up: Semantics
34 Data Types of Semantic Values
35 -----------------------------
37 In a simple program it may be sufficient to use the same data type
38 for the semantic values of all language constructs. This was true in
39 the RPN and infix calculator examples (*note Reverse Polish Notation
40 Calculator: RPN Calc.).
42 Bison's default is to use type `int' for all semantic values. To
43 specify some other type, define `YYSTYPE' as a macro, like this:
45 #define YYSTYPE double
47 This macro definition must go in the C declarations section of the
48 grammar file (*note Outline of a Bison Grammar: Grammar Outline.).
51 File: bison.info, Node: Multiple Types, Next: Actions, Prev: Value Type, Up: Semantics
53 More Than One Value Type
54 ------------------------
56 In most programs, you will need different data types for different
57 kinds of tokens and groupings. For example, a numeric constant may
58 need type `int' or `long', while a string constant needs type `char *',
59 and an identifier might need a pointer to an entry in the symbol table.
61 To use more than one data type for semantic values in one parser,
62 Bison requires you to do two things:
64 * Specify the entire collection of possible data types, with the
65 `%union' Bison declaration (*note The Collection of Value Types:
68 * Choose one of those types for each symbol (terminal or
69 nonterminal) for which semantic values are used. This is done for
70 tokens with the `%token' Bison declaration (*note Token Type
71 Names: Token Decl.) and for groupings with the `%type' Bison
72 declaration (*note Nonterminal Symbols: Type Decl.).
75 File: bison.info, Node: Actions, Next: Action Types, Prev: Multiple Types, Up: Semantics
80 An action accompanies a syntactic rule and contains C code to be
81 executed each time an instance of that rule is recognized. The task of
82 most actions is to compute a semantic value for the grouping built by
83 the rule from the semantic values associated with tokens or smaller
86 An action consists of C statements surrounded by braces, much like a
87 compound statement in C. It can be placed at any position in the rule;
88 it is executed at that position. Most rules have just one action at
89 the end of the rule, following all the components. Actions in the
90 middle of a rule are tricky and used only for special purposes (*note
91 Actions in Mid-Rule: Mid-Rule Actions.).
93 The C code in an action can refer to the semantic values of the
94 components matched by the rule with the construct `$N', which stands for
95 the value of the Nth component. The semantic value for the grouping
96 being constructed is `$$'. (Bison translates both of these constructs
97 into array element references when it copies the actions into the parser
100 Here is a typical example:
106 This rule constructs an `exp' from two smaller `exp' groupings
107 connected by a plus-sign token. In the action, `$1' and `$3' refer to
108 the semantic values of the two component `exp' groupings, which are the
109 first and third symbols on the right hand side of the rule. The sum is
110 stored into `$$' so that it becomes the semantic value of the
111 addition-expression just recognized by the rule. If there were a
112 useful semantic value associated with the `+' token, it could be
115 If you don't specify an action for a rule, Bison supplies a default:
116 `$$ = $1'. Thus, the value of the first symbol in the rule becomes the
117 value of the whole rule. Of course, the default rule is valid only if
118 the two data types match. There is no meaningful default action for an
119 empty rule; every empty rule must have an explicit action unless the
120 rule's value does not matter.
122 `$N' with N zero or negative is allowed for reference to tokens and
123 groupings on the stack _before_ those that match the current rule.
124 This is a very risky practice, and to use it reliably you must be
125 certain of the context in which the rule is applied. Here is a case in
126 which you can use this reliably:
128 foo: expr bar '+' expr { ... }
129 | expr bar '-' expr { ... }
133 { previous_expr = $0; }
136 As long as `bar' is used only in the fashion shown here, `$0' always
137 refers to the `expr' which precedes `bar' in the definition of `foo'.
140 File: bison.info, Node: Action Types, Next: Mid-Rule Actions, Prev: Actions, Up: Semantics
142 Data Types of Values in Actions
143 -------------------------------
145 If you have chosen a single data type for semantic values, the `$$'
146 and `$N' constructs always have that data type.
148 If you have used `%union' to specify a variety of data types, then
149 you must declare a choice among these types for each terminal or
150 nonterminal symbol that can have a semantic value. Then each time you
151 use `$$' or `$N', its data type is determined by which symbol it refers
152 to in the rule. In this example,
158 `$1' and `$3' refer to instances of `exp', so they all have the data
159 type declared for the nonterminal symbol `exp'. If `$2' were used, it
160 would have the data type declared for the terminal symbol `'+'',
161 whatever that might be.
163 Alternatively, you can specify the data type when you refer to the
164 value, by inserting `<TYPE>' after the `$' at the beginning of the
165 reference. For example, if you have defined types as shown here:
172 then you can write `$<itype>1' to refer to the first subunit of the
173 rule as an integer, or `$<dtype>1' to refer to it as a double.
176 File: bison.info, Node: Mid-Rule Actions, Prev: Action Types, Up: Semantics
181 Occasionally it is useful to put an action in the middle of a rule.
182 These actions are written just like usual end-of-rule actions, but they
183 are executed before the parser even recognizes the following components.
185 A mid-rule action may refer to the components preceding it using
186 `$N', but it may not refer to subsequent components because it is run
187 before they are parsed.
189 The mid-rule action itself counts as one of the components of the
190 rule. This makes a difference when there is another action later in
191 the same rule (and usually there is another at the end): you have to
192 count the actions along with the symbols when working out which number
195 The mid-rule action can also have a semantic value. The action can
196 set its value with an assignment to `$$', and actions later in the rule
197 can refer to the value using `$N'. Since there is no symbol to name
198 the action, there is no way to declare a data type for the value in
199 advance, so you must use the `$<...>N' construct to specify a data type
200 each time you refer to this value.
202 There is no way to set the value of the entire rule with a mid-rule
203 action, because assignments to `$$' do not have that effect. The only
204 way to set the value for the entire rule is with an ordinary action at
207 Here is an example from a hypothetical compiler, handling a `let'
208 statement that looks like `let (VARIABLE) STATEMENT' and serves to
209 create a variable named VARIABLE temporarily for the duration of
210 STATEMENT. To parse this construct, we must put VARIABLE into the
211 symbol table while STATEMENT is parsed, then remove it afterward. Here
214 stmt: LET '(' var ')'
215 { $<context>$ = push_context ();
216 declare_variable ($3); }
218 pop_context ($<context>5); }
220 As soon as `let (VARIABLE)' has been recognized, the first action is
221 run. It saves a copy of the current semantic context (the list of
222 accessible variables) as its semantic value, using alternative
223 `context' in the data-type union. Then it calls `declare_variable' to
224 add the new variable to that list. Once the first action is finished,
225 the embedded statement `stmt' can be parsed. Note that the mid-rule
226 action is component number 5, so the `stmt' is component number 6.
228 After the embedded statement is parsed, its semantic value becomes
229 the value of the entire `let'-statement. Then the semantic value from
230 the earlier action is used to restore the prior list of variables. This
231 removes the temporary `let'-variable from the list so that it won't
232 appear to exist while the rest of the program is parsed.
234 Taking action before a rule is completely recognized often leads to
235 conflicts since the parser must commit to a parse in order to execute
236 the action. For example, the following two rules, without mid-rule
237 actions, can coexist in a working parser because the parser can shift
238 the open-brace token and look at what follows before deciding whether
239 there is a declaration or not:
241 compound: '{' declarations statements '}'
245 But when we add a mid-rule action as follows, the rules become
248 compound: { prepare_for_local_variables (); }
249 '{' declarations statements '}'
253 Now the parser is forced to decide whether to run the mid-rule action
254 when it has read no farther than the open-brace. In other words, it
255 must commit to using one rule or the other, without sufficient
256 information to do it correctly. (The open-brace token is what is called
257 the "look-ahead" token at this time, since the parser is still deciding
258 what to do about it. *Note Look-Ahead Tokens: Look-Ahead.)
260 You might think that you could correct the problem by putting
261 identical actions into the two rules, like this:
263 compound: { prepare_for_local_variables (); }
264 '{' declarations statements '}'
265 | { prepare_for_local_variables (); }
269 But this does not help, because Bison does not realize that the two
270 actions are identical. (Bison never tries to understand the C code in
273 If the grammar is such that a declaration can be distinguished from a
274 statement by the first token (which is true in C), then one solution
275 which does work is to put the action after the open-brace, like this:
277 compound: '{' { prepare_for_local_variables (); }
278 declarations statements '}'
282 Now the first token of the following declaration or statement, which
283 would in any case tell Bison which rule to use, can still do so.
285 Another solution is to bury the action inside a nonterminal symbol
286 which serves as a subroutine:
288 subroutine: /* empty */
289 { prepare_for_local_variables (); }
293 '{' declarations statements '}'
298 Now Bison can execute the action in the rule for `subroutine' without
299 deciding which rule for `compound' it will eventually use. Note that
300 the action is now at the end of its rule. Any mid-rule action can be
301 converted to an end-of-rule action in this way, and this is what Bison
302 actually does to implement mid-rule actions.
305 File: bison.info, Node: Locations, Next: Declarations, Prev: Semantics, Up: Grammar File
310 Though grammar rules and semantic actions are enough to write a fully
311 functional parser, it can be useful to process some additionnal
312 informations, especially symbol locations.
314 The way locations are handled is defined by providing a data type,
315 and actions to take when rules are matched.
319 * Location Type:: Specifying a data type for locations.
320 * Actions and Locations:: Using locations in actions.
321 * Location Default Action:: Defining a general way to compute locations.
324 File: bison.info, Node: Location Type, Next: Actions and Locations, Up: Locations
326 Data Type of Locations
327 ----------------------
329 Defining a data type for locations is much simpler than for semantic
330 values, since all tokens and groupings always use the same type.
332 The type of locations is specified by defining a macro called
333 `YYLTYPE'. When `YYLTYPE' is not defined, Bison uses a default
334 structure type with four members:
345 File: bison.info, Node: Actions and Locations, Next: Location Default Action, Prev: Location Type, Up: Locations
347 Actions and Locations
348 ---------------------
350 Actions are not only useful for defining language semantics, but
351 also for describing the behavior of the output parser with locations.
353 The most obvious way for building locations of syntactic groupings
354 is very similar to the way semantic values are computed. In a given
355 rule, several constructs can be used to access the locations of the
356 elements being matched. The location of the Nth component of the right
357 hand side is `@N', while the location of the left hand side grouping is
360 Here is a basic example using the default data type for locations:
365 @$.first_column = @1.first_column;
366 @$.first_line = @1.first_line;
367 @$.last_column = @3.last_column;
368 @$.last_line = @3.last_line;
374 printf("Division by zero, l%d,c%d-l%d,c%d",
375 @3.first_line, @3.first_column,
376 @3.last_line, @3.last_column);
380 As for semantic values, there is a default action for locations that
381 is run each time a rule is matched. It sets the beginning of `@$' to the
382 beginning of the first symbol, and the end of `@$' to the end of the
385 With this default action, the location tracking can be fully
386 automatic. The example above simply rewrites this way:
396 printf("Division by zero, l%d,c%d-l%d,c%d",
397 @3.first_line, @3.first_column,
398 @3.last_line, @3.last_column);
403 File: bison.info, Node: Location Default Action, Prev: Actions and Locations, Up: Locations
405 Default Action for Locations
406 ----------------------------
408 Actually, actions are not the best place to compute locations. Since
409 locations are much more general than semantic values, there is room in
410 the output parser to redefine the default action to take for each rule.
411 The `YYLLOC_DEFAULT' macro is called each time a rule is matched,
412 before the associated action is run.
414 Most of the time, this macro is general enough to suppress location
415 dedicated code from semantic actions.
417 The `YYLLOC_DEFAULT' macro takes three parameters. The first one is
418 the location of the grouping (the result of the computation). The
419 second one is an array holding locations of all right hand side
420 elements of the rule being matched. The last one is the size of the
421 right hand side rule.
423 By default, it is defined this way:
425 #define YYLLOC_DEFAULT(Current, Rhs, N) \
426 Current.last_line = Rhs[N].last_line; \
427 Current.last_column = Rhs[N].last_column;
429 When defining `YYLLOC_DEFAULT', you should consider that:
431 * All arguments are free of side-effects. However, only the first
432 one (the result) should be modified by `YYLLOC_DEFAULT'.
434 * Before `YYLLOC_DEFAULT' is executed, the output parser sets `@$'
437 * For consistency with semantic actions, valid indexes for the
438 location array range from 1 to N.
441 File: bison.info, Node: Declarations, Next: Multiple Parsers, Prev: Locations, Up: Grammar File
446 The "Bison declarations" section of a Bison grammar defines the
447 symbols used in formulating the grammar and the data types of semantic
448 values. *Note Symbols::.
450 All token type names (but not single-character literal tokens such as
451 `'+'' and `'*'') must be declared. Nonterminal symbols must be
452 declared if you need to specify which data type to use for the semantic
453 value (*note More Than One Value Type: Multiple Types.).
455 The first rule in the file also specifies the start symbol, by
456 default. If you want some other symbol to be the start symbol, you
457 must declare it explicitly (*note Languages and Context-Free Grammars:
458 Language and Grammar.).
462 * Token Decl:: Declaring terminal symbols.
463 * Precedence Decl:: Declaring terminals with precedence and associativity.
464 * Union Decl:: Declaring the set of all semantic value types.
465 * Type Decl:: Declaring the choice of type for a nonterminal symbol.
466 * Expect Decl:: Suppressing warnings about shift/reduce conflicts.
467 * Start Decl:: Specifying the start symbol.
468 * Pure Decl:: Requesting a reentrant parser.
469 * Decl Summary:: Table of all Bison declarations.
472 File: bison.info, Node: Token Decl, Next: Precedence Decl, Up: Declarations
477 The basic way to declare a token type name (terminal symbol) is as
482 Bison will convert this into a `#define' directive in the parser, so
483 that the function `yylex' (if it is in this file) can use the name NAME
484 to stand for this token type's code.
486 Alternatively, you can use `%left', `%right', or `%nonassoc' instead
487 of `%token', if you wish to specify associativity and precedence.
488 *Note Operator Precedence: Precedence Decl.
490 You can explicitly specify the numeric code for a token type by
491 appending an integer value in the field immediately following the token
496 It is generally best, however, to let Bison choose the numeric codes for
497 all token types. Bison will automatically select codes that don't
498 conflict with each other or with ASCII characters.
500 In the event that the stack type is a union, you must augment the
501 `%token' or other token declaration to include the data type
502 alternative delimited by angle-brackets (*note More Than One Value
503 Type: Multiple Types.).
507 %union { /* define stack type */
511 %token <val> NUM /* define token NUM and its type */
513 You can associate a literal string token with a token type name by
514 writing the literal string at the end of a `%token' declaration which
515 declares the name. For example:
519 For example, a grammar for the C language might specify these names with
520 equivalent literal string tokens:
522 %token <operator> OR "||"
523 %token <operator> LE 134 "<="
526 Once you equate the literal string and the token name, you can use them
527 interchangeably in further declarations or the grammar rules. The
528 `yylex' function can use the token name or the literal string to obtain
529 the token type code number (*note Calling Convention::).
532 File: bison.info, Node: Precedence Decl, Next: Union Decl, Prev: Token Decl, Up: Declarations
537 Use the `%left', `%right' or `%nonassoc' declaration to declare a
538 token and specify its precedence and associativity, all at once. These
539 are called "precedence declarations". *Note Operator Precedence:
540 Precedence, for general information on operator precedence.
542 The syntax of a precedence declaration is the same as that of
549 %left <TYPE> SYMBOLS...
551 And indeed any of these declarations serves the purposes of `%token'.
552 But in addition, they specify the associativity and relative precedence
555 * The associativity of an operator OP determines how repeated uses
556 of the operator nest: whether `X OP Y OP Z' is parsed by grouping
557 X with Y first or by grouping Y with Z first. `%left' specifies
558 left-associativity (grouping X with Y first) and `%right'
559 specifies right-associativity (grouping Y with Z first).
560 `%nonassoc' specifies no associativity, which means that `X OP Y
561 OP Z' is considered a syntax error.
563 * The precedence of an operator determines how it nests with other
564 operators. All the tokens declared in a single precedence
565 declaration have equal precedence and nest together according to
566 their associativity. When two tokens declared in different
567 precedence declarations associate, the one declared later has the
568 higher precedence and is grouped first.
571 File: bison.info, Node: Union Decl, Next: Type Decl, Prev: Precedence Decl, Up: Declarations
573 The Collection of Value Types
574 -----------------------------
576 The `%union' declaration specifies the entire collection of possible
577 data types for semantic values. The keyword `%union' is followed by a
578 pair of braces containing the same thing that goes inside a `union' in
588 This says that the two alternative types are `double' and `symrec *'.
589 They are given names `val' and `tptr'; these names are used in the
590 `%token' and `%type' declarations to pick one of the types for a
591 terminal or nonterminal symbol (*note Nonterminal Symbols: Type Decl.).
593 Note that, unlike making a `union' declaration in C, you do not write
594 a semicolon after the closing brace.
597 File: bison.info, Node: Type Decl, Next: Expect Decl, Prev: Union Decl, Up: Declarations
602 When you use `%union' to specify multiple value types, you must declare
603 the value type of each nonterminal symbol for which values are used.
604 This is done with a `%type' declaration, like this:
606 %type <TYPE> NONTERMINAL...
608 Here NONTERMINAL is the name of a nonterminal symbol, and TYPE is the
609 name given in the `%union' to the alternative that you want (*note The
610 Collection of Value Types: Union Decl.). You can give any number of
611 nonterminal symbols in the same `%type' declaration, if they have the
612 same value type. Use spaces to separate the symbol names.
614 You can also declare the value type of a terminal symbol. To do
615 this, use the same `<TYPE>' construction in a declaration for the
616 terminal symbol. All kinds of token declarations allow `<TYPE>'.
619 File: bison.info, Node: Expect Decl, Next: Start Decl, Prev: Type Decl, Up: Declarations
621 Suppressing Conflict Warnings
622 -----------------------------
624 Bison normally warns if there are any conflicts in the grammar
625 (*note Shift/Reduce Conflicts: Shift/Reduce.), but most real grammars
626 have harmless shift/reduce conflicts which are resolved in a
627 predictable way and would be difficult to eliminate. It is desirable
628 to suppress the warning about these conflicts unless the number of
629 conflicts changes. You can do this with the `%expect' declaration.
631 The declaration looks like this:
635 Here N is a decimal integer. The declaration says there should be no
636 warning if there are N shift/reduce conflicts and no reduce/reduce
637 conflicts. The usual warning is given if there are either more or fewer
638 conflicts, or if there are any reduce/reduce conflicts.
640 In general, using `%expect' involves these steps:
642 * Compile your grammar without `%expect'. Use the `-v' option to
643 get a verbose list of where the conflicts occur. Bison will also
644 print the number of conflicts.
646 * Check each of the conflicts to make sure that Bison's default
647 resolution is what you really want. If not, rewrite the grammar
648 and go back to the beginning.
650 * Add an `%expect' declaration, copying the number N from the number
653 Now Bison will stop annoying you about the conflicts you have
654 checked, but it will warn you again if changes in the grammar result in
655 additional conflicts.
658 File: bison.info, Node: Start Decl, Next: Pure Decl, Prev: Expect Decl, Up: Declarations
663 Bison assumes by default that the start symbol for the grammar is
664 the first nonterminal specified in the grammar specification section.
665 The programmer may override this restriction with the `%start'
666 declaration as follows:
671 File: bison.info, Node: Pure Decl, Next: Decl Summary, Prev: Start Decl, Up: Declarations
673 A Pure (Reentrant) Parser
674 -------------------------
676 A "reentrant" program is one which does not alter in the course of
677 execution; in other words, it consists entirely of "pure" (read-only)
678 code. Reentrancy is important whenever asynchronous execution is
679 possible; for example, a non-reentrant program may not be safe to call
680 from a signal handler. In systems with multiple threads of control, a
681 non-reentrant program must be called only within interlocks.
683 Normally, Bison generates a parser which is not reentrant. This is
684 suitable for most uses, and it permits compatibility with YACC. (The
685 standard YACC interfaces are inherently nonreentrant, because they use
686 statically allocated variables for communication with `yylex',
687 including `yylval' and `yylloc'.)
689 Alternatively, you can generate a pure, reentrant parser. The Bison
690 declaration `%pure_parser' says that you want the parser to be
691 reentrant. It looks like this:
695 The result is that the communication variables `yylval' and `yylloc'
696 become local variables in `yyparse', and a different calling convention
697 is used for the lexical analyzer function `yylex'. *Note Calling
698 Conventions for Pure Parsers: Pure Calling, for the details of this.
699 The variable `yynerrs' also becomes local in `yyparse' (*note The Error
700 Reporting Function `yyerror': Error Reporting.). The convention for
701 calling `yyparse' itself is unchanged.
703 Whether the parser is pure has nothing to do with the grammar rules.
704 You can generate either a pure parser or a nonreentrant parser from any
708 File: bison.info, Node: Decl Summary, Prev: Pure Decl, Up: Declarations
710 Bison Declaration Summary
711 -------------------------
713 Here is a summary of all Bison declarations:
716 Declare the collection of data types that semantic values may have
717 (*note The Collection of Value Types: Union Decl.).
720 Declare a terminal symbol (token type name) with no precedence or
721 associativity specified (*note Token Type Names: Token Decl.).
724 Declare a terminal symbol (token type name) that is
725 right-associative (*note Operator Precedence: Precedence Decl.).
728 Declare a terminal symbol (token type name) that is
729 left-associative (*note Operator Precedence: Precedence Decl.).
732 Declare a terminal symbol (token type name) that is nonassociative
733 (using it in a way that would be associative is a syntax error)
734 (*note Operator Precedence: Precedence Decl.).
737 Declare the type of semantic values for a nonterminal symbol
738 (*note Nonterminal Symbols: Type Decl.).
741 Specify the grammar's start symbol (*note The Start-Symbol: Start
745 Declare the expected number of shift-reduce conflicts (*note
746 Suppressing Conflict Warnings: Expect Decl.).
749 `%fixed_output_files'
750 Pretend the option `--yacc' was given, i.e., imitate Yacc,
751 including its naming conventions. *Note Bison Options::, for more.
754 Generate the code processing the locations (*note Special Features
755 for Use in Actions: Action Features.). This mode is enabled as
756 soon as the grammar uses the special `@N' tokens, but if your
757 grammar does not use it, using `%locations' allows for more
758 accurate parse error messages.
761 Request a pure (reentrant) parser program (*note A Pure
762 (Reentrant) Parser: Pure Decl.).
765 Do not include any C code in the parser file; generate tables
766 only. The parser file contains just `#define' directives and
767 static variable declarations.
769 This option also tells Bison to write the C code for the grammar
770 actions into a file named `FILENAME.act', in the form of a
771 brace-surrounded body fit for a `switch' statement.
774 Don't generate any `#line' preprocessor commands in the parser
775 file. Ordinarily Bison writes these commands in the parser file
776 so that the C compiler and debuggers will associate errors and
777 object code with your source file (the grammar file). This
778 directive causes them to associate errors with the parser file,
779 treating it an independent source file in its own right.
782 Output a definition of the macro `YYDEBUG' into the parser file, so
783 that the debugging facilities are compiled. *Note Debugging Your
787 Write an extra output file containing macro definitions for the
788 token type names defined in the grammar and the semantic value type
789 `YYSTYPE', as well as a few `extern' variable declarations.
791 If the parser output file is named `NAME.c' then this file is
794 This output file is essential if you wish to put the definition of
795 `yylex' in a separate source file, because `yylex' needs to be
796 able to refer to token type codes and the variable `yylval'.
797 *Note Semantic Values of Tokens: Token Values.
800 Write an extra output file containing verbose descriptions of the
801 parser states and what is done for each type of look-ahead token in
804 This file also describes all the conflicts, both those resolved by
805 operator precedence and the unresolved ones.
807 The file's name is made by removing `.tab.c' or `.c' from the
808 parser output file name, and adding `.output' instead.
810 Therefore, if the input file is `foo.y', then the parser file is
811 called `foo.tab.c' by default. As a consequence, the verbose
812 output file is called `foo.output'.
815 Generate an array of token names in the parser file. The name of
816 the array is `yytname'; `yytname[I]' is the name of the token
817 whose internal Bison token code number is I. The first three
818 elements of `yytname' are always `"$"', `"error"', and
819 `"$illegal"'; after these come the symbols defined in the grammar
822 For single-character literal tokens and literal string tokens, the
823 name in the table includes the single-quote or double-quote
824 characters: for example, `"'+'"' is a single-character literal and
825 `"\"<=\""' is a literal string token. All the characters of the
826 literal string token appear verbatim in the string found in the
827 table; even double-quote characters are not escaped. For example,
828 if the token consists of three characters `*"*', its string in
829 `yytname' contains `"*"*"'. (In C, that would be written as
832 When you specify `%token_table', Bison also generates macro
833 definitions for macros `YYNTOKENS', `YYNNTS', and `YYNRULES', and
837 The highest token number, plus one.
840 The number of nonterminal symbols.
843 The number of grammar rules,
846 The number of parser states (*note Parser States::).
849 File: bison.info, Node: Multiple Parsers, Prev: Declarations, Up: Grammar File
851 Multiple Parsers in the Same Program
852 ====================================
854 Most programs that use Bison parse only one language and therefore
855 contain only one Bison parser. But what if you want to parse more than
856 one language with the same program? Then you need to avoid a name
857 conflict between different definitions of `yyparse', `yylval', and so
860 The easy way to do this is to use the option `-p PREFIX' (*note
861 Invoking Bison: Invocation.). This renames the interface functions and
862 variables of the Bison parser to start with PREFIX instead of `yy'.
863 You can use this to give each parser distinct names that do not
866 The precise list of symbols renamed is `yyparse', `yylex',
867 `yyerror', `yynerrs', `yylval', `yychar' and `yydebug'. For example,
868 if you use `-p c', the names become `cparse', `clex', and so on.
870 *All the other variables and macros associated with Bison are not
871 renamed.* These others are not global; there is no conflict if the same
872 name is used in different parsers. For example, `YYSTYPE' is not
873 renamed, but defining this in different ways in different parsers causes
874 no trouble (*note Data Types of Semantic Values: Value Type.).
876 The `-p' option works by adding macro definitions to the beginning
877 of the parser source file, defining `yyparse' as `PREFIXparse', and so
878 on. This effectively substitutes one name for the other in the entire
882 File: bison.info, Node: Interface, Next: Algorithm, Prev: Grammar File, Up: Top
884 Parser C-Language Interface
885 ***************************
887 The Bison parser is actually a C function named `yyparse'. Here we
888 describe the interface conventions of `yyparse' and the other functions
889 that it needs to use.
891 Keep in mind that the parser uses many C identifiers starting with
892 `yy' and `YY' for internal purposes. If you use such an identifier
893 (aside from those in this manual) in an action or in additional C code
894 in the grammar file, you are likely to run into trouble.
898 * Parser Function:: How to call `yyparse' and what it returns.
899 * Lexical:: You must supply a function `yylex'
901 * Error Reporting:: You must supply a function `yyerror'.
902 * Action Features:: Special features for use in actions.
905 File: bison.info, Node: Parser Function, Next: Lexical, Up: Interface
907 The Parser Function `yyparse'
908 =============================
910 You call the function `yyparse' to cause parsing to occur. This
911 function reads tokens, executes actions, and ultimately returns when it
912 encounters end-of-input or an unrecoverable syntax error. You can also
913 write an action which directs `yyparse' to return immediately without
916 The value returned by `yyparse' is 0 if parsing was successful
917 (return is due to end-of-input).
919 The value is 1 if parsing failed (return is due to a syntax error).
921 In an action, you can cause immediate return from `yyparse' by using
925 Return immediately with value 0 (to report success).
928 Return immediately with value 1 (to report failure).
931 File: bison.info, Node: Lexical, Next: Error Reporting, Prev: Parser Function, Up: Interface
933 The Lexical Analyzer Function `yylex'
934 =====================================
936 The "lexical analyzer" function, `yylex', recognizes tokens from the
937 input stream and returns them to the parser. Bison does not create
938 this function automatically; you must write it so that `yyparse' can
939 call it. The function is sometimes referred to as a lexical scanner.
941 In simple programs, `yylex' is often defined at the end of the Bison
942 grammar file. If `yylex' is defined in a separate source file, you
943 need to arrange for the token-type macro definitions to be available
944 there. To do this, use the `-d' option when you run Bison, so that it
945 will write these macro definitions into a separate header file
946 `NAME.tab.h' which you can include in the other source files that need
947 it. *Note Invoking Bison: Invocation.
951 * Calling Convention:: How `yyparse' calls `yylex'.
952 * Token Values:: How `yylex' must return the semantic value
953 of the token it has read.
954 * Token Positions:: How `yylex' must return the text position
955 (line number, etc.) of the token, if the
957 * Pure Calling:: How the calling convention differs
958 in a pure parser (*note A Pure (Reentrant) Parser: Pure Decl.).
961 File: bison.info, Node: Calling Convention, Next: Token Values, Up: Lexical
963 Calling Convention for `yylex'
964 ------------------------------
966 The value that `yylex' returns must be the numeric code for the type
967 of token it has just found, or 0 for end-of-input.
969 When a token is referred to in the grammar rules by a name, that name
970 in the parser file becomes a C macro whose definition is the proper
971 numeric code for that token type. So `yylex' can use the name to
972 indicate that type. *Note Symbols::.
974 When a token is referred to in the grammar rules by a character
975 literal, the numeric code for that character is also the code for the
976 token type. So `yylex' can simply return that character code. The
977 null character must not be used this way, because its code is zero and
978 that is what signifies end-of-input.
980 Here is an example showing these things:
986 if (c == EOF) /* Detect end of file. */
989 if (c == '+' || c == '-')
990 return c; /* Assume token type for `+' is '+'. */
992 return INT; /* Return the type of the token. */
996 This interface has been designed so that the output from the `lex'
997 utility can be used without change as the definition of `yylex'.
999 If the grammar uses literal string tokens, there are two ways that
1000 `yylex' can determine the token type codes for them:
1002 * If the grammar defines symbolic token names as aliases for the
1003 literal string tokens, `yylex' can use these symbolic names like
1004 all others. In this case, the use of the literal string tokens in
1005 the grammar file has no effect on `yylex'.
1007 * `yylex' can find the multicharacter token in the `yytname' table.
1008 The index of the token in the table is the token type's code. The
1009 name of a multicharacter token is recorded in `yytname' with a
1010 double-quote, the token's characters, and another double-quote.
1011 The token's characters are not escaped in any way; they appear
1012 verbatim in the contents of the string in the table.
1014 Here's code for looking up a token in `yytname', assuming that the
1015 characters of the token are stored in `token_buffer'.
1017 for (i = 0; i < YYNTOKENS; i++)
1020 && yytname[i][0] == '"'
1021 && strncmp (yytname[i] + 1, token_buffer,
1022 strlen (token_buffer))
1023 && yytname[i][strlen (token_buffer) + 1] == '"'
1024 && yytname[i][strlen (token_buffer) + 2] == 0)
1028 The `yytname' table is generated only if you use the
1029 `%token_table' declaration. *Note Decl Summary::.
1032 File: bison.info, Node: Token Values, Next: Token Positions, Prev: Calling Convention, Up: Lexical
1034 Semantic Values of Tokens
1035 -------------------------
1037 In an ordinary (non-reentrant) parser, the semantic value of the
1038 token must be stored into the global variable `yylval'. When you are
1039 using just one data type for semantic values, `yylval' has that type.
1040 Thus, if the type is `int' (the default), you might write this in
1044 yylval = value; /* Put value onto Bison stack. */
1045 return INT; /* Return the type of the token. */
1048 When you are using multiple data types, `yylval''s type is a union
1049 made from the `%union' declaration (*note The Collection of Value
1050 Types: Union Decl.). So when you store a token's value, you must use
1051 the proper member of the union. If the `%union' declaration looks like
1060 then the code in `yylex' might look like this:
1063 yylval.intval = value; /* Put value onto Bison stack. */
1064 return INT; /* Return the type of the token. */
1068 File: bison.info, Node: Token Positions, Next: Pure Calling, Prev: Token Values, Up: Lexical
1070 Textual Positions of Tokens
1071 ---------------------------
1073 If you are using the `@N'-feature (*note Tracking Locations:
1074 Locations.) in actions to keep track of the textual locations of tokens
1075 and groupings, then you must provide this information in `yylex'. The
1076 function `yyparse' expects to find the textual location of a token just
1077 parsed in the global variable `yylloc'. So `yylex' must store the
1078 proper data in that variable.
1080 By default, the value of `yylloc' is a structure and you need only
1081 initialize the members that are going to be used by the actions. The
1082 four members are called `first_line', `first_column', `last_line' and
1083 `last_column'. Note that the use of this feature makes the parser
1086 The data type of `yylloc' has the name `YYLTYPE'.
1089 File: bison.info, Node: Pure Calling, Prev: Token Positions, Up: Lexical
1091 Calling Conventions for Pure Parsers
1092 ------------------------------------
1094 When you use the Bison declaration `%pure_parser' to request a pure,
1095 reentrant parser, the global communication variables `yylval' and
1096 `yylloc' cannot be used. (*Note A Pure (Reentrant) Parser: Pure Decl.)
1097 In such parsers the two global variables are replaced by pointers
1098 passed as arguments to `yylex'. You must declare them as shown here,
1099 and pass the information back by storing it through those pointers.
1102 yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
1105 *lvalp = value; /* Put value onto Bison stack. */
1106 return INT; /* Return the type of the token. */
1110 If the grammar file does not use the `@' constructs to refer to
1111 textual positions, then the type `YYLTYPE' will not be defined. In
1112 this case, omit the second argument; `yylex' will be called with only
1115 If you use a reentrant parser, you can optionally pass additional
1116 parameter information to it in a reentrant way. To do so, define the
1117 macro `YYPARSE_PARAM' as a variable name. This modifies the `yyparse'
1118 function to accept one argument, of type `void *', with that name.
1120 When you call `yyparse', pass the address of an object, casting the
1121 address to `void *'. The grammar actions can refer to the contents of
1122 the object by casting the pointer value back to its proper type and
1123 then dereferencing it. Here's an example. Write this in the parser:
1126 struct parser_control
1132 #define YYPARSE_PARAM parm
1135 Then call the parser like this:
1137 struct parser_control
1146 struct parser_control foo;
1147 ... /* Store proper data in `foo'. */
1148 value = yyparse ((void *) &foo);
1152 In the grammar actions, use expressions like this to refer to the data:
1154 ((struct parser_control *) parm)->randomness
1156 If you wish to pass the additional parameter data to `yylex', define
1157 the macro `YYLEX_PARAM' just like `YYPARSE_PARAM', as shown here:
1160 struct parser_control
1166 #define YYPARSE_PARAM parm
1167 #define YYLEX_PARAM parm
1170 You should then define `yylex' to accept one additional
1171 argument--the value of `parm'. (This makes either two or three
1172 arguments in total, depending on whether an argument of type `YYLTYPE'
1173 is passed.) You can declare the argument as a pointer to the proper
1174 object type, or you can declare it as `void *' and access the contents
1177 You can use `%pure_parser' to request a reentrant parser without
1178 also using `YYPARSE_PARAM'. Then you should call `yyparse' with no
1179 arguments, as usual.
1182 File: bison.info, Node: Error Reporting, Next: Action Features, Prev: Lexical, Up: Interface
1184 The Error Reporting Function `yyerror'
1185 ======================================
1187 The Bison parser detects a "parse error" or "syntax error" whenever
1188 it reads a token which cannot satisfy any syntax rule. An action in
1189 the grammar can also explicitly proclaim an error, using the macro
1190 `YYERROR' (*note Special Features for Use in Actions: Action Features.).
1192 The Bison parser expects to report the error by calling an error
1193 reporting function named `yyerror', which you must supply. It is
1194 called by `yyparse' whenever a syntax error is found, and it receives
1195 one argument. For a parse error, the string is normally
1198 If you define the macro `YYERROR_VERBOSE' in the Bison declarations
1199 section (*note The Bison Declarations Section: Bison Declarations.),
1200 then Bison provides a more verbose and specific error message string
1201 instead of just plain `"parse error"'. It doesn't matter what
1202 definition you use for `YYERROR_VERBOSE', just whether you define it.
1204 The parser can detect one other kind of error: stack overflow. This
1205 happens when the input contains constructions that are very deeply
1206 nested. It isn't likely you will encounter this, since the Bison
1207 parser extends its stack automatically up to a very large limit. But
1208 if overflow happens, `yyparse' calls `yyerror' in the usual fashion,
1209 except that the argument string is `"parser stack overflow"'.
1211 The following definition suffices in simple programs:
1216 fprintf (stderr, "%s\n", s);
1219 After `yyerror' returns to `yyparse', the latter will attempt error
1220 recovery if you have written suitable error recovery grammar rules
1221 (*note Error Recovery::). If recovery is impossible, `yyparse' will
1222 immediately return 1.
1224 The variable `yynerrs' contains the number of syntax errors
1225 encountered so far. Normally this variable is global; but if you
1226 request a pure parser (*note A Pure (Reentrant) Parser: Pure Decl.)
1227 then it is a local variable which only the actions can access.
1230 File: bison.info, Node: Action Features, Prev: Error Reporting, Up: Interface
1232 Special Features for Use in Actions
1233 ===================================
1235 Here is a table of Bison constructs, variables and macros that are
1239 Acts like a variable that contains the semantic value for the
1240 grouping made by the current rule. *Note Actions::.
1243 Acts like a variable that contains the semantic value for the Nth
1244 component of the current rule. *Note Actions::.
1247 Like `$$' but specifies alternative TYPEALT in the union specified
1248 by the `%union' declaration. *Note Data Types of Values in
1249 Actions: Action Types.
1252 Like `$N' but specifies alternative TYPEALT in the union specified
1253 by the `%union' declaration. *Note Data Types of Values in
1254 Actions: Action Types.
1257 Return immediately from `yyparse', indicating failure. *Note The
1258 Parser Function `yyparse': Parser Function.
1261 Return immediately from `yyparse', indicating success. *Note The
1262 Parser Function `yyparse': Parser Function.
1264 `YYBACKUP (TOKEN, VALUE);'
1265 Unshift a token. This macro is allowed only for rules that reduce
1266 a single value, and only when there is no look-ahead token. It
1267 installs a look-ahead token with token type TOKEN and semantic
1268 value VALUE; then it discards the value that was going to be
1269 reduced by this rule.
1271 If the macro is used when it is not valid, such as when there is a
1272 look-ahead token already, then it reports a syntax error with a
1273 message `cannot back up' and performs ordinary error recovery.
1275 In either case, the rest of the action is not executed.
1278 Value stored in `yychar' when there is no look-ahead token.
1281 Cause an immediate syntax error. This statement initiates error
1282 recovery just as if the parser itself had detected an error;
1283 however, it does not call `yyerror', and does not print any
1284 message. If you want to print an error message, call `yyerror'
1285 explicitly before the `YYERROR;' statement. *Note Error
1289 This macro stands for an expression that has the value 1 when the
1290 parser is recovering from a syntax error, and 0 the rest of the
1291 time. *Note Error Recovery::.
1294 Variable containing the current look-ahead token. (In a pure
1295 parser, this is actually a local variable within `yyparse'.) When
1296 there is no look-ahead token, the value `YYEMPTY' is stored in the
1297 variable. *Note Look-Ahead Tokens: Look-Ahead.
1300 Discard the current look-ahead token. This is useful primarily in
1301 error rules. *Note Error Recovery::.
1304 Resume generating error messages immediately for subsequent syntax
1305 errors. This is useful primarily in error rules. *Note Error
1309 Acts like a structure variable containing information on the
1310 textual position of the grouping made by the current rule. *Note
1311 Tracking Locations: Locations.
1314 Acts like a structure variable containing information on the
1315 textual position of the Nth component of the current rule. *Note
1316 Tracking Locations: Locations.