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 predictable
627 way and would be difficult to eliminate. It is desirable to suppress
628 the warning about these conflicts unless the number of conflicts
629 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
636 no warning if there are N shift/reduce conflicts and no reduce/reduce
637 conflicts. An error, instead of the usual warning, is given if there
638 are either more or fewer conflicts, or if there are any reduce/reduce
641 In general, using `%expect' involves these steps:
643 * Compile your grammar without `%expect'. Use the `-v' option to
644 get a verbose list of where the conflicts occur. Bison will also
645 print the number of conflicts.
647 * Check each of the conflicts to make sure that Bison's default
648 resolution is what you really want. If not, rewrite the grammar
649 and go back to the beginning.
651 * Add an `%expect' declaration, copying the number N from the number
654 Now Bison will stop annoying you about the conflicts you have
655 checked, but it will warn you again if changes in the grammar result in
656 additional conflicts.
659 File: bison.info, Node: Start Decl, Next: Pure Decl, Prev: Expect Decl, Up: Declarations
664 Bison assumes by default that the start symbol for the grammar is
665 the first nonterminal specified in the grammar specification section.
666 The programmer may override this restriction with the `%start'
667 declaration as follows:
672 File: bison.info, Node: Pure Decl, Next: Decl Summary, Prev: Start Decl, Up: Declarations
674 A Pure (Reentrant) Parser
675 -------------------------
677 A "reentrant" program is one which does not alter in the course of
678 execution; in other words, it consists entirely of "pure" (read-only)
679 code. Reentrancy is important whenever asynchronous execution is
680 possible; for example, a non-reentrant program may not be safe to call
681 from a signal handler. In systems with multiple threads of control, a
682 non-reentrant program must be called only within interlocks.
684 Normally, Bison generates a parser which is not reentrant. This is
685 suitable for most uses, and it permits compatibility with YACC. (The
686 standard YACC interfaces are inherently nonreentrant, because they use
687 statically allocated variables for communication with `yylex',
688 including `yylval' and `yylloc'.)
690 Alternatively, you can generate a pure, reentrant parser. The Bison
691 declaration `%pure_parser' says that you want the parser to be
692 reentrant. It looks like this:
696 The result is that the communication variables `yylval' and `yylloc'
697 become local variables in `yyparse', and a different calling convention
698 is used for the lexical analyzer function `yylex'. *Note Calling
699 Conventions for Pure Parsers: Pure Calling, for the details of this.
700 The variable `yynerrs' also becomes local in `yyparse' (*note The Error
701 Reporting Function `yyerror': Error Reporting.). The convention for
702 calling `yyparse' itself is unchanged.
704 Whether the parser is pure has nothing to do with the grammar rules.
705 You can generate either a pure parser or a nonreentrant parser from any
709 File: bison.info, Node: Decl Summary, Prev: Pure Decl, Up: Declarations
711 Bison Declaration Summary
712 -------------------------
714 Here is a summary of the declarations used to define a grammar:
717 Declare the collection of data types that semantic values may have
718 (*note The Collection of Value Types: Union Decl.).
721 Declare a terminal symbol (token type name) with no precedence or
722 associativity specified (*note Token Type Names: Token Decl.).
725 Declare a terminal symbol (token type name) that is
726 right-associative (*note Operator Precedence: Precedence Decl.).
729 Declare a terminal symbol (token type name) that is
730 left-associative (*note Operator Precedence: Precedence Decl.).
733 Declare a terminal symbol (token type name) that is nonassociative
734 (using it in a way that would be associative is a syntax error)
735 (*note Operator Precedence: Precedence Decl.).
738 Declare the type of semantic values for a nonterminal symbol
739 (*note Nonterminal Symbols: Type Decl.).
742 Specify the grammar's start symbol (*note The Start-Symbol: Start
746 Declare the expected number of shift-reduce conflicts (*note
747 Suppressing Conflict Warnings: Expect Decl.).
750 In order to change the behavior of `bison', use the following
754 Output a definition of the macro `YYDEBUG' into the parser file, so
755 that the debugging facilities are compiled. *Note Debugging Your
759 Write an extra output file containing macro definitions for the
760 token type names defined in the grammar and the semantic value type
761 `YYSTYPE', as well as a few `extern' variable declarations.
763 If the parser output file is named `NAME.c' then this file is
766 This output file is essential if you wish to put the definition of
767 `yylex' in a separate source file, because `yylex' needs to be
768 able to refer to token type codes and the variable `yylval'.
769 *Note Semantic Values of Tokens: Token Values.
771 `%file-prefix="PREFIX"'
772 Specify a prefix to use for all Bison output file names. The
773 names are chosen as if the input file were named `PREFIX.y'.
776 Generate the code processing the locations (*note Special Features
777 for Use in Actions: Action Features.). This mode is enabled as
778 soon as the grammar uses the special `@N' tokens, but if your
779 grammar does not use it, using `%locations' allows for more
780 accurate parse error messages.
782 `%name-prefix="PREFIX"'
783 Rename the external symbols used in the parser so that they start
784 with PREFIX instead of `yy'. The precise list of symbols renamed
785 is `yyparse', `yylex', `yyerror', `yynerrs', `yylval', `yychar'
786 and `yydebug'. For example, if you use `%name-prefix="c_"', the
787 names become `c_parse', `c_lex', and so on. *Note Multiple
788 Parsers in the Same Program: Multiple Parsers.
791 Do not include any C code in the parser file; generate tables
792 only. The parser file contains just `#define' directives and
793 static variable declarations.
795 This option also tells Bison to write the C code for the grammar
796 actions into a file named `FILENAME.act', in the form of a
797 brace-surrounded body fit for a `switch' statement.
800 Don't generate any `#line' preprocessor commands in the parser
801 file. Ordinarily Bison writes these commands in the parser file
802 so that the C compiler and debuggers will associate errors and
803 object code with your source file (the grammar file). This
804 directive causes them to associate errors with the parser file,
805 treating it an independent source file in its own right.
808 Specify the FILENAME for the parser file.
811 Request a pure (reentrant) parser program (*note A Pure
812 (Reentrant) Parser: Pure Decl.).
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 Write an extra output file containing verbose descriptions of the
850 parser states and what is done for each type of look-ahead token in
853 This file also describes all the conflicts, both those resolved by
854 operator precedence and the unresolved ones.
856 The file's name is made by removing `.tab.c' or `.c' from the
857 parser output file name, and adding `.output' instead.
859 Therefore, if the input file is `foo.y', then the parser file is
860 called `foo.tab.c' by default. As a consequence, the verbose
861 output file is called `foo.output'.
864 `%fixed-output-files'
865 Pretend the option `--yacc' was given, i.e., imitate Yacc,
866 including its naming conventions. *Note Bison Options::, for more.
869 File: bison.info, Node: Multiple Parsers, Prev: Declarations, Up: Grammar File
871 Multiple Parsers in the Same Program
872 ====================================
874 Most programs that use Bison parse only one language and therefore
875 contain only one Bison parser. But what if you want to parse more than
876 one language with the same program? Then you need to avoid a name
877 conflict between different definitions of `yyparse', `yylval', and so
880 The easy way to do this is to use the option `-p PREFIX' (*note
881 Invoking Bison: Invocation.). This renames the interface functions and
882 variables of the Bison parser to start with PREFIX instead of `yy'.
883 You can use this to give each parser distinct names that do not
886 The precise list of symbols renamed is `yyparse', `yylex',
887 `yyerror', `yynerrs', `yylval', `yychar' and `yydebug'. For example,
888 if you use `-p c', the names become `cparse', `clex', and so on.
890 *All the other variables and macros associated with Bison are not
891 renamed.* These others are not global; there is no conflict if the same
892 name is used in different parsers. For example, `YYSTYPE' is not
893 renamed, but defining this in different ways in different parsers causes
894 no trouble (*note Data Types of Semantic Values: Value Type.).
896 The `-p' option works by adding macro definitions to the beginning
897 of the parser source file, defining `yyparse' as `PREFIXparse', and so
898 on. This effectively substitutes one name for the other in the entire
902 File: bison.info, Node: Interface, Next: Algorithm, Prev: Grammar File, Up: Top
904 Parser C-Language Interface
905 ***************************
907 The Bison parser is actually a C function named `yyparse'. Here we
908 describe the interface conventions of `yyparse' and the other functions
909 that it needs to use.
911 Keep in mind that the parser uses many C identifiers starting with
912 `yy' and `YY' for internal purposes. If you use such an identifier
913 (aside from those in this manual) in an action or in additional C code
914 in the grammar file, you are likely to run into trouble.
918 * Parser Function:: How to call `yyparse' and what it returns.
919 * Lexical:: You must supply a function `yylex'
921 * Error Reporting:: You must supply a function `yyerror'.
922 * Action Features:: Special features for use in actions.
925 File: bison.info, Node: Parser Function, Next: Lexical, Up: Interface
927 The Parser Function `yyparse'
928 =============================
930 You call the function `yyparse' to cause parsing to occur. This
931 function reads tokens, executes actions, and ultimately returns when it
932 encounters end-of-input or an unrecoverable syntax error. You can also
933 write an action which directs `yyparse' to return immediately without
936 The value returned by `yyparse' is 0 if parsing was successful
937 (return is due to end-of-input).
939 The value is 1 if parsing failed (return is due to a syntax error).
941 In an action, you can cause immediate return from `yyparse' by using
945 Return immediately with value 0 (to report success).
948 Return immediately with value 1 (to report failure).
951 File: bison.info, Node: Lexical, Next: Error Reporting, Prev: Parser Function, Up: Interface
953 The Lexical Analyzer Function `yylex'
954 =====================================
956 The "lexical analyzer" function, `yylex', recognizes tokens from the
957 input stream and returns them to the parser. Bison does not create
958 this function automatically; you must write it so that `yyparse' can
959 call it. The function is sometimes referred to as a lexical scanner.
961 In simple programs, `yylex' is often defined at the end of the Bison
962 grammar file. If `yylex' is defined in a separate source file, you
963 need to arrange for the token-type macro definitions to be available
964 there. To do this, use the `-d' option when you run Bison, so that it
965 will write these macro definitions into a separate header file
966 `NAME.tab.h' which you can include in the other source files that need
967 it. *Note Invoking Bison: Invocation.
971 * Calling Convention:: How `yyparse' calls `yylex'.
972 * Token Values:: How `yylex' must return the semantic value
973 of the token it has read.
974 * Token Positions:: How `yylex' must return the text position
975 (line number, etc.) of the token, if the
977 * Pure Calling:: How the calling convention differs
978 in a pure parser (*note A Pure (Reentrant) Parser: Pure Decl.).
981 File: bison.info, Node: Calling Convention, Next: Token Values, Up: Lexical
983 Calling Convention for `yylex'
984 ------------------------------
986 The value that `yylex' returns must be the numeric code for the type
987 of token it has just found, or 0 for end-of-input.
989 When a token is referred to in the grammar rules by a name, that name
990 in the parser file becomes a C macro whose definition is the proper
991 numeric code for that token type. So `yylex' can use the name to
992 indicate that type. *Note Symbols::.
994 When a token is referred to in the grammar rules by a character
995 literal, the numeric code for that character is also the code for the
996 token type. So `yylex' can simply return that character code. The
997 null character must not be used this way, because its code is zero and
998 that is what signifies end-of-input.
1000 Here is an example showing these things:
1006 if (c == EOF) /* Detect end of file. */
1009 if (c == '+' || c == '-')
1010 return c; /* Assume token type for `+' is '+'. */
1012 return INT; /* Return the type of the token. */
1016 This interface has been designed so that the output from the `lex'
1017 utility can be used without change as the definition of `yylex'.
1019 If the grammar uses literal string tokens, there are two ways that
1020 `yylex' can determine the token type codes for them:
1022 * If the grammar defines symbolic token names as aliases for the
1023 literal string tokens, `yylex' can use these symbolic names like
1024 all others. In this case, the use of the literal string tokens in
1025 the grammar file has no effect on `yylex'.
1027 * `yylex' can find the multicharacter token in the `yytname' table.
1028 The index of the token in the table is the token type's code. The
1029 name of a multicharacter token is recorded in `yytname' with a
1030 double-quote, the token's characters, and another double-quote.
1031 The token's characters are not escaped in any way; they appear
1032 verbatim in the contents of the string in the table.
1034 Here's code for looking up a token in `yytname', assuming that the
1035 characters of the token are stored in `token_buffer'.
1037 for (i = 0; i < YYNTOKENS; i++)
1040 && yytname[i][0] == '"'
1041 && strncmp (yytname[i] + 1, token_buffer,
1042 strlen (token_buffer))
1043 && yytname[i][strlen (token_buffer) + 1] == '"'
1044 && yytname[i][strlen (token_buffer) + 2] == 0)
1048 The `yytname' table is generated only if you use the
1049 `%token_table' declaration. *Note Decl Summary::.
1052 File: bison.info, Node: Token Values, Next: Token Positions, Prev: Calling Convention, Up: Lexical
1054 Semantic Values of Tokens
1055 -------------------------
1057 In an ordinary (non-reentrant) parser, the semantic value of the
1058 token must be stored into the global variable `yylval'. When you are
1059 using just one data type for semantic values, `yylval' has that type.
1060 Thus, if the type is `int' (the default), you might write this in
1064 yylval = value; /* Put value onto Bison stack. */
1065 return INT; /* Return the type of the token. */
1068 When you are using multiple data types, `yylval''s type is a union
1069 made from the `%union' declaration (*note The Collection of Value
1070 Types: Union Decl.). So when you store a token's value, you must use
1071 the proper member of the union. If the `%union' declaration looks like
1080 then the code in `yylex' might look like this:
1083 yylval.intval = value; /* Put value onto Bison stack. */
1084 return INT; /* Return the type of the token. */
1088 File: bison.info, Node: Token Positions, Next: Pure Calling, Prev: Token Values, Up: Lexical
1090 Textual Positions of Tokens
1091 ---------------------------
1093 If you are using the `@N'-feature (*note Tracking Locations:
1094 Locations.) in actions to keep track of the textual locations of tokens
1095 and groupings, then you must provide this information in `yylex'. The
1096 function `yyparse' expects to find the textual location of a token just
1097 parsed in the global variable `yylloc'. So `yylex' must store the
1098 proper data in that variable.
1100 By default, the value of `yylloc' is a structure and you need only
1101 initialize the members that are going to be used by the actions. The
1102 four members are called `first_line', `first_column', `last_line' and
1103 `last_column'. Note that the use of this feature makes the parser
1106 The data type of `yylloc' has the name `YYLTYPE'.
1109 File: bison.info, Node: Pure Calling, Prev: Token Positions, Up: Lexical
1111 Calling Conventions for Pure Parsers
1112 ------------------------------------
1114 When you use the Bison declaration `%pure_parser' to request a pure,
1115 reentrant parser, the global communication variables `yylval' and
1116 `yylloc' cannot be used. (*Note A Pure (Reentrant) Parser: Pure Decl.)
1117 In such parsers the two global variables are replaced by pointers
1118 passed as arguments to `yylex'. You must declare them as shown here,
1119 and pass the information back by storing it through those pointers.
1122 yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
1125 *lvalp = value; /* Put value onto Bison stack. */
1126 return INT; /* Return the type of the token. */
1130 If the grammar file does not use the `@' constructs to refer to
1131 textual positions, then the type `YYLTYPE' will not be defined. In
1132 this case, omit the second argument; `yylex' will be called with only
1135 If you use a reentrant parser, you can optionally pass additional
1136 parameter information to it in a reentrant way. To do so, define the
1137 macro `YYPARSE_PARAM' as a variable name. This modifies the `yyparse'
1138 function to accept one argument, of type `void *', with that name.
1140 When you call `yyparse', pass the address of an object, casting the
1141 address to `void *'. The grammar actions can refer to the contents of
1142 the object by casting the pointer value back to its proper type and
1143 then dereferencing it. Here's an example. Write this in the parser:
1146 struct parser_control
1152 #define YYPARSE_PARAM parm
1155 Then call the parser like this:
1157 struct parser_control
1166 struct parser_control foo;
1167 ... /* Store proper data in `foo'. */
1168 value = yyparse ((void *) &foo);
1172 In the grammar actions, use expressions like this to refer to the data:
1174 ((struct parser_control *) parm)->randomness
1176 If you wish to pass the additional parameter data to `yylex', define
1177 the macro `YYLEX_PARAM' just like `YYPARSE_PARAM', as shown here:
1180 struct parser_control
1186 #define YYPARSE_PARAM parm
1187 #define YYLEX_PARAM parm
1190 You should then define `yylex' to accept one additional
1191 argument--the value of `parm'. (This makes either two or three
1192 arguments in total, depending on whether an argument of type `YYLTYPE'
1193 is passed.) You can declare the argument as a pointer to the proper
1194 object type, or you can declare it as `void *' and access the contents
1197 You can use `%pure_parser' to request a reentrant parser without
1198 also using `YYPARSE_PARAM'. Then you should call `yyparse' with no
1199 arguments, as usual.
1202 File: bison.info, Node: Error Reporting, Next: Action Features, Prev: Lexical, Up: Interface
1204 The Error Reporting Function `yyerror'
1205 ======================================
1207 The Bison parser detects a "parse error" or "syntax error" whenever
1208 it reads a token which cannot satisfy any syntax rule. An action in
1209 the grammar can also explicitly proclaim an error, using the macro
1210 `YYERROR' (*note Special Features for Use in Actions: Action Features.).
1212 The Bison parser expects to report the error by calling an error
1213 reporting function named `yyerror', which you must supply. It is
1214 called by `yyparse' whenever a syntax error is found, and it receives
1215 one argument. For a parse error, the string is normally
1218 If you define the macro `YYERROR_VERBOSE' in the Bison declarations
1219 section (*note The Bison Declarations Section: Bison Declarations.),
1220 then Bison provides a more verbose and specific error message string
1221 instead of just plain `"parse error"'. It doesn't matter what
1222 definition you use for `YYERROR_VERBOSE', just whether you define it.
1224 The parser can detect one other kind of error: stack overflow. This
1225 happens when the input contains constructions that are very deeply
1226 nested. It isn't likely you will encounter this, since the Bison
1227 parser extends its stack automatically up to a very large limit. But
1228 if overflow happens, `yyparse' calls `yyerror' in the usual fashion,
1229 except that the argument string is `"parser stack overflow"'.
1231 The following definition suffices in simple programs:
1236 fprintf (stderr, "%s\n", s);
1239 After `yyerror' returns to `yyparse', the latter will attempt error
1240 recovery if you have written suitable error recovery grammar rules
1241 (*note Error Recovery::). If recovery is impossible, `yyparse' will
1242 immediately return 1.
1244 The variable `yynerrs' contains the number of syntax errors
1245 encountered so far. Normally this variable is global; but if you
1246 request a pure parser (*note A Pure (Reentrant) Parser: Pure Decl.)
1247 then it is a local variable which only the actions can access.