]> git.saurik.com Git - bison.git/blob - doc/bison.info-3
* tests/Makefile.am ($(srcdir)/$(TESTSUITE)): No longer depend upon package.m4.
[bison.git] / doc / bison.info-3
1 Ceci est le fichier Info bison.info, produit par Makeinfo version 4.0b
2 à partir bison.texinfo.
3
4 START-INFO-DIR-ENTRY
5 * bison: (bison). GNU Project parser generator (yacc replacement).
6 END-INFO-DIR-ENTRY
7
8 This file documents the Bison parser generator.
9
10 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1998, 1999,
11 2000, 2001 Free Software Foundation, Inc.
12
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.
16
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.
23
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.
30
31 \1f
32 File: bison.info, Node: Value Type, Next: Multiple Types, Up: Semantics
33
34 Data Types of Semantic Values
35 -----------------------------
36
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.).
41
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:
44
45 #define YYSTYPE double
46
47 This macro definition must go in the C declarations section of the
48 grammar file (*note Outline of a Bison Grammar: Grammar Outline.).
49
50 \1f
51 File: bison.info, Node: Multiple Types, Next: Actions, Prev: Value Type, Up: Semantics
52
53 More Than One Value Type
54 ------------------------
55
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.
60
61 To use more than one data type for semantic values in one parser,
62 Bison requires you to do two things:
63
64 * Specify the entire collection of possible data types, with the
65 `%union' Bison declaration (*note The Collection of Value Types:
66 Union Decl.).
67
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.).
73
74 \1f
75 File: bison.info, Node: Actions, Next: Action Types, Prev: Multiple Types, Up: Semantics
76
77 Actions
78 -------
79
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
84 groupings.
85
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.).
92
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
98 file.)
99
100 Here is a typical example:
101
102 exp: ...
103 | exp '+' exp
104 { $$ = $1 + $3; }
105
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
113 referred to as `$2'.
114
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.
121
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:
127
128 foo: expr bar '+' expr { ... }
129 | expr bar '-' expr { ... }
130 ;
131
132 bar: /* empty */
133 { previous_expr = $0; }
134 ;
135
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'.
138
139 \1f
140 File: bison.info, Node: Action Types, Next: Mid-Rule Actions, Prev: Actions, Up: Semantics
141
142 Data Types of Values in Actions
143 -------------------------------
144
145 If you have chosen a single data type for semantic values, the `$$'
146 and `$N' constructs always have that data type.
147
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,
153
154 exp: ...
155 | exp '+' exp
156 { $$ = $1 + $3; }
157
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.
162
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:
166
167 %union {
168 int itype;
169 double dtype;
170 }
171
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.
174
175 \1f
176 File: bison.info, Node: Mid-Rule Actions, Prev: Action Types, Up: Semantics
177
178 Actions in Mid-Rule
179 -------------------
180
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.
184
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.
188
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
193 N to use in `$N'.
194
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.
201
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
205 the end of the rule.
206
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
212 is how it is done:
213
214 stmt: LET '(' var ')'
215 { $<context>$ = push_context ();
216 declare_variable ($3); }
217 stmt { $$ = $6;
218 pop_context ($<context>5); }
219
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.
227
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.
233
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:
240
241 compound: '{' declarations statements '}'
242 | '{' statements '}'
243 ;
244
245 But when we add a mid-rule action as follows, the rules become
246 nonfunctional:
247
248 compound: { prepare_for_local_variables (); }
249 '{' declarations statements '}'
250 | '{' statements '}'
251 ;
252
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.)
259
260 You might think that you could correct the problem by putting
261 identical actions into the two rules, like this:
262
263 compound: { prepare_for_local_variables (); }
264 '{' declarations statements '}'
265 | { prepare_for_local_variables (); }
266 '{' statements '}'
267 ;
268
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
271 an action.)
272
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:
276
277 compound: '{' { prepare_for_local_variables (); }
278 declarations statements '}'
279 | '{' statements '}'
280 ;
281
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.
284
285 Another solution is to bury the action inside a nonterminal symbol
286 which serves as a subroutine:
287
288 subroutine: /* empty */
289 { prepare_for_local_variables (); }
290 ;
291
292 compound: subroutine
293 '{' declarations statements '}'
294 | subroutine
295 '{' statements '}'
296 ;
297
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.
303
304 \1f
305 File: bison.info, Node: Locations, Next: Declarations, Prev: Semantics, Up: Grammar File
306
307 Tracking Locations
308 ==================
309
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.
313
314 The way locations are handled is defined by providing a data type,
315 and actions to take when rules are matched.
316
317 * Menu:
318
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.
322
323 \1f
324 File: bison.info, Node: Location Type, Next: Actions and Locations, Up: Locations
325
326 Data Type of Locations
327 ----------------------
328
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.
331
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:
335
336 struct
337 {
338 int first_line;
339 int first_column;
340 int last_line;
341 int last_column;
342 }
343
344 \1f
345 File: bison.info, Node: Actions and Locations, Next: Location Default Action, Prev: Location Type, Up: Locations
346
347 Actions and Locations
348 ---------------------
349
350 Actions are not only useful for defining language semantics, but
351 also for describing the behavior of the output parser with locations.
352
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
358 `@$'.
359
360 Here is a basic example using the default data type for locations:
361
362 exp: ...
363 | exp '/' exp
364 {
365 @$.first_column = @1.first_column;
366 @$.first_line = @1.first_line;
367 @$.last_column = @3.last_column;
368 @$.last_line = @3.last_line;
369 if ($3)
370 $$ = $1 / $3;
371 else
372 {
373 $$ = 1;
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);
377 }
378 }
379
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
383 last symbol.
384
385 With this default action, the location tracking can be fully
386 automatic. The example above simply rewrites this way:
387
388 exp: ...
389 | exp '/' exp
390 {
391 if ($3)
392 $$ = $1 / $3;
393 else
394 {
395 $$ = 1;
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);
399 }
400 }
401
402 \1f
403 File: bison.info, Node: Location Default Action, Prev: Actions and Locations, Up: Locations
404
405 Default Action for Locations
406 ----------------------------
407
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.
413
414 Most of the time, this macro is general enough to suppress location
415 dedicated code from semantic actions.
416
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.
422
423 By default, it is defined this way:
424
425 #define YYLLOC_DEFAULT(Current, Rhs, N) \
426 Current.last_line = Rhs[N].last_line; \
427 Current.last_column = Rhs[N].last_column;
428
429 When defining `YYLLOC_DEFAULT', you should consider that:
430
431 * All arguments are free of side-effects. However, only the first
432 one (the result) should be modified by `YYLLOC_DEFAULT'.
433
434 * Before `YYLLOC_DEFAULT' is executed, the output parser sets `@$'
435 to `@1'.
436
437 * For consistency with semantic actions, valid indexes for the
438 location array range from 1 to N.
439
440 \1f
441 File: bison.info, Node: Declarations, Next: Multiple Parsers, Prev: Locations, Up: Grammar File
442
443 Bison Declarations
444 ==================
445
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::.
449
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.).
454
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.).
459
460 * Menu:
461
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.
470
471 \1f
472 File: bison.info, Node: Token Decl, Next: Precedence Decl, Up: Declarations
473
474 Token Type Names
475 ----------------
476
477 The basic way to declare a token type name (terminal symbol) is as
478 follows:
479
480 %token NAME
481
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.
485
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.
489
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
492 name:
493
494 %token NUM 300
495
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.
499
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.).
504
505 For example:
506
507 %union { /* define stack type */
508 double val;
509 symrec *tptr;
510 }
511 %token <val> NUM /* define token NUM and its type */
512
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:
516
517 %token arrow "=>"
518
519 For example, a grammar for the C language might specify these names with
520 equivalent literal string tokens:
521
522 %token <operator> OR "||"
523 %token <operator> LE 134 "<="
524 %left OR "<="
525
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::).
530
531 \1f
532 File: bison.info, Node: Precedence Decl, Next: Union Decl, Prev: Token Decl, Up: Declarations
533
534 Operator Precedence
535 -------------------
536
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.
541
542 The syntax of a precedence declaration is the same as that of
543 `%token': either
544
545 %left SYMBOLS...
546
547 or
548
549 %left <TYPE> SYMBOLS...
550
551 And indeed any of these declarations serves the purposes of `%token'.
552 But in addition, they specify the associativity and relative precedence
553 for all the SYMBOLS:
554
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.
562
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.
569
570 \1f
571 File: bison.info, Node: Union Decl, Next: Type Decl, Prev: Precedence Decl, Up: Declarations
572
573 The Collection of Value Types
574 -----------------------------
575
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
579 C.
580
581 For example:
582
583 %union {
584 double val;
585 symrec *tptr;
586 }
587
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.).
592
593 Note that, unlike making a `union' declaration in C, you do not write
594 a semicolon after the closing brace.
595
596 \1f
597 File: bison.info, Node: Type Decl, Next: Expect Decl, Prev: Union Decl, Up: Declarations
598
599 Nonterminal Symbols
600 -------------------
601
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:
605
606 %type <TYPE> NONTERMINAL...
607
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.
613
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>'.
617
618 \1f
619 File: bison.info, Node: Expect Decl, Next: Start Decl, Prev: Type Decl, Up: Declarations
620
621 Suppressing Conflict Warnings
622 -----------------------------
623
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.
630
631 The declaration looks like this:
632
633 %expect N
634
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.
639
640 In general, using `%expect' involves these steps:
641
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.
645
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.
649
650 * Add an `%expect' declaration, copying the number N from the number
651 which Bison printed.
652
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.
656
657 \1f
658 File: bison.info, Node: Start Decl, Next: Pure Decl, Prev: Expect Decl, Up: Declarations
659
660 The Start-Symbol
661 ----------------
662
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:
667
668 %start SYMBOL
669
670 \1f
671 File: bison.info, Node: Pure Decl, Next: Decl Summary, Prev: Start Decl, Up: Declarations
672
673 A Pure (Reentrant) Parser
674 -------------------------
675
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.
682
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'.)
688
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:
692
693 %pure_parser
694
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.
702
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
705 valid grammar.
706
707 \1f
708 File: bison.info, Node: Decl Summary, Prev: Pure Decl, Up: Declarations
709
710 Bison Declaration Summary
711 -------------------------
712
713 Here is a summary of all Bison declarations:
714
715 `%union'
716 Declare the collection of data types that semantic values may have
717 (*note The Collection of Value Types: Union Decl.).
718
719 `%token'
720 Declare a terminal symbol (token type name) with no precedence or
721 associativity specified (*note Token Type Names: Token Decl.).
722
723 `%right'
724 Declare a terminal symbol (token type name) that is
725 right-associative (*note Operator Precedence: Precedence Decl.).
726
727 `%left'
728 Declare a terminal symbol (token type name) that is
729 left-associative (*note Operator Precedence: Precedence Decl.).
730
731 `%nonassoc'
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.).
735
736 `%type'
737 Declare the type of semantic values for a nonterminal symbol
738 (*note Nonterminal Symbols: Type Decl.).
739
740 `%start'
741 Specify the grammar's start symbol (*note The Start-Symbol: Start
742 Decl.).
743
744 `%expect'
745 Declare the expected number of shift-reduce conflicts (*note
746 Suppressing Conflict Warnings: Expect Decl.).
747
748 `%yacc'
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.
752
753 `%locations'
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.
759
760 `%pure_parser'
761 Request a pure (reentrant) parser program (*note A Pure
762 (Reentrant) Parser: Pure Decl.).
763
764 `%no_parser'
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.
768
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.
772
773 `%no_lines'
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.
780
781 `%debug'
782 Output a definition of the macro `YYDEBUG' into the parser file, so
783 that the debugging facilities are compiled. *Note Debugging Your
784 Parser: Debugging.
785
786 `%defines'
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.
790
791 If the parser output file is named `NAME.c' then this file is
792 named `NAME.h'.
793
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.
798
799 `%verbose'
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
802 that state.
803
804 This file also describes all the conflicts, both those resolved by
805 operator precedence and the unresolved ones.
806
807 The file's name is made by removing `.tab.c' or `.c' from the
808 parser output file name, and adding `.output' instead.
809
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'.
813
814 `%token_table'
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
820 file.
821
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
830 `"\"*\"*\""').
831
832 When you specify `%token_table', Bison also generates macro
833 definitions for macros `YYNTOKENS', `YYNNTS', and `YYNRULES', and
834 `YYNSTATES':
835
836 `YYNTOKENS'
837 The highest token number, plus one.
838
839 `YYNNTS'
840 The number of nonterminal symbols.
841
842 `YYNRULES'
843 The number of grammar rules,
844
845 `YYNSTATES'
846 The number of parser states (*note Parser States::).
847
848 \1f
849 File: bison.info, Node: Multiple Parsers, Prev: Declarations, Up: Grammar File
850
851 Multiple Parsers in the Same Program
852 ====================================
853
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
858 on.
859
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
864 conflict.
865
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.
869
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.).
875
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
879 parser file.
880
881 \1f
882 File: bison.info, Node: Interface, Next: Algorithm, Prev: Grammar File, Up: Top
883
884 Parser C-Language Interface
885 ***************************
886
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.
890
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.
895
896 * Menu:
897
898 * Parser Function:: How to call `yyparse' and what it returns.
899 * Lexical:: You must supply a function `yylex'
900 which reads tokens.
901 * Error Reporting:: You must supply a function `yyerror'.
902 * Action Features:: Special features for use in actions.
903
904 \1f
905 File: bison.info, Node: Parser Function, Next: Lexical, Up: Interface
906
907 The Parser Function `yyparse'
908 =============================
909
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
914 reading further.
915
916 The value returned by `yyparse' is 0 if parsing was successful
917 (return is due to end-of-input).
918
919 The value is 1 if parsing failed (return is due to a syntax error).
920
921 In an action, you can cause immediate return from `yyparse' by using
922 these macros:
923
924 `YYACCEPT'
925 Return immediately with value 0 (to report success).
926
927 `YYABORT'
928 Return immediately with value 1 (to report failure).
929
930 \1f
931 File: bison.info, Node: Lexical, Next: Error Reporting, Prev: Parser Function, Up: Interface
932
933 The Lexical Analyzer Function `yylex'
934 =====================================
935
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.
940
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.
948
949 * Menu:
950
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
956 actions want that.
957 * Pure Calling:: How the calling convention differs
958 in a pure parser (*note A Pure (Reentrant) Parser: Pure Decl.).
959
960 \1f
961 File: bison.info, Node: Calling Convention, Next: Token Values, Up: Lexical
962
963 Calling Convention for `yylex'
964 ------------------------------
965
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.
968
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::.
973
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.
979
980 Here is an example showing these things:
981
982 int
983 yylex (void)
984 {
985 ...
986 if (c == EOF) /* Detect end of file. */
987 return 0;
988 ...
989 if (c == '+' || c == '-')
990 return c; /* Assume token type for `+' is '+'. */
991 ...
992 return INT; /* Return the type of the token. */
993 ...
994 }
995
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'.
998
999 If the grammar uses literal string tokens, there are two ways that
1000 `yylex' can determine the token type codes for them:
1001
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'.
1006
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.
1013
1014 Here's code for looking up a token in `yytname', assuming that the
1015 characters of the token are stored in `token_buffer'.
1016
1017 for (i = 0; i < YYNTOKENS; i++)
1018 {
1019 if (yytname[i] != 0
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)
1025 break;
1026 }
1027
1028 The `yytname' table is generated only if you use the
1029 `%token_table' declaration. *Note Decl Summary::.
1030
1031 \1f
1032 File: bison.info, Node: Token Values, Next: Token Positions, Prev: Calling Convention, Up: Lexical
1033
1034 Semantic Values of Tokens
1035 -------------------------
1036
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
1041 `yylex':
1042
1043 ...
1044 yylval = value; /* Put value onto Bison stack. */
1045 return INT; /* Return the type of the token. */
1046 ...
1047
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
1052 this:
1053
1054 %union {
1055 int intval;
1056 double val;
1057 symrec *tptr;
1058 }
1059
1060 then the code in `yylex' might look like this:
1061
1062 ...
1063 yylval.intval = value; /* Put value onto Bison stack. */
1064 return INT; /* Return the type of the token. */
1065 ...
1066
1067 \1f
1068 File: bison.info, Node: Token Positions, Next: Pure Calling, Prev: Token Values, Up: Lexical
1069
1070 Textual Positions of Tokens
1071 ---------------------------
1072
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.
1079
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
1084 noticeably slower.
1085
1086 The data type of `yylloc' has the name `YYLTYPE'.
1087
1088 \1f
1089 File: bison.info, Node: Pure Calling, Prev: Token Positions, Up: Lexical
1090
1091 Calling Conventions for Pure Parsers
1092 ------------------------------------
1093
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.
1100
1101 int
1102 yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
1103 {
1104 ...
1105 *lvalp = value; /* Put value onto Bison stack. */
1106 return INT; /* Return the type of the token. */
1107 ...
1108 }
1109
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
1113 one argument.
1114
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.
1119
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:
1124
1125 %{
1126 struct parser_control
1127 {
1128 int nastiness;
1129 int randomness;
1130 };
1131
1132 #define YYPARSE_PARAM parm
1133 %}
1134
1135 Then call the parser like this:
1136
1137 struct parser_control
1138 {
1139 int nastiness;
1140 int randomness;
1141 };
1142
1143 ...
1144
1145 {
1146 struct parser_control foo;
1147 ... /* Store proper data in `foo'. */
1148 value = yyparse ((void *) &foo);
1149 ...
1150 }
1151
1152 In the grammar actions, use expressions like this to refer to the data:
1153
1154 ((struct parser_control *) parm)->randomness
1155
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:
1158
1159 %{
1160 struct parser_control
1161 {
1162 int nastiness;
1163 int randomness;
1164 };
1165
1166 #define YYPARSE_PARAM parm
1167 #define YYLEX_PARAM parm
1168 %}
1169
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
1175 as shown above.
1176
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.
1180
1181 \1f
1182 File: bison.info, Node: Error Reporting, Next: Action Features, Prev: Lexical, Up: Interface
1183
1184 The Error Reporting Function `yyerror'
1185 ======================================
1186
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.).
1191
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
1196 `"parse error"'.
1197
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.
1203
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"'.
1210
1211 The following definition suffices in simple programs:
1212
1213 void
1214 yyerror (char *s)
1215 {
1216 fprintf (stderr, "%s\n", s);
1217 }
1218
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.
1223
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.
1228
1229 \1f
1230 File: bison.info, Node: Action Features, Prev: Error Reporting, Up: Interface
1231
1232 Special Features for Use in Actions
1233 ===================================
1234
1235 Here is a table of Bison constructs, variables and macros that are
1236 useful in actions.
1237
1238 `$$'
1239 Acts like a variable that contains the semantic value for the
1240 grouping made by the current rule. *Note Actions::.
1241
1242 `$N'
1243 Acts like a variable that contains the semantic value for the Nth
1244 component of the current rule. *Note Actions::.
1245
1246 `$<TYPEALT>$'
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.
1250
1251 `$<TYPEALT>N'
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.
1255
1256 `YYABORT;'
1257 Return immediately from `yyparse', indicating failure. *Note The
1258 Parser Function `yyparse': Parser Function.
1259
1260 `YYACCEPT;'
1261 Return immediately from `yyparse', indicating success. *Note The
1262 Parser Function `yyparse': Parser Function.
1263
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.
1270
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.
1274
1275 In either case, the rest of the action is not executed.
1276
1277 `YYEMPTY'
1278 Value stored in `yychar' when there is no look-ahead token.
1279
1280 `YYERROR;'
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
1286 Recovery::.
1287
1288 `YYRECOVERING'
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::.
1292
1293 `yychar'
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.
1298
1299 `yyclearin;'
1300 Discard the current look-ahead token. This is useful primarily in
1301 error rules. *Note Error Recovery::.
1302
1303 `yyerrok;'
1304 Resume generating error messages immediately for subsequent syntax
1305 errors. This is useful primarily in error rules. *Note Error
1306 Recovery::.
1307
1308 `@$'
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.
1312
1313 `@N'
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.
1317