]> git.saurik.com Git - bison.git/blob - doc/bison.info-4
* tests/Makefile.am ($(srcdir)/$(TESTSUITE)): No longer depend upon package.m4.
[bison.git] / doc / bison.info-4
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: Algorithm, Next: Error Recovery, Prev: Interface, Up: Top
33
34 The Bison Parser Algorithm
35 **************************
36
37 As Bison reads tokens, it pushes them onto a stack along with their
38 semantic values. The stack is called the "parser stack". Pushing a
39 token is traditionally called "shifting".
40
41 For example, suppose the infix calculator has read `1 + 5 *', with a
42 `3' to come. The stack will have four elements, one for each token
43 that was shifted.
44
45 But the stack does not always have an element for each token read.
46 When the last N tokens and groupings shifted match the components of a
47 grammar rule, they can be combined according to that rule. This is
48 called "reduction". Those tokens and groupings are replaced on the
49 stack by a single grouping whose symbol is the result (left hand side)
50 of that rule. Running the rule's action is part of the process of
51 reduction, because this is what computes the semantic value of the
52 resulting grouping.
53
54 For example, if the infix calculator's parser stack contains this:
55
56 1 + 5 * 3
57
58 and the next input token is a newline character, then the last three
59 elements can be reduced to 15 via the rule:
60
61 expr: expr '*' expr;
62
63 Then the stack contains just these three elements:
64
65 1 + 15
66
67 At this point, another reduction can be made, resulting in the single
68 value 16. Then the newline token can be shifted.
69
70 The parser tries, by shifts and reductions, to reduce the entire
71 input down to a single grouping whose symbol is the grammar's
72 start-symbol (*note Languages and Context-Free Grammars: Language and
73 Grammar.).
74
75 This kind of parser is known in the literature as a bottom-up parser.
76
77 * Menu:
78
79 * Look-Ahead:: Parser looks one token ahead when deciding what to do.
80 * Shift/Reduce:: Conflicts: when either shifting or reduction is valid.
81 * Precedence:: Operator precedence works by resolving conflicts.
82 * Contextual Precedence:: When an operator's precedence depends on context.
83 * Parser States:: The parser is a finite-state-machine with stack.
84 * Reduce/Reduce:: When two rules are applicable in the same situation.
85 * Mystery Conflicts:: Reduce/reduce conflicts that look unjustified.
86 * Stack Overflow:: What happens when stack gets full. How to avoid it.
87
88 \1f
89 File: bison.info, Node: Look-Ahead, Next: Shift/Reduce, Up: Algorithm
90
91 Look-Ahead Tokens
92 =================
93
94 The Bison parser does _not_ always reduce immediately as soon as the
95 last N tokens and groupings match a rule. This is because such a
96 simple strategy is inadequate to handle most languages. Instead, when a
97 reduction is possible, the parser sometimes "looks ahead" at the next
98 token in order to decide what to do.
99
100 When a token is read, it is not immediately shifted; first it
101 becomes the "look-ahead token", which is not on the stack. Now the
102 parser can perform one or more reductions of tokens and groupings on
103 the stack, while the look-ahead token remains off to the side. When no
104 more reductions should take place, the look-ahead token is shifted onto
105 the stack. This does not mean that all possible reductions have been
106 done; depending on the token type of the look-ahead token, some rules
107 may choose to delay their application.
108
109 Here is a simple case where look-ahead is needed. These three rules
110 define expressions which contain binary addition operators and postfix
111 unary factorial operators (`!'), and allow parentheses for grouping.
112
113 expr: term '+' expr
114 | term
115 ;
116
117 term: '(' expr ')'
118 | term '!'
119 | NUMBER
120 ;
121
122 Suppose that the tokens `1 + 2' have been read and shifted; what
123 should be done? If the following token is `)', then the first three
124 tokens must be reduced to form an `expr'. This is the only valid
125 course, because shifting the `)' would produce a sequence of symbols
126 `term ')'', and no rule allows this.
127
128 If the following token is `!', then it must be shifted immediately so
129 that `2 !' can be reduced to make a `term'. If instead the parser were
130 to reduce before shifting, `1 + 2' would become an `expr'. It would
131 then be impossible to shift the `!' because doing so would produce on
132 the stack the sequence of symbols `expr '!''. No rule allows that
133 sequence.
134
135 The current look-ahead token is stored in the variable `yychar'.
136 *Note Special Features for Use in Actions: Action Features.
137
138 \1f
139 File: bison.info, Node: Shift/Reduce, Next: Precedence, Prev: Look-Ahead, Up: Algorithm
140
141 Shift/Reduce Conflicts
142 ======================
143
144 Suppose we are parsing a language which has if-then and if-then-else
145 statements, with a pair of rules like this:
146
147 if_stmt:
148 IF expr THEN stmt
149 | IF expr THEN stmt ELSE stmt
150 ;
151
152 Here we assume that `IF', `THEN' and `ELSE' are terminal symbols for
153 specific keyword tokens.
154
155 When the `ELSE' token is read and becomes the look-ahead token, the
156 contents of the stack (assuming the input is valid) are just right for
157 reduction by the first rule. But it is also legitimate to shift the
158 `ELSE', because that would lead to eventual reduction by the second
159 rule.
160
161 This situation, where either a shift or a reduction would be valid,
162 is called a "shift/reduce conflict". Bison is designed to resolve
163 these conflicts by choosing to shift, unless otherwise directed by
164 operator precedence declarations. To see the reason for this, let's
165 contrast it with the other alternative.
166
167 Since the parser prefers to shift the `ELSE', the result is to attach
168 the else-clause to the innermost if-statement, making these two inputs
169 equivalent:
170
171 if x then if y then win (); else lose;
172
173 if x then do; if y then win (); else lose; end;
174
175 But if the parser chose to reduce when possible rather than shift,
176 the result would be to attach the else-clause to the outermost
177 if-statement, making these two inputs equivalent:
178
179 if x then if y then win (); else lose;
180
181 if x then do; if y then win (); end; else lose;
182
183 The conflict exists because the grammar as written is ambiguous:
184 either parsing of the simple nested if-statement is legitimate. The
185 established convention is that these ambiguities are resolved by
186 attaching the else-clause to the innermost if-statement; this is what
187 Bison accomplishes by choosing to shift rather than reduce. (It would
188 ideally be cleaner to write an unambiguous grammar, but that is very
189 hard to do in this case.) This particular ambiguity was first
190 encountered in the specifications of Algol 60 and is called the
191 "dangling `else'" ambiguity.
192
193 To avoid warnings from Bison about predictable, legitimate
194 shift/reduce conflicts, use the `%expect N' declaration. There will be
195 no warning as long as the number of shift/reduce conflicts is exactly N.
196 *Note Suppressing Conflict Warnings: Expect Decl.
197
198 The definition of `if_stmt' above is solely to blame for the
199 conflict, but the conflict does not actually appear without additional
200 rules. Here is a complete Bison input file that actually manifests the
201 conflict:
202
203 %token IF THEN ELSE variable
204 %%
205 stmt: expr
206 | if_stmt
207 ;
208
209 if_stmt:
210 IF expr THEN stmt
211 | IF expr THEN stmt ELSE stmt
212 ;
213
214 expr: variable
215 ;
216
217 \1f
218 File: bison.info, Node: Precedence, Next: Contextual Precedence, Prev: Shift/Reduce, Up: Algorithm
219
220 Operator Precedence
221 ===================
222
223 Another situation where shift/reduce conflicts appear is in
224 arithmetic expressions. Here shifting is not always the preferred
225 resolution; the Bison declarations for operator precedence allow you to
226 specify when to shift and when to reduce.
227
228 * Menu:
229
230 * Why Precedence:: An example showing why precedence is needed.
231 * Using Precedence:: How to specify precedence in Bison grammars.
232 * Precedence Examples:: How these features are used in the previous example.
233 * How Precedence:: How they work.
234
235 \1f
236 File: bison.info, Node: Why Precedence, Next: Using Precedence, Up: Precedence
237
238 When Precedence is Needed
239 -------------------------
240
241 Consider the following ambiguous grammar fragment (ambiguous because
242 the input `1 - 2 * 3' can be parsed in two different ways):
243
244 expr: expr '-' expr
245 | expr '*' expr
246 | expr '<' expr
247 | '(' expr ')'
248 ...
249 ;
250
251 Suppose the parser has seen the tokens `1', `-' and `2'; should it
252 reduce them via the rule for the subtraction operator? It depends on
253 the next token. Of course, if the next token is `)', we must reduce;
254 shifting is invalid because no single rule can reduce the token
255 sequence `- 2 )' or anything starting with that. But if the next token
256 is `*' or `<', we have a choice: either shifting or reduction would
257 allow the parse to complete, but with different results.
258
259 To decide which one Bison should do, we must consider the results.
260 If the next operator token OP is shifted, then it must be reduced first
261 in order to permit another opportunity to reduce the difference. The
262 result is (in effect) `1 - (2 OP 3)'. On the other hand, if the
263 subtraction is reduced before shifting OP, the result is
264 `(1 - 2) OP 3'. Clearly, then, the choice of shift or reduce should
265 depend on the relative precedence of the operators `-' and OP: `*'
266 should be shifted first, but not `<'.
267
268 What about input such as `1 - 2 - 5'; should this be `(1 - 2) - 5'
269 or should it be `1 - (2 - 5)'? For most operators we prefer the
270 former, which is called "left association". The latter alternative,
271 "right association", is desirable for assignment operators. The choice
272 of left or right association is a matter of whether the parser chooses
273 to shift or reduce when the stack contains `1 - 2' and the look-ahead
274 token is `-': shifting makes right-associativity.
275
276 \1f
277 File: bison.info, Node: Using Precedence, Next: Precedence Examples, Prev: Why Precedence, Up: Precedence
278
279 Specifying Operator Precedence
280 ------------------------------
281
282 Bison allows you to specify these choices with the operator
283 precedence declarations `%left' and `%right'. Each such declaration
284 contains a list of tokens, which are operators whose precedence and
285 associativity is being declared. The `%left' declaration makes all
286 those operators left-associative and the `%right' declaration makes
287 them right-associative. A third alternative is `%nonassoc', which
288 declares that it is a syntax error to find the same operator twice "in a
289 row".
290
291 The relative precedence of different operators is controlled by the
292 order in which they are declared. The first `%left' or `%right'
293 declaration in the file declares the operators whose precedence is
294 lowest, the next such declaration declares the operators whose
295 precedence is a little higher, and so on.
296
297 \1f
298 File: bison.info, Node: Precedence Examples, Next: How Precedence, Prev: Using Precedence, Up: Precedence
299
300 Precedence Examples
301 -------------------
302
303 In our example, we would want the following declarations:
304
305 %left '<'
306 %left '-'
307 %left '*'
308
309 In a more complete example, which supports other operators as well,
310 we would declare them in groups of equal precedence. For example,
311 `'+'' is declared with `'-'':
312
313 %left '<' '>' '=' NE LE GE
314 %left '+' '-'
315 %left '*' '/'
316
317 (Here `NE' and so on stand for the operators for "not equal" and so on.
318 We assume that these tokens are more than one character long and
319 therefore are represented by names, not character literals.)
320
321 \1f
322 File: bison.info, Node: How Precedence, Prev: Precedence Examples, Up: Precedence
323
324 How Precedence Works
325 --------------------
326
327 The first effect of the precedence declarations is to assign
328 precedence levels to the terminal symbols declared. The second effect
329 is to assign precedence levels to certain rules: each rule gets its
330 precedence from the last terminal symbol mentioned in the components.
331 (You can also specify explicitly the precedence of a rule. *Note
332 Context-Dependent Precedence: Contextual Precedence.)
333
334 Finally, the resolution of conflicts works by comparing the
335 precedence of the rule being considered with that of the look-ahead
336 token. If the token's precedence is higher, the choice is to shift.
337 If the rule's precedence is higher, the choice is to reduce. If they
338 have equal precedence, the choice is made based on the associativity of
339 that precedence level. The verbose output file made by `-v' (*note
340 Invoking Bison: Invocation.) says how each conflict was resolved.
341
342 Not all rules and not all tokens have precedence. If either the
343 rule or the look-ahead token has no precedence, then the default is to
344 shift.
345
346 \1f
347 File: bison.info, Node: Contextual Precedence, Next: Parser States, Prev: Precedence, Up: Algorithm
348
349 Context-Dependent Precedence
350 ============================
351
352 Often the precedence of an operator depends on the context. This
353 sounds outlandish at first, but it is really very common. For example,
354 a minus sign typically has a very high precedence as a unary operator,
355 and a somewhat lower precedence (lower than multiplication) as a binary
356 operator.
357
358 The Bison precedence declarations, `%left', `%right' and
359 `%nonassoc', can only be used once for a given token; so a token has
360 only one precedence declared in this way. For context-dependent
361 precedence, you need to use an additional mechanism: the `%prec'
362 modifier for rules.
363
364 The `%prec' modifier declares the precedence of a particular rule by
365 specifying a terminal symbol whose precedence should be used for that
366 rule. It's not necessary for that symbol to appear otherwise in the
367 rule. The modifier's syntax is:
368
369 %prec TERMINAL-SYMBOL
370
371 and it is written after the components of the rule. Its effect is to
372 assign the rule the precedence of TERMINAL-SYMBOL, overriding the
373 precedence that would be deduced for it in the ordinary way. The
374 altered rule precedence then affects how conflicts involving that rule
375 are resolved (*note Operator Precedence: Precedence.).
376
377 Here is how `%prec' solves the problem of unary minus. First,
378 declare a precedence for a fictitious terminal symbol named `UMINUS'.
379 There are no tokens of this type, but the symbol serves to stand for its
380 precedence:
381
382 ...
383 %left '+' '-'
384 %left '*'
385 %left UMINUS
386
387 Now the precedence of `UMINUS' can be used in specific rules:
388
389 exp: ...
390 | exp '-' exp
391 ...
392 | '-' exp %prec UMINUS
393
394 \1f
395 File: bison.info, Node: Parser States, Next: Reduce/Reduce, Prev: Contextual Precedence, Up: Algorithm
396
397 Parser States
398 =============
399
400 The function `yyparse' is implemented using a finite-state machine.
401 The values pushed on the parser stack are not simply token type codes;
402 they represent the entire sequence of terminal and nonterminal symbols
403 at or near the top of the stack. The current state collects all the
404 information about previous input which is relevant to deciding what to
405 do next.
406
407 Each time a look-ahead token is read, the current parser state
408 together with the type of look-ahead token are looked up in a table.
409 This table entry can say, "Shift the look-ahead token." In this case,
410 it also specifies the new parser state, which is pushed onto the top of
411 the parser stack. Or it can say, "Reduce using rule number N." This
412 means that a certain number of tokens or groupings are taken off the
413 top of the stack, and replaced by one grouping. In other words, that
414 number of states are popped from the stack, and one new state is pushed.
415
416 There is one other alternative: the table can say that the
417 look-ahead token is erroneous in the current state. This causes error
418 processing to begin (*note Error Recovery::).
419
420 \1f
421 File: bison.info, Node: Reduce/Reduce, Next: Mystery Conflicts, Prev: Parser States, Up: Algorithm
422
423 Reduce/Reduce Conflicts
424 =======================
425
426 A reduce/reduce conflict occurs if there are two or more rules that
427 apply to the same sequence of input. This usually indicates a serious
428 error in the grammar.
429
430 For example, here is an erroneous attempt to define a sequence of
431 zero or more `word' groupings.
432
433 sequence: /* empty */
434 { printf ("empty sequence\n"); }
435 | maybeword
436 | sequence word
437 { printf ("added word %s\n", $2); }
438 ;
439
440 maybeword: /* empty */
441 { printf ("empty maybeword\n"); }
442 | word
443 { printf ("single word %s\n", $1); }
444 ;
445
446 The error is an ambiguity: there is more than one way to parse a single
447 `word' into a `sequence'. It could be reduced to a `maybeword' and
448 then into a `sequence' via the second rule. Alternatively,
449 nothing-at-all could be reduced into a `sequence' via the first rule,
450 and this could be combined with the `word' using the third rule for
451 `sequence'.
452
453 There is also more than one way to reduce nothing-at-all into a
454 `sequence'. This can be done directly via the first rule, or
455 indirectly via `maybeword' and then the second rule.
456
457 You might think that this is a distinction without a difference,
458 because it does not change whether any particular input is valid or
459 not. But it does affect which actions are run. One parsing order runs
460 the second rule's action; the other runs the first rule's action and
461 the third rule's action. In this example, the output of the program
462 changes.
463
464 Bison resolves a reduce/reduce conflict by choosing to use the rule
465 that appears first in the grammar, but it is very risky to rely on
466 this. Every reduce/reduce conflict must be studied and usually
467 eliminated. Here is the proper way to define `sequence':
468
469 sequence: /* empty */
470 { printf ("empty sequence\n"); }
471 | sequence word
472 { printf ("added word %s\n", $2); }
473 ;
474
475 Here is another common error that yields a reduce/reduce conflict:
476
477 sequence: /* empty */
478 | sequence words
479 | sequence redirects
480 ;
481
482 words: /* empty */
483 | words word
484 ;
485
486 redirects:/* empty */
487 | redirects redirect
488 ;
489
490 The intention here is to define a sequence which can contain either
491 `word' or `redirect' groupings. The individual definitions of
492 `sequence', `words' and `redirects' are error-free, but the three
493 together make a subtle ambiguity: even an empty input can be parsed in
494 infinitely many ways!
495
496 Consider: nothing-at-all could be a `words'. Or it could be two
497 `words' in a row, or three, or any number. It could equally well be a
498 `redirects', or two, or any number. Or it could be a `words' followed
499 by three `redirects' and another `words'. And so on.
500
501 Here are two ways to correct these rules. First, to make it a
502 single level of sequence:
503
504 sequence: /* empty */
505 | sequence word
506 | sequence redirect
507 ;
508
509 Second, to prevent either a `words' or a `redirects' from being
510 empty:
511
512 sequence: /* empty */
513 | sequence words
514 | sequence redirects
515 ;
516
517 words: word
518 | words word
519 ;
520
521 redirects:redirect
522 | redirects redirect
523 ;
524
525 \1f
526 File: bison.info, Node: Mystery Conflicts, Next: Stack Overflow, Prev: Reduce/Reduce, Up: Algorithm
527
528 Mysterious Reduce/Reduce Conflicts
529 ==================================
530
531 Sometimes reduce/reduce conflicts can occur that don't look
532 warranted. Here is an example:
533
534 %token ID
535
536 %%
537 def: param_spec return_spec ','
538 ;
539 param_spec:
540 type
541 | name_list ':' type
542 ;
543 return_spec:
544 type
545 | name ':' type
546 ;
547 type: ID
548 ;
549 name: ID
550 ;
551 name_list:
552 name
553 | name ',' name_list
554 ;
555
556 It would seem that this grammar can be parsed with only a single
557 token of look-ahead: when a `param_spec' is being read, an `ID' is a
558 `name' if a comma or colon follows, or a `type' if another `ID'
559 follows. In other words, this grammar is LR(1).
560
561 However, Bison, like most parser generators, cannot actually handle
562 all LR(1) grammars. In this grammar, two contexts, that after an `ID'
563 at the beginning of a `param_spec' and likewise at the beginning of a
564 `return_spec', are similar enough that Bison assumes they are the same.
565 They appear similar because the same set of rules would be active--the
566 rule for reducing to a `name' and that for reducing to a `type'. Bison
567 is unable to determine at that stage of processing that the rules would
568 require different look-ahead tokens in the two contexts, so it makes a
569 single parser state for them both. Combining the two contexts causes a
570 conflict later. In parser terminology, this occurrence means that the
571 grammar is not LALR(1).
572
573 In general, it is better to fix deficiencies than to document them.
574 But this particular deficiency is intrinsically hard to fix; parser
575 generators that can handle LR(1) grammars are hard to write and tend to
576 produce parsers that are very large. In practice, Bison is more useful
577 as it is now.
578
579 When the problem arises, you can often fix it by identifying the two
580 parser states that are being confused, and adding something to make them
581 look distinct. In the above example, adding one rule to `return_spec'
582 as follows makes the problem go away:
583
584 %token BOGUS
585 ...
586 %%
587 ...
588 return_spec:
589 type
590 | name ':' type
591 /* This rule is never used. */
592 | ID BOGUS
593 ;
594
595 This corrects the problem because it introduces the possibility of an
596 additional active rule in the context after the `ID' at the beginning of
597 `return_spec'. This rule is not active in the corresponding context in
598 a `param_spec', so the two contexts receive distinct parser states. As
599 long as the token `BOGUS' is never generated by `yylex', the added rule
600 cannot alter the way actual input is parsed.
601
602 In this particular example, there is another way to solve the
603 problem: rewrite the rule for `return_spec' to use `ID' directly
604 instead of via `name'. This also causes the two confusing contexts to
605 have different sets of active rules, because the one for `return_spec'
606 activates the altered rule for `return_spec' rather than the one for
607 `name'.
608
609 param_spec:
610 type
611 | name_list ':' type
612 ;
613 return_spec:
614 type
615 | ID ':' type
616 ;
617
618 \1f
619 File: bison.info, Node: Stack Overflow, Prev: Mystery Conflicts, Up: Algorithm
620
621 Stack Overflow, and How to Avoid It
622 ===================================
623
624 The Bison parser stack can overflow if too many tokens are shifted
625 and not reduced. When this happens, the parser function `yyparse'
626 returns a nonzero value, pausing only to call `yyerror' to report the
627 overflow.
628
629 By defining the macro `YYMAXDEPTH', you can control how deep the
630 parser stack can become before a stack overflow occurs. Define the
631 macro with a value that is an integer. This value is the maximum number
632 of tokens that can be shifted (and not reduced) before overflow. It
633 must be a constant expression whose value is known at compile time.
634
635 The stack space allowed is not necessarily allocated. If you
636 specify a large value for `YYMAXDEPTH', the parser actually allocates a
637 small stack at first, and then makes it bigger by stages as needed.
638 This increasing allocation happens automatically and silently.
639 Therefore, you do not need to make `YYMAXDEPTH' painfully small merely
640 to save space for ordinary inputs that do not need much stack.
641
642 The default value of `YYMAXDEPTH', if you do not define it, is 10000.
643
644 You can control how much stack is allocated initially by defining the
645 macro `YYINITDEPTH'. This value too must be a compile-time constant
646 integer. The default is 200.
647
648 \1f
649 File: bison.info, Node: Error Recovery, Next: Context Dependency, Prev: Algorithm, Up: Top
650
651 Error Recovery
652 **************
653
654 It is not usually acceptable to have a program terminate on a parse
655 error. For example, a compiler should recover sufficiently to parse the
656 rest of the input file and check it for errors; a calculator should
657 accept another expression.
658
659 In a simple interactive command parser where each input is one line,
660 it may be sufficient to allow `yyparse' to return 1 on error and have
661 the caller ignore the rest of the input line when that happens (and
662 then call `yyparse' again). But this is inadequate for a compiler,
663 because it forgets all the syntactic context leading up to the error.
664 A syntax error deep within a function in the compiler input should not
665 cause the compiler to treat the following line like the beginning of a
666 source file.
667
668 You can define how to recover from a syntax error by writing rules to
669 recognize the special token `error'. This is a terminal symbol that is
670 always defined (you need not declare it) and reserved for error
671 handling. The Bison parser generates an `error' token whenever a
672 syntax error happens; if you have provided a rule to recognize this
673 token in the current context, the parse can continue.
674
675 For example:
676
677 stmnts: /* empty string */
678 | stmnts '\n'
679 | stmnts exp '\n'
680 | stmnts error '\n'
681
682 The fourth rule in this example says that an error followed by a
683 newline makes a valid addition to any `stmnts'.
684
685 What happens if a syntax error occurs in the middle of an `exp'? The
686 error recovery rule, interpreted strictly, applies to the precise
687 sequence of a `stmnts', an `error' and a newline. If an error occurs in
688 the middle of an `exp', there will probably be some additional tokens
689 and subexpressions on the stack after the last `stmnts', and there will
690 be tokens to read before the next newline. So the rule is not
691 applicable in the ordinary way.
692
693 But Bison can force the situation to fit the rule, by discarding
694 part of the semantic context and part of the input. First it discards
695 states and objects from the stack until it gets back to a state in
696 which the `error' token is acceptable. (This means that the
697 subexpressions already parsed are discarded, back to the last complete
698 `stmnts'.) At this point the `error' token can be shifted. Then, if
699 the old look-ahead token is not acceptable to be shifted next, the
700 parser reads tokens and discards them until it finds a token which is
701 acceptable. In this example, Bison reads and discards input until the
702 next newline so that the fourth rule can apply.
703
704 The choice of error rules in the grammar is a choice of strategies
705 for error recovery. A simple and useful strategy is simply to skip the
706 rest of the current input line or current statement if an error is
707 detected:
708
709 stmnt: error ';' /* on error, skip until ';' is read */
710
711 It is also useful to recover to the matching close-delimiter of an
712 opening-delimiter that has already been parsed. Otherwise the
713 close-delimiter will probably appear to be unmatched, and generate
714 another, spurious error message:
715
716 primary: '(' expr ')'
717 | '(' error ')'
718 ...
719 ;
720
721 Error recovery strategies are necessarily guesses. When they guess
722 wrong, one syntax error often leads to another. In the above example,
723 the error recovery rule guesses that an error is due to bad input
724 within one `stmnt'. Suppose that instead a spurious semicolon is
725 inserted in the middle of a valid `stmnt'. After the error recovery
726 rule recovers from the first error, another syntax error will be found
727 straightaway, since the text following the spurious semicolon is also
728 an invalid `stmnt'.
729
730 To prevent an outpouring of error messages, the parser will output
731 no error message for another syntax error that happens shortly after
732 the first; only after three consecutive input tokens have been
733 successfully shifted will error messages resume.
734
735 Note that rules which accept the `error' token may have actions, just
736 as any other rules can.
737
738 You can make error messages resume immediately by using the macro
739 `yyerrok' in an action. If you do this in the error rule's action, no
740 error messages will be suppressed. This macro requires no arguments;
741 `yyerrok;' is a valid C statement.
742
743 The previous look-ahead token is reanalyzed immediately after an
744 error. If this is unacceptable, then the macro `yyclearin' may be used
745 to clear this token. Write the statement `yyclearin;' in the error
746 rule's action.
747
748 For example, suppose that on a parse error, an error handling
749 routine is called that advances the input stream to some point where
750 parsing should once again commence. The next symbol returned by the
751 lexical scanner is probably correct. The previous look-ahead token
752 ought to be discarded with `yyclearin;'.
753
754 The macro `YYRECOVERING' stands for an expression that has the value
755 1 when the parser is recovering from a syntax error, and 0 the rest of
756 the time. A value of 1 indicates that error messages are currently
757 suppressed for new syntax errors.
758
759 \1f
760 File: bison.info, Node: Context Dependency, Next: Debugging, Prev: Error Recovery, Up: Top
761
762 Handling Context Dependencies
763 *****************************
764
765 The Bison paradigm is to parse tokens first, then group them into
766 larger syntactic units. In many languages, the meaning of a token is
767 affected by its context. Although this violates the Bison paradigm,
768 certain techniques (known as "kludges") may enable you to write Bison
769 parsers for such languages.
770
771 * Menu:
772
773 * Semantic Tokens:: Token parsing can depend on the semantic context.
774 * Lexical Tie-ins:: Token parsing can depend on the syntactic context.
775 * Tie-in Recovery:: Lexical tie-ins have implications for how
776 error recovery rules must be written.
777
778 (Actually, "kludge" means any technique that gets its job done but is
779 neither clean nor robust.)
780
781 \1f
782 File: bison.info, Node: Semantic Tokens, Next: Lexical Tie-ins, Up: Context Dependency
783
784 Semantic Info in Token Types
785 ============================
786
787 The C language has a context dependency: the way an identifier is
788 used depends on what its current meaning is. For example, consider
789 this:
790
791 foo (x);
792
793 This looks like a function call statement, but if `foo' is a typedef
794 name, then this is actually a declaration of `x'. How can a Bison
795 parser for C decide how to parse this input?
796
797 The method used in GNU C is to have two different token types,
798 `IDENTIFIER' and `TYPENAME'. When `yylex' finds an identifier, it
799 looks up the current declaration of the identifier in order to decide
800 which token type to return: `TYPENAME' if the identifier is declared as
801 a typedef, `IDENTIFIER' otherwise.
802
803 The grammar rules can then express the context dependency by the
804 choice of token type to recognize. `IDENTIFIER' is accepted as an
805 expression, but `TYPENAME' is not. `TYPENAME' can start a declaration,
806 but `IDENTIFIER' cannot. In contexts where the meaning of the
807 identifier is _not_ significant, such as in declarations that can
808 shadow a typedef name, either `TYPENAME' or `IDENTIFIER' is
809 accepted--there is one rule for each of the two token types.
810
811 This technique is simple to use if the decision of which kinds of
812 identifiers to allow is made at a place close to where the identifier is
813 parsed. But in C this is not always so: C allows a declaration to
814 redeclare a typedef name provided an explicit type has been specified
815 earlier:
816
817 typedef int foo, bar, lose;
818 static foo (bar); /* redeclare `bar' as static variable */
819 static int foo (lose); /* redeclare `foo' as function */
820
821 Unfortunately, the name being declared is separated from the
822 declaration construct itself by a complicated syntactic structure--the
823 "declarator".
824
825 As a result, part of the Bison parser for C needs to be duplicated,
826 with all the nonterminal names changed: once for parsing a declaration
827 in which a typedef name can be redefined, and once for parsing a
828 declaration in which that can't be done. Here is a part of the
829 duplication, with actions omitted for brevity:
830
831 initdcl:
832 declarator maybeasm '='
833 init
834 | declarator maybeasm
835 ;
836
837 notype_initdcl:
838 notype_declarator maybeasm '='
839 init
840 | notype_declarator maybeasm
841 ;
842
843 Here `initdcl' can redeclare a typedef name, but `notype_initdcl'
844 cannot. The distinction between `declarator' and `notype_declarator'
845 is the same sort of thing.
846
847 There is some similarity between this technique and a lexical tie-in
848 (described next), in that information which alters the lexical analysis
849 is changed during parsing by other parts of the program. The
850 difference is here the information is global, and is used for other
851 purposes in the program. A true lexical tie-in has a special-purpose
852 flag controlled by the syntactic context.
853
854 \1f
855 File: bison.info, Node: Lexical Tie-ins, Next: Tie-in Recovery, Prev: Semantic Tokens, Up: Context Dependency
856
857 Lexical Tie-ins
858 ===============
859
860 One way to handle context-dependency is the "lexical tie-in": a flag
861 which is set by Bison actions, whose purpose is to alter the way tokens
862 are parsed.
863
864 For example, suppose we have a language vaguely like C, but with a
865 special construct `hex (HEX-EXPR)'. After the keyword `hex' comes an
866 expression in parentheses in which all integers are hexadecimal. In
867 particular, the token `a1b' must be treated as an integer rather than
868 as an identifier if it appears in that context. Here is how you can do
869 it:
870
871 %{
872 int hexflag;
873 %}
874 %%
875 ...
876 expr: IDENTIFIER
877 | constant
878 | HEX '('
879 { hexflag = 1; }
880 expr ')'
881 { hexflag = 0;
882 $$ = $4; }
883 | expr '+' expr
884 { $$ = make_sum ($1, $3); }
885 ...
886 ;
887
888 constant:
889 INTEGER
890 | STRING
891 ;
892
893 Here we assume that `yylex' looks at the value of `hexflag'; when it is
894 nonzero, all integers are parsed in hexadecimal, and tokens starting
895 with letters are parsed as integers if possible.
896
897 The declaration of `hexflag' shown in the C declarations section of
898 the parser file is needed to make it accessible to the actions (*note
899 The C Declarations Section: C Declarations.). You must also write the
900 code in `yylex' to obey the flag.
901
902 \1f
903 File: bison.info, Node: Tie-in Recovery, Prev: Lexical Tie-ins, Up: Context Dependency
904
905 Lexical Tie-ins and Error Recovery
906 ==================================
907
908 Lexical tie-ins make strict demands on any error recovery rules you
909 have. *Note Error Recovery::.
910
911 The reason for this is that the purpose of an error recovery rule is
912 to abort the parsing of one construct and resume in some larger
913 construct. For example, in C-like languages, a typical error recovery
914 rule is to skip tokens until the next semicolon, and then start a new
915 statement, like this:
916
917 stmt: expr ';'
918 | IF '(' expr ')' stmt { ... }
919 ...
920 error ';'
921 { hexflag = 0; }
922 ;
923
924 If there is a syntax error in the middle of a `hex (EXPR)'
925 construct, this error rule will apply, and then the action for the
926 completed `hex (EXPR)' will never run. So `hexflag' would remain set
927 for the entire rest of the input, or until the next `hex' keyword,
928 causing identifiers to be misinterpreted as integers.
929
930 To avoid this problem the error recovery rule itself clears
931 `hexflag'.
932
933 There may also be an error recovery rule that works within
934 expressions. For example, there could be a rule which applies within
935 parentheses and skips to the close-parenthesis:
936
937 expr: ...
938 | '(' expr ')'
939 { $$ = $2; }
940 | '(' error ')'
941 ...
942
943 If this rule acts within the `hex' construct, it is not going to
944 abort that construct (since it applies to an inner level of parentheses
945 within the construct). Therefore, it should not clear the flag: the
946 rest of the `hex' construct should be parsed with the flag still in
947 effect.
948
949 What if there is an error recovery rule which might abort out of the
950 `hex' construct or might not, depending on circumstances? There is no
951 way you can write the action to determine whether a `hex' construct is
952 being aborted or not. So if you are using a lexical tie-in, you had
953 better make sure your error recovery rules are not of this kind. Each
954 rule must be such that you can be sure that it always will, or always
955 won't, have to clear the flag.
956
957 \1f
958 File: bison.info, Node: Debugging, Next: Invocation, Prev: Context Dependency, Up: Top
959
960 Debugging Your Parser
961 *********************
962
963 If a Bison grammar compiles properly but doesn't do what you want
964 when it runs, the `yydebug' parser-trace feature can help you figure
965 out why.
966
967 To enable compilation of trace facilities, you must define the macro
968 `YYDEBUG' when you compile the parser. You could use `-DYYDEBUG=1' as
969 a compiler option or you could put `#define YYDEBUG 1' in the C
970 declarations section of the grammar file (*note The C Declarations
971 Section: C Declarations.). Alternatively, use the `-t' option when you
972 run Bison (*note Invoking Bison: Invocation.). We always define
973 `YYDEBUG' so that debugging is always possible.
974
975 The trace facility uses `stderr', so you must add
976 `#include <stdio.h>' to the C declarations section unless it is already
977 there.
978
979 Once you have compiled the program with trace facilities, the way to
980 request a trace is to store a nonzero value in the variable `yydebug'.
981 You can do this by making the C code do it (in `main', perhaps), or you
982 can alter the value with a C debugger.
983
984 Each step taken by the parser when `yydebug' is nonzero produces a
985 line or two of trace information, written on `stderr'. The trace
986 messages tell you these things:
987
988 * Each time the parser calls `yylex', what kind of token was read.
989
990 * Each time a token is shifted, the depth and complete contents of
991 the state stack (*note Parser States::).
992
993 * Each time a rule is reduced, which rule it is, and the complete
994 contents of the state stack afterward.
995
996 To make sense of this information, it helps to refer to the listing
997 file produced by the Bison `-v' option (*note Invoking Bison:
998 Invocation.). This file shows the meaning of each state in terms of
999 positions in various rules, and also what each state will do with each
1000 possible input token. As you read the successive trace messages, you
1001 can see that the parser is functioning according to its specification
1002 in the listing file. Eventually you will arrive at the place where
1003 something undesirable happens, and you will see which parts of the
1004 grammar are to blame.
1005
1006 The parser file is a C program and you can use C debuggers on it,
1007 but it's not easy to interpret what it is doing. The parser function
1008 is a finite-state machine interpreter, and aside from the actions it
1009 executes the same code over and over. Only the values of variables
1010 show where in the grammar it is working.
1011
1012 The debugging information normally gives the token type of each token
1013 read, but not its semantic value. You can optionally define a macro
1014 named `YYPRINT' to provide a way to print the value. If you define
1015 `YYPRINT', it should take three arguments. The parser will pass a
1016 standard I/O stream, the numeric code for the token type, and the token
1017 value (from `yylval').
1018
1019 Here is an example of `YYPRINT' suitable for the multi-function
1020 calculator (*note Declarations for `mfcalc': Mfcalc Decl.):
1021
1022 #define YYPRINT(file, type, value) yyprint (file, type, value)
1023
1024 static void
1025 yyprint (FILE *file, int type, YYSTYPE value)
1026 {
1027 if (type == VAR)
1028 fprintf (file, " %s", value.tptr->name);
1029 else if (type == NUM)
1030 fprintf (file, " %d", value.val);
1031 }
1032
1033 \1f
1034 File: bison.info, Node: Invocation, Next: Table of Symbols, Prev: Debugging, Up: Top
1035
1036 Invoking Bison
1037 **************
1038
1039 The usual way to invoke Bison is as follows:
1040
1041 bison INFILE
1042
1043 Here INFILE is the grammar file name, which usually ends in `.y'.
1044 The parser file's name is made by replacing the `.y' with `.tab.c'.
1045 Thus, the `bison foo.y' filename yields `foo.tab.c', and the `bison
1046 hack/foo.y' filename yields `hack/foo.tab.c'. It's is also possible, in
1047 case you are writting C++ code instead of C in your grammar file, to
1048 name it `foo.ypp' or `foo.y++'. Then, the output files will take an
1049 extention like the given one as input (repectively `foo.tab.cpp' and
1050 `foo.tab.c++'). This feature takes effect with all options that
1051 manipulate filenames like `-o' or `-d'.
1052
1053 For example :
1054
1055 bison -d INFILE.YXX
1056
1057 will produce `infile.tab.cxx' and `infile.tab.hxx'. and
1058
1059 bison -d INFILE.Y -o OUTPUT.C++
1060
1061 will produce `output.c++' and `outfile.h++'.
1062
1063 * Menu:
1064
1065 * Bison Options:: All the options described in detail,
1066 in alphabetical order by short options.
1067 * Environment Variables:: Variables which affect Bison execution.
1068 * Option Cross Key:: Alphabetical list of long options.
1069 * VMS Invocation:: Bison command syntax on VMS.
1070
1071 \1f
1072 File: bison.info, Node: Bison Options, Next: Environment Variables, Up: Invocation
1073
1074 Bison Options
1075 =============
1076
1077 Bison supports both traditional single-letter options and mnemonic
1078 long option names. Long option names are indicated with `--' instead of
1079 `-'. Abbreviations for option names are allowed as long as they are
1080 unique. When a long option takes an argument, like `--file-prefix',
1081 connect the option name and the argument with `='.
1082
1083 Here is a list of options that can be used with Bison, alphabetized
1084 by short option. It is followed by a cross key alphabetized by long
1085 option.
1086
1087 Operations modes:
1088 `-h'
1089 `--help'
1090 Print a summary of the command-line options to Bison and exit.
1091
1092 `-V'
1093 `--version'
1094 Print the version number of Bison and exit.
1095
1096 `-y'
1097 `--yacc'
1098 `--fixed-output-files'
1099 Equivalent to `-o y.tab.c'; the parser output file is called
1100 `y.tab.c', and the other outputs are called `y.output' and
1101 `y.tab.h'. The purpose of this option is to imitate Yacc's output
1102 file name conventions. Thus, the following shell script can
1103 substitute for Yacc:
1104
1105 bison -y $*
1106
1107 Tuning the parser:
1108
1109 `-S FILE'
1110 `--skeleton=FILE'
1111 Specify the skeleton to use. You probably don't need this option
1112 unless you are developing Bison.
1113
1114 `-t'
1115 `--debug'
1116 Output a definition of the macro `YYDEBUG' into the parser file, so
1117 that the debugging facilities are compiled. *Note Debugging Your
1118 Parser: Debugging.
1119
1120 `--locations'
1121 Pretend that `%locactions' was specified. *Note Decl Summary::.
1122
1123 `-p PREFIX'
1124 `--name-prefix=PREFIX'
1125 Rename the external symbols used in the parser so that they start
1126 with PREFIX instead of `yy'. The precise list of symbols renamed
1127 is `yyparse', `yylex', `yyerror', `yynerrs', `yylval', `yychar'
1128 and `yydebug'.
1129
1130 For example, if you use `-p c', the names become `cparse', `clex',
1131 and so on.
1132
1133 *Note Multiple Parsers in the Same Program: Multiple Parsers.
1134
1135 `-l'
1136 `--no-lines'
1137 Don't put any `#line' preprocessor commands in the parser file.
1138 Ordinarily Bison puts them in the parser file so that the C
1139 compiler and debuggers will associate errors with your source
1140 file, the grammar file. This option causes them to associate
1141 errors with the parser file, treating it as an independent source
1142 file in its own right.
1143
1144 `-n'
1145 `--no-parser'
1146 Pretend that `%no_parser' was specified. *Note Decl Summary::.
1147
1148 `-k'
1149 `--token-table'
1150 Pretend that `%token_table' was specified. *Note Decl Summary::.
1151
1152 Adjust the output:
1153
1154 `-d'
1155 Pretend that `%verbose' was specified, i.e., write an extra output
1156 file containing macro definitions for the token type names defined
1157 in the grammar and the semantic value type `YYSTYPE', as well as a
1158 few `extern' variable declarations. *Note Decl Summary::.
1159
1160 `--defines=DEFINES-FILE'
1161 The behaviour of -DEFINES is the same than `-d'. The only
1162 difference is that it has an optionnal argument which is the name
1163 of the output filename.
1164
1165 `-b FILE-PREFIX'
1166 `--file-prefix=PREFIX'
1167 Specify a prefix to use for all Bison output file names. The
1168 names are chosen as if the input file were named `PREFIX.c'.
1169
1170 `-v'
1171 `--verbose'
1172 Pretend that `%verbose' was specified, i.e, write an extra output
1173 file containing verbose descriptions of the grammar and parser.
1174 *Note Decl Summary::, for more.
1175
1176 `-o OUTFILE'
1177 `--output-file=OUTFILE'
1178 Specify the name OUTFILE for the parser file.
1179
1180 The other output files' names are constructed from OUTFILE as
1181 described under the `-v' and `-d' options.
1182
1183 `-g'
1184 Output a VCG definition of the LALR(1) grammar automaton computed
1185 by Bison. If the grammar file is `foo.y', the VCG output file will
1186 be `foo.vcg'.
1187
1188 `--graph=GRAPH-FILE'
1189 The behaviour of -GRAPH is the same than `-g'. The only difference
1190 is that it has an optionnal argument which is the name of the
1191 output graph filename.
1192
1193 \1f
1194 File: bison.info, Node: Environment Variables, Next: Option Cross Key, Prev: Bison Options, Up: Invocation
1195
1196 Environment Variables
1197 =====================
1198
1199 Here is a list of environment variables which affect the way Bison
1200 runs.
1201
1202 `BISON_SIMPLE'
1203 `BISON_HAIRY'
1204 Much of the parser generated by Bison is copied verbatim from a
1205 file called `bison.simple'. If Bison cannot find that file, or if
1206 you would like to direct Bison to use a different copy, setting the
1207 environment variable `BISON_SIMPLE' to the path of the file will
1208 cause Bison to use that copy instead.
1209
1210 When the `%semantic_parser' declaration is used, Bison copies from
1211 a file called `bison.hairy' instead. The location of this file can
1212 also be specified or overridden in a similar fashion, with the
1213 `BISON_HAIRY' environment variable.
1214
1215 \1f
1216 File: bison.info, Node: Option Cross Key, Next: VMS Invocation, Prev: Environment Variables, Up: Invocation
1217
1218 Option Cross Key
1219 ================
1220
1221 Here is a list of options, alphabetized by long option, to help you
1222 find the corresponding short option.
1223
1224 --debug -t
1225 --defines=DEFINES-FILE -d
1226 --file-prefix=PREFIX -b FILE-PREFIX
1227 --fixed-output-files --yacc -y
1228 --graph=GRAPH-FILE -d
1229 --help -h
1230 --name-prefix=PREFIX -p NAME-PREFIX
1231 --no-lines -l
1232 --no-parser -n
1233 --output-file=OUTFILE -o OUTFILE
1234 --token-table -k
1235 --verbose -v
1236 --version -V
1237
1238 \1f
1239 File: bison.info, Node: VMS Invocation, Prev: Option Cross Key, Up: Invocation
1240
1241 Invoking Bison under VMS
1242 ========================
1243
1244 The command line syntax for Bison on VMS is a variant of the usual
1245 Bison command syntax--adapted to fit VMS conventions.
1246
1247 To find the VMS equivalent for any Bison option, start with the long
1248 option, and substitute a `/' for the leading `--', and substitute a `_'
1249 for each `-' in the name of the long option. For example, the
1250 following invocation under VMS:
1251
1252 bison /debug/name_prefix=bar foo.y
1253
1254 is equivalent to the following command under POSIX.
1255
1256 bison --debug --name-prefix=bar foo.y
1257
1258 The VMS file system does not permit filenames such as `foo.tab.c'.
1259 In the above example, the output file would instead be named
1260 `foo_tab.c'.
1261