1 \input texinfo @c -*-texinfo-*-
2 @comment %**start of header
3 @setfilename bison.info
5 @settitle Bison @value{VERSION}
13 @c This edition has been formatted so that you can format and print it in
14 @c the smallbook format.
17 @c Set following if you have the new `shorttitlepage' command
18 @c @clear shorttitlepage-enabled
19 @c @set shorttitlepage-enabled
21 @c ISPELL CHECK: done, 14 Jan 1993 --bob
23 @c Check COPYRIGHT dates. should be updated in the titlepage, ifinfo
24 @c titlepage; should NOT be changed in the GPL. --mew
36 @comment %**end of header
41 * bison: (bison). GNU Project parser generator (yacc replacement).
47 This file documents the Bison parser generator.
49 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1998, 1999,
51 Free Software Foundation, Inc.
53 Permission is granted to make and distribute verbatim copies of
54 this manual provided the copyright notice and this permission notice
55 are preserved on all copies.
58 Permission is granted to process this file through Tex and print the
59 results, provided the printed document carries copying permission
60 notice identical to this one except for the removal of this paragraph
61 (this paragraph not being relevant to the printed manual).
64 Permission is granted to copy and distribute modified versions of this
65 manual under the conditions for verbatim copying, provided also that the
66 sections entitled ``GNU General Public License'' and ``Conditions for
67 Using Bison'' are included exactly as in the original, and provided that
68 the entire resulting derived work is distributed under the terms of a
69 permission notice identical to this one.
71 Permission is granted to copy and distribute translations of this manual
72 into another language, under the above conditions for modified versions,
73 except that the sections entitled ``GNU General Public License'',
74 ``Conditions for Using Bison'' and this permission notice may be
75 included in translations approved by the Free Software Foundation
76 instead of in the original English.
79 @ifset shorttitlepage-enabled
84 @subtitle The YACC-compatible Parser Generator
85 @subtitle @value{UPDATED}, Bison Version @value{VERSION}
87 @author by Charles Donnelly and Richard Stallman
90 @vskip 0pt plus 1filll
91 Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1998,
93 Free Software Foundation, Inc.
96 Published by the Free Software Foundation @*
97 59 Temple Place, Suite 330 @*
98 Boston, MA 02111-1307 USA @*
99 Printed copies are available from the Free Software Foundation.@*
102 Permission is granted to make and distribute verbatim copies of
103 this manual provided the copyright notice and this permission notice
104 are preserved on all copies.
107 Permission is granted to process this file through TeX and print the
108 results, provided the printed document carries copying permission
109 notice identical to this one except for the removal of this paragraph
110 (this paragraph not being relevant to the printed manual).
113 Permission is granted to copy and distribute modified versions of this
114 manual under the conditions for verbatim copying, provided also that the
115 sections entitled ``GNU General Public License'' and ``Conditions for
116 Using Bison'' are included exactly as in the original, and provided that
117 the entire resulting derived work is distributed under the terms of a
118 permission notice identical to this one.
120 Permission is granted to copy and distribute translations of this manual
121 into another language, under the above conditions for modified versions,
122 except that the sections entitled ``GNU General Public License'',
123 ``Conditions for Using Bison'' and this permission notice may be
124 included in translations approved by the Free Software Foundation
125 instead of in the original English.
127 Cover art by Etienne Suvasa.
132 @node Top, Introduction, (dir), (dir)
135 This manual documents version @value{VERSION} of Bison.
141 * Copying:: The GNU General Public License says
142 how you can copy and share Bison
145 * Concepts:: Basic concepts for understanding Bison.
146 * Examples:: Three simple explained examples of using Bison.
149 * Grammar File:: Writing Bison declarations and rules.
150 * Interface:: C-language interface to the parser function @code{yyparse}.
151 * Algorithm:: How the Bison parser works at run-time.
152 * Error Recovery:: Writing rules for error recovery.
153 * Context Dependency:: What to do if your language syntax is too
154 messy for Bison to handle straightforwardly.
155 * Debugging:: Debugging Bison parsers that parse wrong.
156 * Invocation:: How to run Bison (to produce the parser source file).
157 * Table of Symbols:: All the keywords of the Bison language are explained.
158 * Glossary:: Basic concepts are explained.
159 * Index:: Cross-references to the text.
161 --- The Detailed Node Listing ---
163 The Concepts of Bison
165 * Language and Grammar:: Languages and context-free grammars,
166 as mathematical ideas.
167 * Grammar in Bison:: How we represent grammars for Bison's sake.
168 * Semantic Values:: Each token or syntactic grouping can have
169 a semantic value (the value of an integer,
170 the name of an identifier, etc.).
171 * Semantic Actions:: Each rule can have an action containing C code.
172 * Bison Parser:: What are Bison's input and output,
173 how is the output used?
174 * Stages:: Stages in writing and running Bison grammars.
175 * Grammar Layout:: Overall structure of a Bison grammar file.
179 * RPN Calc:: Reverse polish notation calculator;
180 a first example with no operator precedence.
181 * Infix Calc:: Infix (algebraic) notation calculator.
182 Operator precedence is introduced.
183 * Simple Error Recovery:: Continuing after syntax errors.
184 * Multi-function Calc:: Calculator with memory and trig functions.
185 It uses multiple data-types for semantic values.
186 * Exercises:: Ideas for improving the multi-function calculator.
188 Reverse Polish Notation Calculator
190 * Decls: Rpcalc Decls. Bison and C declarations for rpcalc.
191 * Rules: Rpcalc Rules. Grammar Rules for rpcalc, with explanation.
192 * Lexer: Rpcalc Lexer. The lexical analyzer.
193 * Main: Rpcalc Main. The controlling function.
194 * Error: Rpcalc Error. The error reporting function.
195 * Gen: Rpcalc Gen. Running Bison on the grammar file.
196 * Comp: Rpcalc Compile. Run the C compiler on the output code.
198 Grammar Rules for @code{rpcalc}
204 Multi-Function Calculator: @code{mfcalc}
206 * Decl: Mfcalc Decl. Bison declarations for multi-function calculator.
207 * Rules: Mfcalc Rules. Grammar rules for the calculator.
208 * Symtab: Mfcalc Symtab. Symbol table management subroutines.
212 * Grammar Outline:: Overall layout of the grammar file.
213 * Symbols:: Terminal and nonterminal symbols.
214 * Rules:: How to write grammar rules.
215 * Recursion:: Writing recursive rules.
216 * Semantics:: Semantic values and actions.
217 * Declarations:: All kinds of Bison declarations are described here.
218 * Multiple Parsers:: Putting more than one Bison parser in one program.
220 Outline of a Bison Grammar
222 * C Declarations:: Syntax and usage of the C declarations section.
223 * Bison Declarations:: Syntax and usage of the Bison declarations section.
224 * Grammar Rules:: Syntax and usage of the grammar rules section.
225 * C Code:: Syntax and usage of the additional C code section.
227 Defining Language Semantics
229 * Value Type:: Specifying one data type for all semantic values.
230 * Multiple Types:: Specifying several alternative data types.
231 * Actions:: An action is the semantic definition of a grammar rule.
232 * Action Types:: Specifying data types for actions to operate on.
233 * Mid-Rule Actions:: Most actions go at the end of a rule.
234 This says when, why and how to use the exceptional
235 action in the middle of a rule.
239 * Token Decl:: Declaring terminal symbols.
240 * Precedence Decl:: Declaring terminals with precedence and associativity.
241 * Union Decl:: Declaring the set of all semantic value types.
242 * Type Decl:: Declaring the choice of type for a nonterminal symbol.
243 * Expect Decl:: Suppressing warnings about shift/reduce conflicts.
244 * Start Decl:: Specifying the start symbol.
245 * Pure Decl:: Requesting a reentrant parser.
246 * Decl Summary:: Table of all Bison declarations.
248 Parser C-Language Interface
250 * Parser Function:: How to call @code{yyparse} and what it returns.
251 * Lexical:: You must supply a function @code{yylex}
253 * Error Reporting:: You must supply a function @code{yyerror}.
254 * Action Features:: Special features for use in actions.
256 The Lexical Analyzer Function @code{yylex}
258 * Calling Convention:: How @code{yyparse} calls @code{yylex}.
259 * Token Values:: How @code{yylex} must return the semantic value
260 of the token it has read.
261 * Token Positions:: How @code{yylex} must return the text position
262 (line number, etc.) of the token, if the
264 * Pure Calling:: How the calling convention differs
265 in a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
267 The Bison Parser Algorithm
269 * Look-Ahead:: Parser looks one token ahead when deciding what to do.
270 * Shift/Reduce:: Conflicts: when either shifting or reduction is valid.
271 * Precedence:: Operator precedence works by resolving conflicts.
272 * Contextual Precedence:: When an operator's precedence depends on context.
273 * Parser States:: The parser is a finite-state-machine with stack.
274 * Reduce/Reduce:: When two rules are applicable in the same situation.
275 * Mystery Conflicts:: Reduce/reduce conflicts that look unjustified.
276 * Stack Overflow:: What happens when stack gets full. How to avoid it.
280 * Why Precedence:: An example showing why precedence is needed.
281 * Using Precedence:: How to specify precedence in Bison grammars.
282 * Precedence Examples:: How these features are used in the previous example.
283 * How Precedence:: How they work.
285 Handling Context Dependencies
287 * Semantic Tokens:: Token parsing can depend on the semantic context.
288 * Lexical Tie-ins:: Token parsing can depend on the syntactic context.
289 * Tie-in Recovery:: Lexical tie-ins have implications for how
290 error recovery rules must be written.
294 * Bison Options:: All the options described in detail,
295 in alphabetical order by short options.
296 * Option Cross Key:: Alphabetical list of long options.
297 * VMS Invocation:: Bison command syntax on VMS.
300 @node Introduction, Conditions, Top, Top
301 @unnumbered Introduction
304 @dfn{Bison} is a general-purpose parser generator that converts a
305 grammar description for an LALR(1) context-free grammar into a C
306 program to parse that grammar. Once you are proficient with Bison,
307 you may use it to develop a wide range of language parsers, from those
308 used in simple desk calculators to complex programming languages.
310 Bison is upward compatible with Yacc: all properly-written Yacc grammars
311 ought to work with Bison with no change. Anyone familiar with Yacc
312 should be able to use Bison with little trouble. You need to be fluent in
313 C programming in order to use Bison or to understand this manual.
315 We begin with tutorial chapters that explain the basic concepts of using
316 Bison and show three explained examples, each building on the last. If you
317 don't know Bison or Yacc, start by reading these chapters. Reference
318 chapters follow which describe specific aspects of Bison in detail.
320 Bison was written primarily by Robert Corbett; Richard Stallman made it
321 Yacc-compatible. Wilfred Hansen of Carnegie Mellon University added
322 multi-character string literals and other features.
324 This edition corresponds to version @value{VERSION} of Bison.
326 @node Conditions, Copying, Introduction, Top
327 @unnumbered Conditions for Using Bison
329 As of Bison version 1.24, we have changed the distribution terms for
330 @code{yyparse} to permit using Bison's output in nonfree programs.
331 Formerly, Bison parsers could be used only in programs that were free
334 The other GNU programming tools, such as the GNU C compiler, have never
335 had such a requirement. They could always be used for nonfree
336 software. The reason Bison was different was not due to a special
337 policy decision; it resulted from applying the usual General Public
338 License to all of the Bison source code.
340 The output of the Bison utility---the Bison parser file---contains a
341 verbatim copy of a sizable piece of Bison, which is the code for the
342 @code{yyparse} function. (The actions from your grammar are inserted
343 into this function at one point, but the rest of the function is not
344 changed.) When we applied the GPL terms to the code for @code{yyparse},
345 the effect was to restrict the use of Bison output to free software.
347 We didn't change the terms because of sympathy for people who want to
348 make software proprietary. @strong{Software should be free.} But we
349 concluded that limiting Bison's use to free software was doing little to
350 encourage people to make other software free. So we decided to make the
351 practical conditions for using Bison match the practical conditions for
352 using the other GNU tools.
356 @node Concepts, Examples, Copying, Top
357 @chapter The Concepts of Bison
359 This chapter introduces many of the basic concepts without which the
360 details of Bison will not make sense. If you do not already know how to
361 use Bison or Yacc, we suggest you start by reading this chapter carefully.
364 * Language and Grammar:: Languages and context-free grammars,
365 as mathematical ideas.
366 * Grammar in Bison:: How we represent grammars for Bison's sake.
367 * Semantic Values:: Each token or syntactic grouping can have
368 a semantic value (the value of an integer,
369 the name of an identifier, etc.).
370 * Semantic Actions:: Each rule can have an action containing C code.
371 * Locations Overview:: Tracking Locations.
372 * Bison Parser:: What are Bison's input and output,
373 how is the output used?
374 * Stages:: Stages in writing and running Bison grammars.
375 * Grammar Layout:: Overall structure of a Bison grammar file.
378 @node Language and Grammar, Grammar in Bison, , Concepts
379 @section Languages and Context-Free Grammars
381 @cindex context-free grammar
382 @cindex grammar, context-free
383 In order for Bison to parse a language, it must be described by a
384 @dfn{context-free grammar}. This means that you specify one or more
385 @dfn{syntactic groupings} and give rules for constructing them from their
386 parts. For example, in the C language, one kind of grouping is called an
387 `expression'. One rule for making an expression might be, ``An expression
388 can be made of a minus sign and another expression''. Another would be,
389 ``An expression can be an integer''. As you can see, rules are often
390 recursive, but there must be at least one rule which leads out of the
394 @cindex Backus-Naur form
395 The most common formal system for presenting such rules for humans to read
396 is @dfn{Backus-Naur Form} or ``BNF'', which was developed in order to
397 specify the language Algol 60. Any grammar expressed in BNF is a
398 context-free grammar. The input to Bison is essentially machine-readable
401 Not all context-free languages can be handled by Bison, only those
402 that are LALR(1). In brief, this means that it must be possible to
403 tell how to parse any portion of an input string with just a single
404 token of look-ahead. Strictly speaking, that is a description of an
405 LR(1) grammar, and LALR(1) involves additional restrictions that are
406 hard to explain simply; but it is rare in actual practice to find an
407 LR(1) grammar that fails to be LALR(1). @xref{Mystery Conflicts, ,
408 Mysterious Reduce/Reduce Conflicts}, for more information on this.
410 @cindex symbols (abstract)
412 @cindex syntactic grouping
413 @cindex grouping, syntactic
414 In the formal grammatical rules for a language, each kind of syntactic unit
415 or grouping is named by a @dfn{symbol}. Those which are built by grouping
416 smaller constructs according to grammatical rules are called
417 @dfn{nonterminal symbols}; those which can't be subdivided are called
418 @dfn{terminal symbols} or @dfn{token types}. We call a piece of input
419 corresponding to a single terminal symbol a @dfn{token}, and a piece
420 corresponding to a single nonterminal symbol a @dfn{grouping}.@refill
422 We can use the C language as an example of what symbols, terminal and
423 nonterminal, mean. The tokens of C are identifiers, constants (numeric and
424 string), and the various keywords, arithmetic operators and punctuation
425 marks. So the terminal symbols of a grammar for C include `identifier',
426 `number', `string', plus one symbol for each keyword, operator or
427 punctuation mark: `if', `return', `const', `static', `int', `char',
428 `plus-sign', `open-brace', `close-brace', `comma' and many more. (These
429 tokens can be subdivided into characters, but that is a matter of
430 lexicography, not grammar.)
432 Here is a simple C function subdivided into tokens:
435 int /* @r{keyword `int'} */
436 square (x) /* @r{identifier, open-paren,} */
437 /* @r{identifier, close-paren} */
438 int x; /* @r{keyword `int', identifier, semicolon} */
439 @{ /* @r{open-brace} */
440 return x * x; /* @r{keyword `return', identifier,} */
441 /* @r{asterisk, identifier, semicolon} */
442 @} /* @r{close-brace} */
445 The syntactic groupings of C include the expression, the statement, the
446 declaration, and the function definition. These are represented in the
447 grammar of C by nonterminal symbols `expression', `statement',
448 `declaration' and `function definition'. The full grammar uses dozens of
449 additional language constructs, each with its own nonterminal symbol, in
450 order to express the meanings of these four. The example above is a
451 function definition; it contains one declaration, and one statement. In
452 the statement, each @samp{x} is an expression and so is @samp{x * x}.
454 Each nonterminal symbol must have grammatical rules showing how it is made
455 out of simpler constructs. For example, one kind of C statement is the
456 @code{return} statement; this would be described with a grammar rule which
457 reads informally as follows:
460 A `statement' can be made of a `return' keyword, an `expression' and a
465 There would be many other rules for `statement', one for each kind of
469 One nonterminal symbol must be distinguished as the special one which
470 defines a complete utterance in the language. It is called the @dfn{start
471 symbol}. In a compiler, this means a complete input program. In the C
472 language, the nonterminal symbol `sequence of definitions and declarations'
475 For example, @samp{1 + 2} is a valid C expression---a valid part of a C
476 program---but it is not valid as an @emph{entire} C program. In the
477 context-free grammar of C, this follows from the fact that `expression' is
478 not the start symbol.
480 The Bison parser reads a sequence of tokens as its input, and groups the
481 tokens using the grammar rules. If the input is valid, the end result is
482 that the entire token sequence reduces to a single grouping whose symbol is
483 the grammar's start symbol. If we use a grammar for C, the entire input
484 must be a `sequence of definitions and declarations'. If not, the parser
485 reports a syntax error.
487 @node Grammar in Bison, Semantic Values, Language and Grammar, Concepts
488 @section From Formal Rules to Bison Input
489 @cindex Bison grammar
490 @cindex grammar, Bison
491 @cindex formal grammar
493 A formal grammar is a mathematical construct. To define the language
494 for Bison, you must write a file expressing the grammar in Bison syntax:
495 a @dfn{Bison grammar} file. @xref{Grammar File, ,Bison Grammar Files}.
497 A nonterminal symbol in the formal grammar is represented in Bison input
498 as an identifier, like an identifier in C. By convention, it should be
499 in lower case, such as @code{expr}, @code{stmt} or @code{declaration}.
501 The Bison representation for a terminal symbol is also called a @dfn{token
502 type}. Token types as well can be represented as C-like identifiers. By
503 convention, these identifiers should be upper case to distinguish them from
504 nonterminals: for example, @code{INTEGER}, @code{IDENTIFIER}, @code{IF} or
505 @code{RETURN}. A terminal symbol that stands for a particular keyword in
506 the language should be named after that keyword converted to upper case.
507 The terminal symbol @code{error} is reserved for error recovery.
510 A terminal symbol can also be represented as a character literal, just like
511 a C character constant. You should do this whenever a token is just a
512 single character (parenthesis, plus-sign, etc.): use that same character in
513 a literal as the terminal symbol for that token.
515 A third way to represent a terminal symbol is with a C string constant
516 containing several characters. @xref{Symbols}, for more information.
518 The grammar rules also have an expression in Bison syntax. For example,
519 here is the Bison rule for a C @code{return} statement. The semicolon in
520 quotes is a literal character token, representing part of the C syntax for
521 the statement; the naked semicolon, and the colon, are Bison punctuation
525 stmt: RETURN expr ';'
530 @xref{Rules, ,Syntax of Grammar Rules}.
532 @node Semantic Values, Semantic Actions, Grammar in Bison, Concepts
533 @section Semantic Values
534 @cindex semantic value
535 @cindex value, semantic
537 A formal grammar selects tokens only by their classifications: for example,
538 if a rule mentions the terminal symbol `integer constant', it means that
539 @emph{any} integer constant is grammatically valid in that position. The
540 precise value of the constant is irrelevant to how to parse the input: if
541 @samp{x+4} is grammatical then @samp{x+1} or @samp{x+3989} is equally
544 But the precise value is very important for what the input means once it is
545 parsed. A compiler is useless if it fails to distinguish between 4, 1 and
546 3989 as constants in the program! Therefore, each token in a Bison grammar
547 has both a token type and a @dfn{semantic value}. @xref{Semantics, ,Defining Language Semantics},
550 The token type is a terminal symbol defined in the grammar, such as
551 @code{INTEGER}, @code{IDENTIFIER} or @code{','}. It tells everything
552 you need to know to decide where the token may validly appear and how to
553 group it with other tokens. The grammar rules know nothing about tokens
554 except their types.@refill
556 The semantic value has all the rest of the information about the
557 meaning of the token, such as the value of an integer, or the name of an
558 identifier. (A token such as @code{','} which is just punctuation doesn't
559 need to have any semantic value.)
561 For example, an input token might be classified as token type
562 @code{INTEGER} and have the semantic value 4. Another input token might
563 have the same token type @code{INTEGER} but value 3989. When a grammar
564 rule says that @code{INTEGER} is allowed, either of these tokens is
565 acceptable because each is an @code{INTEGER}. When the parser accepts the
566 token, it keeps track of the token's semantic value.
568 Each grouping can also have a semantic value as well as its nonterminal
569 symbol. For example, in a calculator, an expression typically has a
570 semantic value that is a number. In a compiler for a programming
571 language, an expression typically has a semantic value that is a tree
572 structure describing the meaning of the expression.
574 @node Semantic Actions, Locations Overview, Semantic Values, Concepts
575 @section Semantic Actions
576 @cindex semantic actions
577 @cindex actions, semantic
579 In order to be useful, a program must do more than parse input; it must
580 also produce some output based on the input. In a Bison grammar, a grammar
581 rule can have an @dfn{action} made up of C statements. Each time the
582 parser recognizes a match for that rule, the action is executed.
585 Most of the time, the purpose of an action is to compute the semantic value
586 of the whole construct from the semantic values of its parts. For example,
587 suppose we have a rule which says an expression can be the sum of two
588 expressions. When the parser recognizes such a sum, each of the
589 subexpressions has a semantic value which describes how it was built up.
590 The action for this rule should create a similar sort of value for the
591 newly recognized larger expression.
593 For example, here is a rule that says an expression can be the sum of
597 expr: expr '+' expr @{ $$ = $1 + $3; @}
602 The action says how to produce the semantic value of the sum expression
603 from the values of the two subexpressions.
605 @node Locations Overview, Bison Parser, Semantic Actions, Concepts
608 @cindex textual position
609 @cindex position, textual
611 Many applications, like interpreters or compilers, have to produce verbose
612 and useful error messages. To achieve this, one must be able to keep track of
613 the @dfn{textual position}, or @dfn{location}, of each syntactic construct.
614 Bison provides a mechanism for handling these locations.
616 Each token has a semantic value. In a similar fashion, each token has an
617 associated location, but the type of locations is the same for all tokens and
618 groupings. Moreover, the output parser is equipped with a default data
619 structure for storing locations (@pxref{Locations}, for more details).
621 Like semantic values, locations can be reached in actions using a dedicated
622 set of constructs. In the example above, the location of the whole grouping
623 is @code{@@$}, while the locations of the subexpressions are @code{@@1} and
626 When a rule is matched, a default action is used to compute the semantic value
627 of its left hand side (@pxref{Actions}). In the same way, another default
628 action is used for locations. However, the action for locations is general
629 enough for most cases, meaning there is usually no need to describe for each
630 rule how @code{@@$} should be formed. When building a new location for a given
631 grouping, the default behavior of the output parser is to take the beginning
632 of the first symbol, and the end of the last symbol.
634 @node Bison Parser, Stages, Locations Overview, Concepts
635 @section Bison Output: the Parser File
637 @cindex Bison utility
638 @cindex lexical analyzer, purpose
641 When you run Bison, you give it a Bison grammar file as input. The output
642 is a C source file that parses the language described by the grammar.
643 This file is called a @dfn{Bison parser}. Keep in mind that the Bison
644 utility and the Bison parser are two distinct programs: the Bison utility
645 is a program whose output is the Bison parser that becomes part of your
648 The job of the Bison parser is to group tokens into groupings according to
649 the grammar rules---for example, to build identifiers and operators into
650 expressions. As it does this, it runs the actions for the grammar rules it
653 The tokens come from a function called the @dfn{lexical analyzer} that you
654 must supply in some fashion (such as by writing it in C). The Bison parser
655 calls the lexical analyzer each time it wants a new token. It doesn't know
656 what is ``inside'' the tokens (though their semantic values may reflect
657 this). Typically the lexical analyzer makes the tokens by parsing
658 characters of text, but Bison does not depend on this. @xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
660 The Bison parser file is C code which defines a function named
661 @code{yyparse} which implements that grammar. This function does not make
662 a complete C program: you must supply some additional functions. One is
663 the lexical analyzer. Another is an error-reporting function which the
664 parser calls to report an error. In addition, a complete C program must
665 start with a function called @code{main}; you have to provide this, and
666 arrange for it to call @code{yyparse} or the parser will never run.
667 @xref{Interface, ,Parser C-Language Interface}.
669 Aside from the token type names and the symbols in the actions you
670 write, all variable and function names used in the Bison parser file
671 begin with @samp{yy} or @samp{YY}. This includes interface functions
672 such as the lexical analyzer function @code{yylex}, the error reporting
673 function @code{yyerror} and the parser function @code{yyparse} itself.
674 This also includes numerous identifiers used for internal purposes.
675 Therefore, you should avoid using C identifiers starting with @samp{yy}
676 or @samp{YY} in the Bison grammar file except for the ones defined in
679 @node Stages, Grammar Layout, Bison Parser, Concepts
680 @section Stages in Using Bison
681 @cindex stages in using Bison
684 The actual language-design process using Bison, from grammar specification
685 to a working compiler or interpreter, has these parts:
689 Formally specify the grammar in a form recognized by Bison
690 (@pxref{Grammar File, ,Bison Grammar Files}). For each grammatical rule in the language,
691 describe the action that is to be taken when an instance of that rule
692 is recognized. The action is described by a sequence of C statements.
695 Write a lexical analyzer to process input and pass tokens to the
696 parser. The lexical analyzer may be written by hand in C
697 (@pxref{Lexical, ,The Lexical Analyzer Function @code{yylex}}). It could also be produced using Lex, but the use
698 of Lex is not discussed in this manual.
701 Write a controlling function that calls the Bison-produced parser.
704 Write error-reporting routines.
707 To turn this source code as written into a runnable program, you
708 must follow these steps:
712 Run Bison on the grammar to produce the parser.
715 Compile the code output by Bison, as well as any other source files.
718 Link the object files to produce the finished product.
721 @node Grammar Layout, , Stages, Concepts
722 @section The Overall Layout of a Bison Grammar
725 @cindex format of grammar file
726 @cindex layout of Bison grammar
728 The input file for the Bison utility is a @dfn{Bison grammar file}. The
729 general form of a Bison grammar file is as follows:
736 @var{Bison declarations}
741 @var{Additional C code}
745 The @samp{%%}, @samp{%@{} and @samp{%@}} are punctuation that appears
746 in every Bison grammar file to separate the sections.
748 The C declarations may define types and variables used in the actions.
749 You can also use preprocessor commands to define macros used there, and use
750 @code{#include} to include header files that do any of these things.
752 The Bison declarations declare the names of the terminal and nonterminal
753 symbols, and may also describe operator precedence and the data types of
754 semantic values of various symbols.
756 The grammar rules define how to construct each nonterminal symbol from its
759 The additional C code can contain any C code you want to use. Often the
760 definition of the lexical analyzer @code{yylex} goes here, plus subroutines
761 called by the actions in the grammar rules. In a simple program, all the
762 rest of the program can go here.
764 @node Examples, Grammar File, Concepts, Top
766 @cindex simple examples
767 @cindex examples, simple
769 Now we show and explain three sample programs written using Bison: a
770 reverse polish notation calculator, an algebraic (infix) notation
771 calculator, and a multi-function calculator. All three have been tested
772 under BSD Unix 4.3; each produces a usable, though limited, interactive
775 These examples are simple, but Bison grammars for real programming
776 languages are written the same way.
778 You can copy these examples out of the Info file and into a source file
783 * RPN Calc:: Reverse polish notation calculator;
784 a first example with no operator precedence.
785 * Infix Calc:: Infix (algebraic) notation calculator.
786 Operator precedence is introduced.
787 * Simple Error Recovery:: Continuing after syntax errors.
788 * Multi-function Calc:: Calculator with memory and trig functions.
789 It uses multiple data-types for semantic values.
790 * Exercises:: Ideas for improving the multi-function calculator.
793 @node RPN Calc, Infix Calc, , Examples
794 @section Reverse Polish Notation Calculator
795 @cindex reverse polish notation
796 @cindex polish notation calculator
797 @cindex @code{rpcalc}
798 @cindex calculator, simple
800 The first example is that of a simple double-precision @dfn{reverse polish
801 notation} calculator (a calculator using postfix operators). This example
802 provides a good starting point, since operator precedence is not an issue.
803 The second example will illustrate how operator precedence is handled.
805 The source code for this calculator is named @file{rpcalc.y}. The
806 @samp{.y} extension is a convention used for Bison input files.
809 * Decls: Rpcalc Decls. Bison and C declarations for rpcalc.
810 * Rules: Rpcalc Rules. Grammar Rules for rpcalc, with explanation.
811 * Lexer: Rpcalc Lexer. The lexical analyzer.
812 * Main: Rpcalc Main. The controlling function.
813 * Error: Rpcalc Error. The error reporting function.
814 * Gen: Rpcalc Gen. Running Bison on the grammar file.
815 * Comp: Rpcalc Compile. Run the C compiler on the output code.
818 @node Rpcalc Decls, Rpcalc Rules, , RPN Calc
819 @subsection Declarations for @code{rpcalc}
821 Here are the C and Bison declarations for the reverse polish notation
822 calculator. As in C, comments are placed between @samp{/*@dots{}*/}.
825 /* Reverse polish notation calculator. */
828 #define YYSTYPE double
834 %% /* Grammar rules and actions follow */
837 The C declarations section (@pxref{C Declarations, ,The C Declarations Section}) contains two
838 preprocessor directives.
840 The @code{#define} directive defines the macro @code{YYSTYPE}, thus
841 specifying the C data type for semantic values of both tokens and groupings
842 (@pxref{Value Type, ,Data Types of Semantic Values}). The Bison parser will use whatever type
843 @code{YYSTYPE} is defined as; if you don't define it, @code{int} is the
844 default. Because we specify @code{double}, each token and each expression
845 has an associated value, which is a floating point number.
847 The @code{#include} directive is used to declare the exponentiation
850 The second section, Bison declarations, provides information to Bison about
851 the token types (@pxref{Bison Declarations, ,The Bison Declarations Section}). Each terminal symbol that is
852 not a single-character literal must be declared here. (Single-character
853 literals normally don't need to be declared.) In this example, all the
854 arithmetic operators are designated by single-character literals, so the
855 only terminal symbol that needs to be declared is @code{NUM}, the token
856 type for numeric constants.
858 @node Rpcalc Rules, Rpcalc Lexer, Rpcalc Decls, RPN Calc
859 @subsection Grammar Rules for @code{rpcalc}
861 Here are the grammar rules for the reverse polish notation calculator.
869 | exp '\n' @{ printf ("\t%.10g\n", $1); @}
872 exp: NUM @{ $$ = $1; @}
873 | exp exp '+' @{ $$ = $1 + $2; @}
874 | exp exp '-' @{ $$ = $1 - $2; @}
875 | exp exp '*' @{ $$ = $1 * $2; @}
876 | exp exp '/' @{ $$ = $1 / $2; @}
878 | exp exp '^' @{ $$ = pow ($1, $2); @}
880 | exp 'n' @{ $$ = -$1; @}
885 The groupings of the rpcalc ``language'' defined here are the expression
886 (given the name @code{exp}), the line of input (@code{line}), and the
887 complete input transcript (@code{input}). Each of these nonterminal
888 symbols has several alternate rules, joined by the @samp{|} punctuator
889 which is read as ``or''. The following sections explain what these rules
892 The semantics of the language is determined by the actions taken when a
893 grouping is recognized. The actions are the C code that appears inside
894 braces. @xref{Actions}.
896 You must specify these actions in C, but Bison provides the means for
897 passing semantic values between the rules. In each action, the
898 pseudo-variable @code{$$} stands for the semantic value for the grouping
899 that the rule is going to construct. Assigning a value to @code{$$} is the
900 main job of most actions. The semantic values of the components of the
901 rule are referred to as @code{$1}, @code{$2}, and so on.
909 @node Rpcalc Input, Rpcalc Line, , Rpcalc Rules
910 @subsubsection Explanation of @code{input}
912 Consider the definition of @code{input}:
920 This definition reads as follows: ``A complete input is either an empty
921 string, or a complete input followed by an input line''. Notice that
922 ``complete input'' is defined in terms of itself. This definition is said
923 to be @dfn{left recursive} since @code{input} appears always as the
924 leftmost symbol in the sequence. @xref{Recursion, ,Recursive Rules}.
926 The first alternative is empty because there are no symbols between the
927 colon and the first @samp{|}; this means that @code{input} can match an
928 empty string of input (no tokens). We write the rules this way because it
929 is legitimate to type @kbd{Ctrl-d} right after you start the calculator.
930 It's conventional to put an empty alternative first and write the comment
931 @samp{/* empty */} in it.
933 The second alternate rule (@code{input line}) handles all nontrivial input.
934 It means, ``After reading any number of lines, read one more line if
935 possible.'' The left recursion makes this rule into a loop. Since the
936 first alternative matches empty input, the loop can be executed zero or
939 The parser function @code{yyparse} continues to process input until a
940 grammatical error is seen or the lexical analyzer says there are no more
941 input tokens; we will arrange for the latter to happen at end of file.
943 @node Rpcalc Line, Rpcalc Expr, Rpcalc Input, Rpcalc Rules
944 @subsubsection Explanation of @code{line}
946 Now consider the definition of @code{line}:
950 | exp '\n' @{ printf ("\t%.10g\n", $1); @}
954 The first alternative is a token which is a newline character; this means
955 that rpcalc accepts a blank line (and ignores it, since there is no
956 action). The second alternative is an expression followed by a newline.
957 This is the alternative that makes rpcalc useful. The semantic value of
958 the @code{exp} grouping is the value of @code{$1} because the @code{exp} in
959 question is the first symbol in the alternative. The action prints this
960 value, which is the result of the computation the user asked for.
962 This action is unusual because it does not assign a value to @code{$$}. As
963 a consequence, the semantic value associated with the @code{line} is
964 uninitialized (its value will be unpredictable). This would be a bug if
965 that value were ever used, but we don't use it: once rpcalc has printed the
966 value of the user's input line, that value is no longer needed.
968 @node Rpcalc Expr, , Rpcalc Line, Rpcalc Rules
969 @subsubsection Explanation of @code{expr}
971 The @code{exp} grouping has several rules, one for each kind of expression.
972 The first rule handles the simplest expressions: those that are just numbers.
973 The second handles an addition-expression, which looks like two expressions
974 followed by a plus-sign. The third handles subtraction, and so on.
978 | exp exp '+' @{ $$ = $1 + $2; @}
979 | exp exp '-' @{ $$ = $1 - $2; @}
984 We have used @samp{|} to join all the rules for @code{exp}, but we could
985 equally well have written them separately:
989 exp: exp exp '+' @{ $$ = $1 + $2; @} ;
990 exp: exp exp '-' @{ $$ = $1 - $2; @} ;
994 Most of the rules have actions that compute the value of the expression in
995 terms of the value of its parts. For example, in the rule for addition,
996 @code{$1} refers to the first component @code{exp} and @code{$2} refers to
997 the second one. The third component, @code{'+'}, has no meaningful
998 associated semantic value, but if it had one you could refer to it as
999 @code{$3}. When @code{yyparse} recognizes a sum expression using this
1000 rule, the sum of the two subexpressions' values is produced as the value of
1001 the entire expression. @xref{Actions}.
1003 You don't have to give an action for every rule. When a rule has no
1004 action, Bison by default copies the value of @code{$1} into @code{$$}.
1005 This is what happens in the first rule (the one that uses @code{NUM}).
1007 The formatting shown here is the recommended convention, but Bison does
1008 not require it. You can add or change whitespace as much as you wish.
1012 exp : NUM | exp exp '+' @{$$ = $1 + $2; @} | @dots{}
1016 means the same thing as this:
1020 | exp exp '+' @{ $$ = $1 + $2; @}
1025 The latter, however, is much more readable.
1027 @node Rpcalc Lexer, Rpcalc Main, Rpcalc Rules, RPN Calc
1028 @subsection The @code{rpcalc} Lexical Analyzer
1029 @cindex writing a lexical analyzer
1030 @cindex lexical analyzer, writing
1032 The lexical analyzer's job is low-level parsing: converting characters or
1033 sequences of characters into tokens. The Bison parser gets its tokens by
1034 calling the lexical analyzer. @xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
1036 Only a simple lexical analyzer is needed for the RPN calculator. This
1037 lexical analyzer skips blanks and tabs, then reads in numbers as
1038 @code{double} and returns them as @code{NUM} tokens. Any other character
1039 that isn't part of a number is a separate token. Note that the token-code
1040 for such a single-character token is the character itself.
1042 The return value of the lexical analyzer function is a numeric code which
1043 represents a token type. The same text used in Bison rules to stand for
1044 this token type is also a C expression for the numeric code for the type.
1045 This works in two ways. If the token type is a character literal, then its
1046 numeric code is the ASCII code for that character; you can use the same
1047 character literal in the lexical analyzer to express the number. If the
1048 token type is an identifier, that identifier is defined by Bison as a C
1049 macro whose definition is the appropriate number. In this example,
1050 therefore, @code{NUM} becomes a macro for @code{yylex} to use.
1052 The semantic value of the token (if it has one) is stored into the global
1053 variable @code{yylval}, which is where the Bison parser will look for it.
1054 (The C data type of @code{yylval} is @code{YYSTYPE}, which was defined
1055 at the beginning of the grammar; @pxref{Rpcalc Decls, ,Declarations for @code{rpcalc}}.)
1057 A token type code of zero is returned if the end-of-file is encountered.
1058 (Bison recognizes any nonpositive value as indicating the end of the
1061 Here is the code for the lexical analyzer:
1065 /* Lexical analyzer returns a double floating point
1066 number on the stack and the token NUM, or the ASCII
1067 character read if not a number. Skips all blanks
1068 and tabs, returns 0 for EOF. */
1079 /* skip white space */
1080 while ((c = getchar ()) == ' ' || c == '\t')
1084 /* process numbers */
1085 if (c == '.' || isdigit (c))
1088 scanf ("%lf", &yylval);
1093 /* return end-of-file */
1096 /* return single chars */
1102 @node Rpcalc Main, Rpcalc Error, Rpcalc Lexer, RPN Calc
1103 @subsection The Controlling Function
1104 @cindex controlling function
1105 @cindex main function in simple example
1107 In keeping with the spirit of this example, the controlling function is
1108 kept to the bare minimum. The only requirement is that it call
1109 @code{yyparse} to start the process of parsing.
1121 @node Rpcalc Error, Rpcalc Gen, Rpcalc Main, RPN Calc
1122 @subsection The Error Reporting Routine
1123 @cindex error reporting routine
1125 When @code{yyparse} detects a syntax error, it calls the error reporting
1126 function @code{yyerror} to print an error message (usually but not
1127 always @code{"parse error"}). It is up to the programmer to supply
1128 @code{yyerror} (@pxref{Interface, ,Parser C-Language Interface}), so
1129 here is the definition we will use:
1136 yyerror (const char *s) /* Called by yyparse on error */
1143 After @code{yyerror} returns, the Bison parser may recover from the error
1144 and continue parsing if the grammar contains a suitable error rule
1145 (@pxref{Error Recovery}). Otherwise, @code{yyparse} returns nonzero. We
1146 have not written any error rules in this example, so any invalid input will
1147 cause the calculator program to exit. This is not clean behavior for a
1148 real calculator, but it is adequate for the first example.
1150 @node Rpcalc Gen, Rpcalc Compile, Rpcalc Error, RPN Calc
1151 @subsection Running Bison to Make the Parser
1152 @cindex running Bison (introduction)
1154 Before running Bison to produce a parser, we need to decide how to
1155 arrange all the source code in one or more source files. For such a
1156 simple example, the easiest thing is to put everything in one file. The
1157 definitions of @code{yylex}, @code{yyerror} and @code{main} go at the
1158 end, in the ``additional C code'' section of the file (@pxref{Grammar
1159 Layout, ,The Overall Layout of a Bison Grammar}).
1161 For a large project, you would probably have several source files, and use
1162 @code{make} to arrange to recompile them.
1164 With all the source in a single file, you use the following command to
1165 convert it into a parser file:
1168 bison @var{file_name}.y
1172 In this example the file was called @file{rpcalc.y} (for ``Reverse Polish
1173 CALCulator''). Bison produces a file named @file{@var{file_name}.tab.c},
1174 removing the @samp{.y} from the original file name. The file output by
1175 Bison contains the source code for @code{yyparse}. The additional
1176 functions in the input file (@code{yylex}, @code{yyerror} and @code{main})
1177 are copied verbatim to the output.
1179 @node Rpcalc Compile, , Rpcalc Gen, RPN Calc
1180 @subsection Compiling the Parser File
1181 @cindex compiling the parser
1183 Here is how to compile and run the parser file:
1187 # @r{List files in current directory.}
1189 rpcalc.tab.c rpcalc.y
1193 # @r{Compile the Bison parser.}
1194 # @r{@samp{-lm} tells compiler to search math library for @code{pow}.}
1195 % cc rpcalc.tab.c -lm -o rpcalc
1199 # @r{List files again.}
1201 rpcalc rpcalc.tab.c rpcalc.y
1205 The file @file{rpcalc} now contains the executable code. Here is an
1206 example session using @code{rpcalc}.
1214 3 7 + 3 4 5 * + - n @r{Note the unary minus, @samp{n}}
1218 3 4 ^ @r{Exponentiation}
1220 ^D @r{End-of-file indicator}
1224 @node Infix Calc, Simple Error Recovery, RPN Calc, Examples
1225 @section Infix Notation Calculator: @code{calc}
1226 @cindex infix notation calculator
1228 @cindex calculator, infix notation
1230 We now modify rpcalc to handle infix operators instead of postfix. Infix
1231 notation involves the concept of operator precedence and the need for
1232 parentheses nested to arbitrary depth. Here is the Bison code for
1233 @file{calc.y}, an infix desk-top calculator.
1236 /* Infix notation calculator--calc */
1239 #define YYSTYPE double
1243 /* BISON Declarations */
1247 %left NEG /* negation--unary minus */
1248 %right '^' /* exponentiation */
1250 /* Grammar follows */
1252 input: /* empty string */
1257 | exp '\n' @{ printf ("\t%.10g\n", $1); @}
1260 exp: NUM @{ $$ = $1; @}
1261 | exp '+' exp @{ $$ = $1 + $3; @}
1262 | exp '-' exp @{ $$ = $1 - $3; @}
1263 | exp '*' exp @{ $$ = $1 * $3; @}
1264 | exp '/' exp @{ $$ = $1 / $3; @}
1265 | '-' exp %prec NEG @{ $$ = -$2; @}
1266 | exp '^' exp @{ $$ = pow ($1, $3); @}
1267 | '(' exp ')' @{ $$ = $2; @}
1273 The functions @code{yylex}, @code{yyerror} and @code{main} can be the
1276 There are two important new features shown in this code.
1278 In the second section (Bison declarations), @code{%left} declares token
1279 types and says they are left-associative operators. The declarations
1280 @code{%left} and @code{%right} (right associativity) take the place of
1281 @code{%token} which is used to declare a token type name without
1282 associativity. (These tokens are single-character literals, which
1283 ordinarily don't need to be declared. We declare them here to specify
1286 Operator precedence is determined by the line ordering of the
1287 declarations; the higher the line number of the declaration (lower on
1288 the page or screen), the higher the precedence. Hence, exponentiation
1289 has the highest precedence, unary minus (@code{NEG}) is next, followed
1290 by @samp{*} and @samp{/}, and so on. @xref{Precedence, ,Operator Precedence}.
1292 The other important new feature is the @code{%prec} in the grammar section
1293 for the unary minus operator. The @code{%prec} simply instructs Bison that
1294 the rule @samp{| '-' exp} has the same precedence as @code{NEG}---in this
1295 case the next-to-highest. @xref{Contextual Precedence, ,Context-Dependent Precedence}.
1297 Here is a sample run of @file{calc.y}:
1302 4 + 4.5 - (34/(8*3+-3))
1310 @node Simple Error Recovery, Multi-function Calc, Infix Calc, Examples
1311 @section Simple Error Recovery
1312 @cindex error recovery, simple
1314 Up to this point, this manual has not addressed the issue of @dfn{error
1315 recovery}---how to continue parsing after the parser detects a syntax
1316 error. All we have handled is error reporting with @code{yyerror}.
1317 Recall that by default @code{yyparse} returns after calling
1318 @code{yyerror}. This means that an erroneous input line causes the
1319 calculator program to exit. Now we show how to rectify this deficiency.
1321 The Bison language itself includes the reserved word @code{error}, which
1322 may be included in the grammar rules. In the example below it has
1323 been added to one of the alternatives for @code{line}:
1328 | exp '\n' @{ printf ("\t%.10g\n", $1); @}
1329 | error '\n' @{ yyerrok; @}
1334 This addition to the grammar allows for simple error recovery in the
1335 event of a parse error. If an expression that cannot be evaluated is
1336 read, the error will be recognized by the third rule for @code{line},
1337 and parsing will continue. (The @code{yyerror} function is still called
1338 upon to print its message as well.) The action executes the statement
1339 @code{yyerrok}, a macro defined automatically by Bison; its meaning is
1340 that error recovery is complete (@pxref{Error Recovery}). Note the
1341 difference between @code{yyerrok} and @code{yyerror}; neither one is a
1344 This form of error recovery deals with syntax errors. There are other
1345 kinds of errors; for example, division by zero, which raises an exception
1346 signal that is normally fatal. A real calculator program must handle this
1347 signal and use @code{longjmp} to return to @code{main} and resume parsing
1348 input lines; it would also have to discard the rest of the current line of
1349 input. We won't discuss this issue further because it is not specific to
1352 @node Multi-function Calc, Exercises, Simple Error Recovery, Examples
1353 @section Multi-Function Calculator: @code{mfcalc}
1354 @cindex multi-function calculator
1355 @cindex @code{mfcalc}
1356 @cindex calculator, multi-function
1358 Now that the basics of Bison have been discussed, it is time to move on to
1359 a more advanced problem. The above calculators provided only five
1360 functions, @samp{+}, @samp{-}, @samp{*}, @samp{/} and @samp{^}. It would
1361 be nice to have a calculator that provides other mathematical functions such
1362 as @code{sin}, @code{cos}, etc.
1364 It is easy to add new operators to the infix calculator as long as they are
1365 only single-character literals. The lexical analyzer @code{yylex} passes
1366 back all nonnumber characters as tokens, so new grammar rules suffice for
1367 adding a new operator. But we want something more flexible: built-in
1368 functions whose syntax has this form:
1371 @var{function_name} (@var{argument})
1375 At the same time, we will add memory to the calculator, by allowing you
1376 to create named variables, store values in them, and use them later.
1377 Here is a sample session with the multi-function calculator:
1396 Note that multiple assignment and nested function calls are permitted.
1399 * Decl: Mfcalc Decl. Bison declarations for multi-function calculator.
1400 * Rules: Mfcalc Rules. Grammar rules for the calculator.
1401 * Symtab: Mfcalc Symtab. Symbol table management subroutines.
1404 @node Mfcalc Decl, Mfcalc Rules, , Multi-function Calc
1405 @subsection Declarations for @code{mfcalc}
1407 Here are the C and Bison declarations for the multi-function calculator.
1411 #include <math.h> /* For math functions, cos(), sin(), etc. */
1412 #include "calc.h" /* Contains definition of `symrec' */
1415 double val; /* For returning numbers. */
1416 symrec *tptr; /* For returning symbol-table pointers */
1419 %token <val> NUM /* Simple double precision number */
1420 %token <tptr> VAR FNCT /* Variable and Function */
1426 %left NEG /* Negation--unary minus */
1427 %right '^' /* Exponentiation */
1429 /* Grammar follows */
1434 The above grammar introduces only two new features of the Bison language.
1435 These features allow semantic values to have various data types
1436 (@pxref{Multiple Types, ,More Than One Value Type}).
1438 The @code{%union} declaration specifies the entire list of possible types;
1439 this is instead of defining @code{YYSTYPE}. The allowable types are now
1440 double-floats (for @code{exp} and @code{NUM}) and pointers to entries in
1441 the symbol table. @xref{Union Decl, ,The Collection of Value Types}.
1443 Since values can now have various types, it is necessary to associate a
1444 type with each grammar symbol whose semantic value is used. These symbols
1445 are @code{NUM}, @code{VAR}, @code{FNCT}, and @code{exp}. Their
1446 declarations are augmented with information about their data type (placed
1447 between angle brackets).
1449 The Bison construct @code{%type} is used for declaring nonterminal symbols,
1450 just as @code{%token} is used for declaring token types. We have not used
1451 @code{%type} before because nonterminal symbols are normally declared
1452 implicitly by the rules that define them. But @code{exp} must be declared
1453 explicitly so we can specify its value type. @xref{Type Decl, ,Nonterminal Symbols}.
1455 @node Mfcalc Rules, Mfcalc Symtab, Mfcalc Decl, Multi-function Calc
1456 @subsection Grammar Rules for @code{mfcalc}
1458 Here are the grammar rules for the multi-function calculator.
1459 Most of them are copied directly from @code{calc}; three rules,
1460 those which mention @code{VAR} or @code{FNCT}, are new.
1469 | exp '\n' @{ printf ("\t%.10g\n", $1); @}
1470 | error '\n' @{ yyerrok; @}
1473 exp: NUM @{ $$ = $1; @}
1474 | VAR @{ $$ = $1->value.var; @}
1475 | VAR '=' exp @{ $$ = $3; $1->value.var = $3; @}
1476 | FNCT '(' exp ')' @{ $$ = (*($1->value.fnctptr))($3); @}
1477 | exp '+' exp @{ $$ = $1 + $3; @}
1478 | exp '-' exp @{ $$ = $1 - $3; @}
1479 | exp '*' exp @{ $$ = $1 * $3; @}
1480 | exp '/' exp @{ $$ = $1 / $3; @}
1481 | '-' exp %prec NEG @{ $$ = -$2; @}
1482 | exp '^' exp @{ $$ = pow ($1, $3); @}
1483 | '(' exp ')' @{ $$ = $2; @}
1485 /* End of grammar */
1489 @node Mfcalc Symtab, , Mfcalc Rules, Multi-function Calc
1490 @subsection The @code{mfcalc} Symbol Table
1491 @cindex symbol table example
1493 The multi-function calculator requires a symbol table to keep track of the
1494 names and meanings of variables and functions. This doesn't affect the
1495 grammar rules (except for the actions) or the Bison declarations, but it
1496 requires some additional C functions for support.
1498 The symbol table itself consists of a linked list of records. Its
1499 definition, which is kept in the header @file{calc.h}, is as follows. It
1500 provides for either functions or variables to be placed in the table.
1504 /* Fonctions type. */
1505 typedef double (*func_t) (double);
1507 /* Data type for links in the chain of symbols. */
1510 char *name; /* name of symbol */
1511 int type; /* type of symbol: either VAR or FNCT */
1514 double var; /* value of a VAR */
1515 func_t fnctptr; /* value of a FNCT */
1517 struct symrec *next; /* link field */
1522 typedef struct symrec symrec;
1524 /* The symbol table: a chain of `struct symrec'. */
1525 extern symrec *sym_table;
1527 symrec *putsym (const char *, func_t);
1528 symrec *getsym (const char *);
1532 The new version of @code{main} includes a call to @code{init_table}, a
1533 function that initializes the symbol table. Here it is, and
1534 @code{init_table} as well:
1550 yyerror (const char *s) /* Called by yyparse on error */
1558 double (*fnct)(double);
1563 struct init arith_fncts[] =
1574 /* The symbol table: a chain of `struct symrec'. */
1575 symrec *sym_table = (symrec *) 0;
1579 /* Put arithmetic functions in table. */
1585 for (i = 0; arith_fncts[i].fname != 0; i++)
1587 ptr = putsym (arith_fncts[i].fname, FNCT);
1588 ptr->value.fnctptr = arith_fncts[i].fnct;
1594 By simply editing the initialization list and adding the necessary include
1595 files, you can add additional functions to the calculator.
1597 Two important functions allow look-up and installation of symbols in the
1598 symbol table. The function @code{putsym} is passed a name and the type
1599 (@code{VAR} or @code{FNCT}) of the object to be installed. The object is
1600 linked to the front of the list, and a pointer to the object is returned.
1601 The function @code{getsym} is passed the name of the symbol to look up. If
1602 found, a pointer to that symbol is returned; otherwise zero is returned.
1606 putsym (char *sym_name, int sym_type)
1609 ptr = (symrec *) malloc (sizeof (symrec));
1610 ptr->name = (char *) malloc (strlen (sym_name) + 1);
1611 strcpy (ptr->name,sym_name);
1612 ptr->type = sym_type;
1613 ptr->value.var = 0; /* set value to 0 even if fctn. */
1614 ptr->next = (struct symrec *)sym_table;
1620 getsym (const char *sym_name)
1623 for (ptr = sym_table; ptr != (symrec *) 0;
1624 ptr = (symrec *)ptr->next)
1625 if (strcmp (ptr->name,sym_name) == 0)
1631 The function @code{yylex} must now recognize variables, numeric values, and
1632 the single-character arithmetic operators. Strings of alphanumeric
1633 characters with a leading non-digit are recognized as either variables or
1634 functions depending on what the symbol table says about them.
1636 The string is passed to @code{getsym} for look up in the symbol table. If
1637 the name appears in the table, a pointer to its location and its type
1638 (@code{VAR} or @code{FNCT}) is returned to @code{yyparse}. If it is not
1639 already in the table, then it is installed as a @code{VAR} using
1640 @code{putsym}. Again, a pointer and its type (which must be @code{VAR}) is
1641 returned to @code{yyparse}.@refill
1643 No change is needed in the handling of numeric values and arithmetic
1644 operators in @code{yylex}.
1655 /* Ignore whitespace, get first nonwhite character. */
1656 while ((c = getchar ()) == ' ' || c == '\t');
1663 /* Char starts a number => parse the number. */
1664 if (c == '.' || isdigit (c))
1667 scanf ("%lf", &yylval.val);
1673 /* Char starts an identifier => read the name. */
1677 static char *symbuf = 0;
1678 static int length = 0;
1683 /* Initially make the buffer long enough
1684 for a 40-character symbol name. */
1686 length = 40, symbuf = (char *)malloc (length + 1);
1693 /* If buffer is full, make it bigger. */
1697 symbuf = (char *)realloc (symbuf, length + 1);
1699 /* Add this character to the buffer. */
1701 /* Get another character. */
1706 while (c != EOF && isalnum (c));
1713 s = getsym (symbuf);
1715 s = putsym (symbuf, VAR);
1720 /* Any other character is a token by itself. */
1726 This program is both powerful and flexible. You may easily add new
1727 functions, and it is a simple job to modify this code to install predefined
1728 variables such as @code{pi} or @code{e} as well.
1730 @node Exercises, , Multi-function Calc, Examples
1736 Add some new functions from @file{math.h} to the initialization list.
1739 Add another array that contains constants and their values. Then
1740 modify @code{init_table} to add these constants to the symbol table.
1741 It will be easiest to give the constants type @code{VAR}.
1744 Make the program report an error if the user refers to an
1745 uninitialized variable in any way except to store a value in it.
1748 @node Grammar File, Interface, Examples, Top
1749 @chapter Bison Grammar Files
1751 Bison takes as input a context-free grammar specification and produces a
1752 C-language function that recognizes correct instances of the grammar.
1754 The Bison grammar input file conventionally has a name ending in @samp{.y}.
1755 @xref{Invocation, ,Invoking Bison}.
1758 * Grammar Outline:: Overall layout of the grammar file.
1759 * Symbols:: Terminal and nonterminal symbols.
1760 * Rules:: How to write grammar rules.
1761 * Recursion:: Writing recursive rules.
1762 * Semantics:: Semantic values and actions.
1763 * Locations:: Locations and actions.
1764 * Declarations:: All kinds of Bison declarations are described here.
1765 * Multiple Parsers:: Putting more than one Bison parser in one program.
1768 @node Grammar Outline, Symbols, , Grammar File
1769 @section Outline of a Bison Grammar
1771 A Bison grammar file has four main sections, shown here with the
1772 appropriate delimiters:
1776 @var{C declarations}
1779 @var{Bison declarations}
1785 @var{Additional C code}
1788 Comments enclosed in @samp{/* @dots{} */} may appear in any of the sections.
1791 * C Declarations:: Syntax and usage of the C declarations section.
1792 * Bison Declarations:: Syntax and usage of the Bison declarations section.
1793 * Grammar Rules:: Syntax and usage of the grammar rules section.
1794 * C Code:: Syntax and usage of the additional C code section.
1797 @node C Declarations, Bison Declarations, , Grammar Outline
1798 @subsection The C Declarations Section
1799 @cindex C declarations section
1800 @cindex declarations, C
1802 The @var{C declarations} section contains macro definitions and
1803 declarations of functions and variables that are used in the actions in the
1804 grammar rules. These are copied to the beginning of the parser file so
1805 that they precede the definition of @code{yyparse}. You can use
1806 @samp{#include} to get the declarations from a header file. If you don't
1807 need any C declarations, you may omit the @samp{%@{} and @samp{%@}}
1808 delimiters that bracket this section.
1810 @node Bison Declarations, Grammar Rules, C Declarations, Grammar Outline
1811 @subsection The Bison Declarations Section
1812 @cindex Bison declarations (introduction)
1813 @cindex declarations, Bison (introduction)
1815 The @var{Bison declarations} section contains declarations that define
1816 terminal and nonterminal symbols, specify precedence, and so on.
1817 In some simple grammars you may not need any declarations.
1818 @xref{Declarations, ,Bison Declarations}.
1820 @node Grammar Rules, C Code, Bison Declarations, Grammar Outline
1821 @subsection The Grammar Rules Section
1822 @cindex grammar rules section
1823 @cindex rules section for grammar
1825 The @dfn{grammar rules} section contains one or more Bison grammar
1826 rules, and nothing else. @xref{Rules, ,Syntax of Grammar Rules}.
1828 There must always be at least one grammar rule, and the first
1829 @samp{%%} (which precedes the grammar rules) may never be omitted even
1830 if it is the first thing in the file.
1832 @node C Code, , Grammar Rules, Grammar Outline
1833 @subsection The Additional C Code Section
1834 @cindex additional C code section
1835 @cindex C code, section for additional
1837 The @var{additional C code} section is copied verbatim to the end of the
1838 parser file, just as the @var{C declarations} section is copied to the
1839 beginning. This is the most convenient place to put anything that you
1840 want to have in the parser file but which need not come before the
1841 definition of @code{yyparse}. For example, the definitions of
1842 @code{yylex} and @code{yyerror} often go here. @xref{Interface, ,Parser
1843 C-Language Interface}.
1845 If the last section is empty, you may omit the @samp{%%} that separates it
1846 from the grammar rules.
1848 The Bison parser itself contains many static variables whose names start
1849 with @samp{yy} and many macros whose names start with @samp{YY}. It is a
1850 good idea to avoid using any such names (except those documented in this
1851 manual) in the additional C code section of the grammar file.
1853 @node Symbols, Rules, Grammar Outline, Grammar File
1854 @section Symbols, Terminal and Nonterminal
1855 @cindex nonterminal symbol
1856 @cindex terminal symbol
1860 @dfn{Symbols} in Bison grammars represent the grammatical classifications
1863 A @dfn{terminal symbol} (also known as a @dfn{token type}) represents a
1864 class of syntactically equivalent tokens. You use the symbol in grammar
1865 rules to mean that a token in that class is allowed. The symbol is
1866 represented in the Bison parser by a numeric code, and the @code{yylex}
1867 function returns a token type code to indicate what kind of token has been
1868 read. You don't need to know what the code value is; you can use the
1869 symbol to stand for it.
1871 A @dfn{nonterminal symbol} stands for a class of syntactically equivalent
1872 groupings. The symbol name is used in writing grammar rules. By convention,
1873 it should be all lower case.
1875 Symbol names can contain letters, digits (not at the beginning),
1876 underscores and periods. Periods make sense only in nonterminals.
1878 There are three ways of writing terminal symbols in the grammar:
1882 A @dfn{named token type} is written with an identifier, like an
1883 identifier in C. By convention, it should be all upper case. Each
1884 such name must be defined with a Bison declaration such as
1885 @code{%token}. @xref{Token Decl, ,Token Type Names}.
1888 @cindex character token
1889 @cindex literal token
1890 @cindex single-character literal
1891 A @dfn{character token type} (or @dfn{literal character token}) is
1892 written in the grammar using the same syntax used in C for character
1893 constants; for example, @code{'+'} is a character token type. A
1894 character token type doesn't need to be declared unless you need to
1895 specify its semantic value data type (@pxref{Value Type, ,Data Types of
1896 Semantic Values}), associativity, or precedence (@pxref{Precedence,
1897 ,Operator Precedence}).
1899 By convention, a character token type is used only to represent a
1900 token that consists of that particular character. Thus, the token
1901 type @code{'+'} is used to represent the character @samp{+} as a
1902 token. Nothing enforces this convention, but if you depart from it,
1903 your program will confuse other readers.
1905 All the usual escape sequences used in character literals in C can be
1906 used in Bison as well, but you must not use the null character as a
1907 character literal because its ASCII code, zero, is the code @code{yylex}
1908 returns for end-of-input (@pxref{Calling Convention, ,Calling Convention
1912 @cindex string token
1913 @cindex literal string token
1914 @cindex multicharacter literal
1915 A @dfn{literal string token} is written like a C string constant; for
1916 example, @code{"<="} is a literal string token. A literal string token
1917 doesn't need to be declared unless you need to specify its semantic
1918 value data type (@pxref{Value Type}), associativity, or precedence
1919 (@pxref{Precedence}).
1921 You can associate the literal string token with a symbolic name as an
1922 alias, using the @code{%token} declaration (@pxref{Token Decl, ,Token
1923 Declarations}). If you don't do that, the lexical analyzer has to
1924 retrieve the token number for the literal string token from the
1925 @code{yytname} table (@pxref{Calling Convention}).
1927 @strong{WARNING}: literal string tokens do not work in Yacc.
1929 By convention, a literal string token is used only to represent a token
1930 that consists of that particular string. Thus, you should use the token
1931 type @code{"<="} to represent the string @samp{<=} as a token. Bison
1932 does not enforce this convention, but if you depart from it, people who
1933 read your program will be confused.
1935 All the escape sequences used in string literals in C can be used in
1936 Bison as well. A literal string token must contain two or more
1937 characters; for a token containing just one character, use a character
1941 How you choose to write a terminal symbol has no effect on its
1942 grammatical meaning. That depends only on where it appears in rules and
1943 on when the parser function returns that symbol.
1945 The value returned by @code{yylex} is always one of the terminal symbols
1946 (or 0 for end-of-input). Whichever way you write the token type in the
1947 grammar rules, you write it the same way in the definition of @code{yylex}.
1948 The numeric code for a character token type is simply the ASCII code for
1949 the character, so @code{yylex} can use the identical character constant to
1950 generate the requisite code. Each named token type becomes a C macro in
1951 the parser file, so @code{yylex} can use the name to stand for the code.
1952 (This is why periods don't make sense in terminal symbols.)
1953 @xref{Calling Convention, ,Calling Convention for @code{yylex}}.
1955 If @code{yylex} is defined in a separate file, you need to arrange for the
1956 token-type macro definitions to be available there. Use the @samp{-d}
1957 option when you run Bison, so that it will write these macro definitions
1958 into a separate header file @file{@var{name}.tab.h} which you can include
1959 in the other source files that need it. @xref{Invocation, ,Invoking Bison}.
1961 The symbol @code{error} is a terminal symbol reserved for error recovery
1962 (@pxref{Error Recovery}); you shouldn't use it for any other purpose.
1963 In particular, @code{yylex} should never return this value.
1965 @node Rules, Recursion, Symbols, Grammar File
1966 @section Syntax of Grammar Rules
1968 @cindex grammar rule syntax
1969 @cindex syntax of grammar rules
1971 A Bison grammar rule has the following general form:
1975 @var{result}: @var{components}@dots{}
1981 where @var{result} is the nonterminal symbol that this rule describes,
1982 and @var{components} are various terminal and nonterminal symbols that
1983 are put together by this rule (@pxref{Symbols}).
1995 says that two groupings of type @code{exp}, with a @samp{+} token in between,
1996 can be combined into a larger grouping of type @code{exp}.
1998 Whitespace in rules is significant only to separate symbols. You can add
1999 extra whitespace as you wish.
2001 Scattered among the components can be @var{actions} that determine
2002 the semantics of the rule. An action looks like this:
2005 @{@var{C statements}@}
2009 Usually there is only one action and it follows the components.
2013 Multiple rules for the same @var{result} can be written separately or can
2014 be joined with the vertical-bar character @samp{|} as follows:
2018 @var{result}: @var{rule1-components}@dots{}
2019 | @var{rule2-components}@dots{}
2027 @var{result}: @var{rule1-components}@dots{}
2028 | @var{rule2-components}@dots{}
2036 They are still considered distinct rules even when joined in this way.
2038 If @var{components} in a rule is empty, it means that @var{result} can
2039 match the empty string. For example, here is how to define a
2040 comma-separated sequence of zero or more @code{exp} groupings:
2057 It is customary to write a comment @samp{/* empty */} in each rule
2060 @node Recursion, Semantics, Rules, Grammar File
2061 @section Recursive Rules
2062 @cindex recursive rule
2064 A rule is called @dfn{recursive} when its @var{result} nonterminal appears
2065 also on its right hand side. Nearly all Bison grammars need to use
2066 recursion, because that is the only way to define a sequence of any number
2067 of a particular thing. Consider this recursive definition of a
2068 comma-separated sequence of one or more expressions:
2078 @cindex left recursion
2079 @cindex right recursion
2081 Since the recursive use of @code{expseq1} is the leftmost symbol in the
2082 right hand side, we call this @dfn{left recursion}. By contrast, here
2083 the same construct is defined using @dfn{right recursion}:
2094 Any kind of sequence can be defined using either left recursion or
2095 right recursion, but you should always use left recursion, because it
2096 can parse a sequence of any number of elements with bounded stack
2097 space. Right recursion uses up space on the Bison stack in proportion
2098 to the number of elements in the sequence, because all the elements
2099 must be shifted onto the stack before the rule can be applied even
2100 once. @xref{Algorithm, ,The Bison Parser Algorithm }, for
2101 further explanation of this.
2103 @cindex mutual recursion
2104 @dfn{Indirect} or @dfn{mutual} recursion occurs when the result of the
2105 rule does not appear directly on its right hand side, but does appear
2106 in rules for other nonterminals which do appear on its right hand
2114 | primary '+' primary
2126 defines two mutually-recursive nonterminals, since each refers to the
2129 @node Semantics, Locations, Recursion, Grammar File
2130 @section Defining Language Semantics
2131 @cindex defining language semantics
2132 @cindex language semantics, defining
2134 The grammar rules for a language determine only the syntax. The semantics
2135 are determined by the semantic values associated with various tokens and
2136 groupings, and by the actions taken when various groupings are recognized.
2138 For example, the calculator calculates properly because the value
2139 associated with each expression is the proper number; it adds properly
2140 because the action for the grouping @w{@samp{@var{x} + @var{y}}} is to add
2141 the numbers associated with @var{x} and @var{y}.
2144 * Value Type:: Specifying one data type for all semantic values.
2145 * Multiple Types:: Specifying several alternative data types.
2146 * Actions:: An action is the semantic definition of a grammar rule.
2147 * Action Types:: Specifying data types for actions to operate on.
2148 * Mid-Rule Actions:: Most actions go at the end of a rule.
2149 This says when, why and how to use the exceptional
2150 action in the middle of a rule.
2153 @node Value Type, Multiple Types, , Semantics
2154 @subsection Data Types of Semantic Values
2155 @cindex semantic value type
2156 @cindex value type, semantic
2157 @cindex data types of semantic values
2158 @cindex default data type
2160 In a simple program it may be sufficient to use the same data type for
2161 the semantic values of all language constructs. This was true in the
2162 RPN and infix calculator examples (@pxref{RPN Calc, ,Reverse Polish Notation Calculator}).
2164 Bison's default is to use type @code{int} for all semantic values. To
2165 specify some other type, define @code{YYSTYPE} as a macro, like this:
2168 #define YYSTYPE double
2172 This macro definition must go in the C declarations section of the grammar
2173 file (@pxref{Grammar Outline, ,Outline of a Bison Grammar}).
2175 @node Multiple Types, Actions, Value Type, Semantics
2176 @subsection More Than One Value Type
2178 In most programs, you will need different data types for different kinds
2179 of tokens and groupings. For example, a numeric constant may need type
2180 @code{int} or @code{long}, while a string constant needs type @code{char *},
2181 and an identifier might need a pointer to an entry in the symbol table.
2183 To use more than one data type for semantic values in one parser, Bison
2184 requires you to do two things:
2188 Specify the entire collection of possible data types, with the
2189 @code{%union} Bison declaration (@pxref{Union Decl, ,The Collection of Value Types}).
2192 Choose one of those types for each symbol (terminal or nonterminal) for
2193 which semantic values are used. This is done for tokens with the
2194 @code{%token} Bison declaration (@pxref{Token Decl, ,Token Type Names})
2195 and for groupings with the @code{%type} Bison declaration (@pxref{Type
2196 Decl, ,Nonterminal Symbols}).
2199 @node Actions, Action Types, Multiple Types, Semantics
2205 An action accompanies a syntactic rule and contains C code to be executed
2206 each time an instance of that rule is recognized. The task of most actions
2207 is to compute a semantic value for the grouping built by the rule from the
2208 semantic values associated with tokens or smaller groupings.
2210 An action consists of C statements surrounded by braces, much like a
2211 compound statement in C. It can be placed at any position in the rule; it
2212 is executed at that position. Most rules have just one action at the end
2213 of the rule, following all the components. Actions in the middle of a rule
2214 are tricky and used only for special purposes (@pxref{Mid-Rule Actions, ,Actions in Mid-Rule}).
2216 The C code in an action can refer to the semantic values of the components
2217 matched by the rule with the construct @code{$@var{n}}, which stands for
2218 the value of the @var{n}th component. The semantic value for the grouping
2219 being constructed is @code{$$}. (Bison translates both of these constructs
2220 into array element references when it copies the actions into the parser
2223 Here is a typical example:
2234 This rule constructs an @code{exp} from two smaller @code{exp} groupings
2235 connected by a plus-sign token. In the action, @code{$1} and @code{$3}
2236 refer to the semantic values of the two component @code{exp} groupings,
2237 which are the first and third symbols on the right hand side of the rule.
2238 The sum is stored into @code{$$} so that it becomes the semantic value of
2239 the addition-expression just recognized by the rule. If there were a
2240 useful semantic value associated with the @samp{+} token, it could be
2241 referred to as @code{$2}.@refill
2243 @cindex default action
2244 If you don't specify an action for a rule, Bison supplies a default:
2245 @w{@code{$$ = $1}.} Thus, the value of the first symbol in the rule becomes
2246 the value of the whole rule. Of course, the default rule is valid only
2247 if the two data types match. There is no meaningful default action for
2248 an empty rule; every empty rule must have an explicit action unless the
2249 rule's value does not matter.
2251 @code{$@var{n}} with @var{n} zero or negative is allowed for reference
2252 to tokens and groupings on the stack @emph{before} those that match the
2253 current rule. This is a very risky practice, and to use it reliably
2254 you must be certain of the context in which the rule is applied. Here
2255 is a case in which you can use this reliably:
2259 foo: expr bar '+' expr @{ @dots{} @}
2260 | expr bar '-' expr @{ @dots{} @}
2266 @{ previous_expr = $0; @}
2271 As long as @code{bar} is used only in the fashion shown here, @code{$0}
2272 always refers to the @code{expr} which precedes @code{bar} in the
2273 definition of @code{foo}.
2275 @node Action Types, Mid-Rule Actions, Actions, Semantics
2276 @subsection Data Types of Values in Actions
2277 @cindex action data types
2278 @cindex data types in actions
2280 If you have chosen a single data type for semantic values, the @code{$$}
2281 and @code{$@var{n}} constructs always have that data type.
2283 If you have used @code{%union} to specify a variety of data types, then you
2284 must declare a choice among these types for each terminal or nonterminal
2285 symbol that can have a semantic value. Then each time you use @code{$$} or
2286 @code{$@var{n}}, its data type is determined by which symbol it refers to
2287 in the rule. In this example,@refill
2298 @code{$1} and @code{$3} refer to instances of @code{exp}, so they all
2299 have the data type declared for the nonterminal symbol @code{exp}. If
2300 @code{$2} were used, it would have the data type declared for the
2301 terminal symbol @code{'+'}, whatever that might be.@refill
2303 Alternatively, you can specify the data type when you refer to the value,
2304 by inserting @samp{<@var{type}>} after the @samp{$} at the beginning of the
2305 reference. For example, if you have defined types as shown here:
2317 then you can write @code{$<itype>1} to refer to the first subunit of the
2318 rule as an integer, or @code{$<dtype>1} to refer to it as a double.
2320 @node Mid-Rule Actions, , Action Types, Semantics
2321 @subsection Actions in Mid-Rule
2322 @cindex actions in mid-rule
2323 @cindex mid-rule actions
2325 Occasionally it is useful to put an action in the middle of a rule.
2326 These actions are written just like usual end-of-rule actions, but they
2327 are executed before the parser even recognizes the following components.
2329 A mid-rule action may refer to the components preceding it using
2330 @code{$@var{n}}, but it may not refer to subsequent components because
2331 it is run before they are parsed.
2333 The mid-rule action itself counts as one of the components of the rule.
2334 This makes a difference when there is another action later in the same rule
2335 (and usually there is another at the end): you have to count the actions
2336 along with the symbols when working out which number @var{n} to use in
2339 The mid-rule action can also have a semantic value. The action can set
2340 its value with an assignment to @code{$$}, and actions later in the rule
2341 can refer to the value using @code{$@var{n}}. Since there is no symbol
2342 to name the action, there is no way to declare a data type for the value
2343 in advance, so you must use the @samp{$<@dots{}>@var{n}} construct to
2344 specify a data type each time you refer to this value.
2346 There is no way to set the value of the entire rule with a mid-rule
2347 action, because assignments to @code{$$} do not have that effect. The
2348 only way to set the value for the entire rule is with an ordinary action
2349 at the end of the rule.
2351 Here is an example from a hypothetical compiler, handling a @code{let}
2352 statement that looks like @samp{let (@var{variable}) @var{statement}} and
2353 serves to create a variable named @var{variable} temporarily for the
2354 duration of @var{statement}. To parse this construct, we must put
2355 @var{variable} into the symbol table while @var{statement} is parsed, then
2356 remove it afterward. Here is how it is done:
2360 stmt: LET '(' var ')'
2361 @{ $<context>$ = push_context ();
2362 declare_variable ($3); @}
2364 pop_context ($<context>5); @}
2369 As soon as @samp{let (@var{variable})} has been recognized, the first
2370 action is run. It saves a copy of the current semantic context (the
2371 list of accessible variables) as its semantic value, using alternative
2372 @code{context} in the data-type union. Then it calls
2373 @code{declare_variable} to add the new variable to that list. Once the
2374 first action is finished, the embedded statement @code{stmt} can be
2375 parsed. Note that the mid-rule action is component number 5, so the
2376 @samp{stmt} is component number 6.
2378 After the embedded statement is parsed, its semantic value becomes the
2379 value of the entire @code{let}-statement. Then the semantic value from the
2380 earlier action is used to restore the prior list of variables. This
2381 removes the temporary @code{let}-variable from the list so that it won't
2382 appear to exist while the rest of the program is parsed.
2384 Taking action before a rule is completely recognized often leads to
2385 conflicts since the parser must commit to a parse in order to execute the
2386 action. For example, the following two rules, without mid-rule actions,
2387 can coexist in a working parser because the parser can shift the open-brace
2388 token and look at what follows before deciding whether there is a
2393 compound: '@{' declarations statements '@}'
2394 | '@{' statements '@}'
2400 But when we add a mid-rule action as follows, the rules become nonfunctional:
2404 compound: @{ prepare_for_local_variables (); @}
2405 '@{' declarations statements '@}'
2408 | '@{' statements '@}'
2414 Now the parser is forced to decide whether to run the mid-rule action
2415 when it has read no farther than the open-brace. In other words, it
2416 must commit to using one rule or the other, without sufficient
2417 information to do it correctly. (The open-brace token is what is called
2418 the @dfn{look-ahead} token at this time, since the parser is still
2419 deciding what to do about it. @xref{Look-Ahead, ,Look-Ahead Tokens}.)
2421 You might think that you could correct the problem by putting identical
2422 actions into the two rules, like this:
2426 compound: @{ prepare_for_local_variables (); @}
2427 '@{' declarations statements '@}'
2428 | @{ prepare_for_local_variables (); @}
2429 '@{' statements '@}'
2435 But this does not help, because Bison does not realize that the two actions
2436 are identical. (Bison never tries to understand the C code in an action.)
2438 If the grammar is such that a declaration can be distinguished from a
2439 statement by the first token (which is true in C), then one solution which
2440 does work is to put the action after the open-brace, like this:
2444 compound: '@{' @{ prepare_for_local_variables (); @}
2445 declarations statements '@}'
2446 | '@{' statements '@}'
2452 Now the first token of the following declaration or statement,
2453 which would in any case tell Bison which rule to use, can still do so.
2455 Another solution is to bury the action inside a nonterminal symbol which
2456 serves as a subroutine:
2460 subroutine: /* empty */
2461 @{ prepare_for_local_variables (); @}
2467 compound: subroutine
2468 '@{' declarations statements '@}'
2470 '@{' statements '@}'
2476 Now Bison can execute the action in the rule for @code{subroutine} without
2477 deciding which rule for @code{compound} it will eventually use. Note that
2478 the action is now at the end of its rule. Any mid-rule action can be
2479 converted to an end-of-rule action in this way, and this is what Bison
2480 actually does to implement mid-rule actions.
2482 @node Locations, Declarations, Semantics, Grammar File
2483 @section Tracking Locations
2485 @cindex textual position
2486 @cindex position, textual
2488 Though grammar rules and semantic actions are enough to write a fully
2489 functional parser, it can be useful to process some additionnal informations,
2490 especially symbol locations.
2492 @c (terminal or not) ?
2494 The way locations are handled is defined by providing a data type, and actions
2495 to take when rules are matched.
2498 * Location Type:: Specifying a data type for locations.
2499 * Actions and Locations:: Using locations in actions.
2500 * Location Default Action:: Defining a general way to compute locations.
2503 @node Location Type, Actions and Locations, , Locations
2504 @subsection Data Type of Locations
2505 @cindex data type of locations
2506 @cindex default location type
2508 Defining a data type for locations is much simpler than for semantic values,
2509 since all tokens and groupings always use the same type.
2511 The type of locations is specified by defining a macro called @code{YYLTYPE}.
2512 When @code{YYLTYPE} is not defined, Bison uses a default structure type with
2525 @node Actions and Locations, Location Default Action, Location Type, Locations
2526 @subsection Actions and Locations
2527 @cindex location actions
2528 @cindex actions, location
2532 Actions are not only useful for defining language semantics, but also for
2533 describing the behavior of the output parser with locations.
2535 The most obvious way for building locations of syntactic groupings is very
2536 similar to the way semantic values are computed. In a given rule, several
2537 constructs can be used to access the locations of the elements being matched.
2538 The location of the @var{n}th component of the right hand side is
2539 @code{@@@var{n}}, while the location of the left hand side grouping is
2542 Here is a basic example using the default data type for locations:
2549 @@$.first_column = @@1.first_column;
2550 @@$.first_line = @@1.first_line;
2551 @@$.last_column = @@3.last_column;
2552 @@$.last_line = @@3.last_line;
2558 printf("Division by zero, l%d,c%d-l%d,c%d",
2559 @@3.first_line, @@3.first_column,
2560 @@3.last_line, @@3.last_column);
2566 As for semantic values, there is a default action for locations that is
2567 run each time a rule is matched. It sets the beginning of @code{@@$} to the
2568 beginning of the first symbol, and the end of @code{@@$} to the end of the
2571 With this default action, the location tracking can be fully automatic. The
2572 example above simply rewrites this way:
2584 printf("Division by zero, l%d,c%d-l%d,c%d",
2585 @@3.first_line, @@3.first_column,
2586 @@3.last_line, @@3.last_column);
2592 @node Location Default Action, , Actions and Locations, Locations
2593 @subsection Default Action for Locations
2594 @vindex YYLLOC_DEFAULT
2596 Actually, actions are not the best place to compute locations. Since locations
2597 are much more general than semantic values, there is room in the output parser
2598 to redefine the default action to take for each rule. The
2599 @code{YYLLOC_DEFAULT} macro is called each time a rule is matched, before the
2600 associated action is run.
2602 Most of the time, this macro is general enough to suppress location
2603 dedicated code from semantic actions.
2605 The @code{YYLLOC_DEFAULT} macro takes three parameters. The first one is
2606 the location of the grouping (the result of the computation). The second one
2607 is an array holding locations of all right hand side elements of the rule
2608 being matched. The last one is the size of the right hand side rule.
2610 By default, it is defined this way:
2614 #define YYLLOC_DEFAULT(Current, Rhs, N) \
2615 Current.last_line = Rhs[N].last_line; \
2616 Current.last_column = Rhs[N].last_column;
2620 When defining @code{YYLLOC_DEFAULT}, you should consider that:
2624 All arguments are free of side-effects. However, only the first one (the
2625 result) should be modified by @code{YYLLOC_DEFAULT}.
2628 Before @code{YYLLOC_DEFAULT} is executed, the output parser sets @code{@@$}
2632 For consistency with semantic actions, valid indexes for the location array
2633 range from 1 to @var{n}.
2636 @node Declarations, Multiple Parsers, Locations, Grammar File
2637 @section Bison Declarations
2638 @cindex declarations, Bison
2639 @cindex Bison declarations
2641 The @dfn{Bison declarations} section of a Bison grammar defines the symbols
2642 used in formulating the grammar and the data types of semantic values.
2645 All token type names (but not single-character literal tokens such as
2646 @code{'+'} and @code{'*'}) must be declared. Nonterminal symbols must be
2647 declared if you need to specify which data type to use for the semantic
2648 value (@pxref{Multiple Types, ,More Than One Value Type}).
2650 The first rule in the file also specifies the start symbol, by default.
2651 If you want some other symbol to be the start symbol, you must declare
2652 it explicitly (@pxref{Language and Grammar, ,Languages and Context-Free Grammars}).
2655 * Token Decl:: Declaring terminal symbols.
2656 * Precedence Decl:: Declaring terminals with precedence and associativity.
2657 * Union Decl:: Declaring the set of all semantic value types.
2658 * Type Decl:: Declaring the choice of type for a nonterminal symbol.
2659 * Expect Decl:: Suppressing warnings about shift/reduce conflicts.
2660 * Start Decl:: Specifying the start symbol.
2661 * Pure Decl:: Requesting a reentrant parser.
2662 * Decl Summary:: Table of all Bison declarations.
2665 @node Token Decl, Precedence Decl, , Declarations
2666 @subsection Token Type Names
2667 @cindex declaring token type names
2668 @cindex token type names, declaring
2669 @cindex declaring literal string tokens
2672 The basic way to declare a token type name (terminal symbol) is as follows:
2678 Bison will convert this into a @code{#define} directive in
2679 the parser, so that the function @code{yylex} (if it is in this file)
2680 can use the name @var{name} to stand for this token type's code.
2682 Alternatively, you can use @code{%left}, @code{%right}, or
2683 @code{%nonassoc} instead of @code{%token}, if you wish to specify
2684 associativity and precedence. @xref{Precedence Decl, ,Operator
2687 You can explicitly specify the numeric code for a token type by appending
2688 an integer value in the field immediately following the token name:
2695 It is generally best, however, to let Bison choose the numeric codes for
2696 all token types. Bison will automatically select codes that don't conflict
2697 with each other or with ASCII characters.
2699 In the event that the stack type is a union, you must augment the
2700 @code{%token} or other token declaration to include the data type
2701 alternative delimited by angle-brackets (@pxref{Multiple Types, ,More Than One Value Type}).
2707 %union @{ /* define stack type */
2711 %token <val> NUM /* define token NUM and its type */
2715 You can associate a literal string token with a token type name by
2716 writing the literal string at the end of a @code{%token}
2717 declaration which declares the name. For example:
2724 For example, a grammar for the C language might specify these names with
2725 equivalent literal string tokens:
2728 %token <operator> OR "||"
2729 %token <operator> LE 134 "<="
2734 Once you equate the literal string and the token name, you can use them
2735 interchangeably in further declarations or the grammar rules. The
2736 @code{yylex} function can use the token name or the literal string to
2737 obtain the token type code number (@pxref{Calling Convention}).
2739 @node Precedence Decl, Union Decl, Token Decl, Declarations
2740 @subsection Operator Precedence
2741 @cindex precedence declarations
2742 @cindex declaring operator precedence
2743 @cindex operator precedence, declaring
2745 Use the @code{%left}, @code{%right} or @code{%nonassoc} declaration to
2746 declare a token and specify its precedence and associativity, all at
2747 once. These are called @dfn{precedence declarations}.
2748 @xref{Precedence, ,Operator Precedence}, for general information on operator precedence.
2750 The syntax of a precedence declaration is the same as that of
2751 @code{%token}: either
2754 %left @var{symbols}@dots{}
2761 %left <@var{type}> @var{symbols}@dots{}
2764 And indeed any of these declarations serves the purposes of @code{%token}.
2765 But in addition, they specify the associativity and relative precedence for
2766 all the @var{symbols}:
2770 The associativity of an operator @var{op} determines how repeated uses
2771 of the operator nest: whether @samp{@var{x} @var{op} @var{y} @var{op}
2772 @var{z}} is parsed by grouping @var{x} with @var{y} first or by
2773 grouping @var{y} with @var{z} first. @code{%left} specifies
2774 left-associativity (grouping @var{x} with @var{y} first) and
2775 @code{%right} specifies right-associativity (grouping @var{y} with
2776 @var{z} first). @code{%nonassoc} specifies no associativity, which
2777 means that @samp{@var{x} @var{op} @var{y} @var{op} @var{z}} is
2778 considered a syntax error.
2781 The precedence of an operator determines how it nests with other operators.
2782 All the tokens declared in a single precedence declaration have equal
2783 precedence and nest together according to their associativity.
2784 When two tokens declared in different precedence declarations associate,
2785 the one declared later has the higher precedence and is grouped first.
2788 @node Union Decl, Type Decl, Precedence Decl, Declarations
2789 @subsection The Collection of Value Types
2790 @cindex declaring value types
2791 @cindex value types, declaring
2794 The @code{%union} declaration specifies the entire collection of possible
2795 data types for semantic values. The keyword @code{%union} is followed by a
2796 pair of braces containing the same thing that goes inside a @code{union} in
2811 This says that the two alternative types are @code{double} and @code{symrec
2812 *}. They are given names @code{val} and @code{tptr}; these names are used
2813 in the @code{%token} and @code{%type} declarations to pick one of the types
2814 for a terminal or nonterminal symbol (@pxref{Type Decl, ,Nonterminal Symbols}).
2816 Note that, unlike making a @code{union} declaration in C, you do not write
2817 a semicolon after the closing brace.
2819 @node Type Decl, Expect Decl, Union Decl, Declarations
2820 @subsection Nonterminal Symbols
2821 @cindex declaring value types, nonterminals
2822 @cindex value types, nonterminals, declaring
2826 When you use @code{%union} to specify multiple value types, you must
2827 declare the value type of each nonterminal symbol for which values are
2828 used. This is done with a @code{%type} declaration, like this:
2831 %type <@var{type}> @var{nonterminal}@dots{}
2835 Here @var{nonterminal} is the name of a nonterminal symbol, and @var{type}
2836 is the name given in the @code{%union} to the alternative that you want
2837 (@pxref{Union Decl, ,The Collection of Value Types}). You can give any number of nonterminal symbols in
2838 the same @code{%type} declaration, if they have the same value type. Use
2839 spaces to separate the symbol names.
2841 You can also declare the value type of a terminal symbol. To do this,
2842 use the same @code{<@var{type}>} construction in a declaration for the
2843 terminal symbol. All kinds of token declarations allow
2844 @code{<@var{type}>}.
2846 @node Expect Decl, Start Decl, Type Decl, Declarations
2847 @subsection Suppressing Conflict Warnings
2848 @cindex suppressing conflict warnings
2849 @cindex preventing warnings about conflicts
2850 @cindex warnings, preventing
2851 @cindex conflicts, suppressing warnings of
2854 Bison normally warns if there are any conflicts in the grammar
2855 (@pxref{Shift/Reduce, ,Shift/Reduce Conflicts}), but most real grammars have harmless shift/reduce
2856 conflicts which are resolved in a predictable way and would be difficult to
2857 eliminate. It is desirable to suppress the warning about these conflicts
2858 unless the number of conflicts changes. You can do this with the
2859 @code{%expect} declaration.
2861 The declaration looks like this:
2867 Here @var{n} is a decimal integer. The declaration says there should be no
2868 warning if there are @var{n} shift/reduce conflicts and no reduce/reduce
2869 conflicts. The usual warning is given if there are either more or fewer
2870 conflicts, or if there are any reduce/reduce conflicts.
2872 In general, using @code{%expect} involves these steps:
2876 Compile your grammar without @code{%expect}. Use the @samp{-v} option
2877 to get a verbose list of where the conflicts occur. Bison will also
2878 print the number of conflicts.
2881 Check each of the conflicts to make sure that Bison's default
2882 resolution is what you really want. If not, rewrite the grammar and
2883 go back to the beginning.
2886 Add an @code{%expect} declaration, copying the number @var{n} from the
2887 number which Bison printed.
2890 Now Bison will stop annoying you about the conflicts you have checked, but
2891 it will warn you again if changes in the grammar result in additional
2894 @node Start Decl, Pure Decl, Expect Decl, Declarations
2895 @subsection The Start-Symbol
2896 @cindex declaring the start symbol
2897 @cindex start symbol, declaring
2898 @cindex default start symbol
2901 Bison assumes by default that the start symbol for the grammar is the first
2902 nonterminal specified in the grammar specification section. The programmer
2903 may override this restriction with the @code{%start} declaration as follows:
2909 @node Pure Decl, Decl Summary, Start Decl, Declarations
2910 @subsection A Pure (Reentrant) Parser
2911 @cindex reentrant parser
2913 @findex %pure_parser
2915 A @dfn{reentrant} program is one which does not alter in the course of
2916 execution; in other words, it consists entirely of @dfn{pure} (read-only)
2917 code. Reentrancy is important whenever asynchronous execution is possible;
2918 for example, a non-reentrant program may not be safe to call from a signal
2919 handler. In systems with multiple threads of control, a non-reentrant
2920 program must be called only within interlocks.
2922 Normally, Bison generates a parser which is not reentrant. This is
2923 suitable for most uses, and it permits compatibility with YACC. (The
2924 standard YACC interfaces are inherently nonreentrant, because they use
2925 statically allocated variables for communication with @code{yylex},
2926 including @code{yylval} and @code{yylloc}.)
2928 Alternatively, you can generate a pure, reentrant parser. The Bison
2929 declaration @code{%pure_parser} says that you want the parser to be
2930 reentrant. It looks like this:
2936 The result is that the communication variables @code{yylval} and
2937 @code{yylloc} become local variables in @code{yyparse}, and a different
2938 calling convention is used for the lexical analyzer function
2939 @code{yylex}. @xref{Pure Calling, ,Calling Conventions for Pure
2940 Parsers}, for the details of this. The variable @code{yynerrs} also
2941 becomes local in @code{yyparse} (@pxref{Error Reporting, ,The Error
2942 Reporting Function @code{yyerror}}). The convention for calling
2943 @code{yyparse} itself is unchanged.
2945 Whether the parser is pure has nothing to do with the grammar rules.
2946 You can generate either a pure parser or a nonreentrant parser from any
2949 @node Decl Summary, , Pure Decl, Declarations
2950 @subsection Bison Declaration Summary
2951 @cindex Bison declaration summary
2952 @cindex declaration summary
2953 @cindex summary, Bison declaration
2955 Here is a summary of all Bison declarations:
2959 Declare the collection of data types that semantic values may have
2960 (@pxref{Union Decl, ,The Collection of Value Types}).
2963 Declare a terminal symbol (token type name) with no precedence
2964 or associativity specified (@pxref{Token Decl, ,Token Type Names}).
2967 Declare a terminal symbol (token type name) that is right-associative
2968 (@pxref{Precedence Decl, ,Operator Precedence}).
2971 Declare a terminal symbol (token type name) that is left-associative
2972 (@pxref{Precedence Decl, ,Operator Precedence}).
2975 Declare a terminal symbol (token type name) that is nonassociative
2976 (using it in a way that would be associative is a syntax error)
2977 (@pxref{Precedence Decl, ,Operator Precedence}).
2980 Declare the type of semantic values for a nonterminal symbol
2981 (@pxref{Type Decl, ,Nonterminal Symbols}).
2984 Specify the grammar's start symbol (@pxref{Start Decl, ,The
2988 Declare the expected number of shift-reduce conflicts
2989 (@pxref{Expect Decl, ,Suppressing Conflict Warnings}).
2992 @itemx %fixed_output_files
2993 Pretend the option @option{--yacc} was given, i.e., imitate Yacc,
2994 including its naming conventions. @xref{Bison Options}, for more.
2997 Generate the code processing the locations (@pxref{Action Features,
2998 ,Special Features for Use in Actions}). This mode is enabled as soon as
2999 the grammar uses the special @samp{@@@var{n}} tokens, but if your
3000 grammar does not use it, using @samp{%locations} allows for more
3001 accurate parse error messages.
3004 Request a pure (reentrant) parser program (@pxref{Pure Decl, ,A Pure
3005 (Reentrant) Parser}).
3008 Do not include any C code in the parser file; generate tables only. The
3009 parser file contains just @code{#define} directives and static variable
3012 This option also tells Bison to write the C code for the grammar actions
3013 into a file named @file{@var{filename}.act}, in the form of a
3014 brace-surrounded body fit for a @code{switch} statement.
3017 Don't generate any @code{#line} preprocessor commands in the parser
3018 file. Ordinarily Bison writes these commands in the parser file so that
3019 the C compiler and debuggers will associate errors and object code with
3020 your source file (the grammar file). This directive causes them to
3021 associate errors with the parser file, treating it an independent source
3022 file in its own right.
3025 Output a definition of the macro @code{YYDEBUG} into the parser file, so
3026 that the debugging facilities are compiled. @xref{Debugging, ,Debugging
3030 Write an extra output file containing macro definitions for the token
3031 type names defined in the grammar and the semantic value type
3032 @code{YYSTYPE}, as well as a few @code{extern} variable declarations.
3034 If the parser output file is named @file{@var{name}.c} then this file
3035 is named @file{@var{name}.h}.@refill
3037 This output file is essential if you wish to put the definition of
3038 @code{yylex} in a separate source file, because @code{yylex} needs to
3039 be able to refer to token type codes and the variable
3040 @code{yylval}. @xref{Token Values, ,Semantic Values of Tokens}.@refill
3043 Write an extra output file containing verbose descriptions of the
3044 parser states and what is done for each type of look-ahead token in
3047 This file also describes all the conflicts, both those resolved by
3048 operator precedence and the unresolved ones.
3050 The file's name is made by removing @samp{.tab.c} or @samp{.c} from
3051 the parser output file name, and adding @samp{.output} instead.@refill
3053 Therefore, if the input file is @file{foo.y}, then the parser file is
3054 called @file{foo.tab.c} by default. As a consequence, the verbose
3055 output file is called @file{foo.output}.@refill
3058 Generate an array of token names in the parser file. The name of the
3059 array is @code{yytname}; @code{yytname[@var{i}]} is the name of the
3060 token whose internal Bison token code number is @var{i}. The first three
3061 elements of @code{yytname} are always @code{"$"}, @code{"error"}, and
3062 @code{"$illegal"}; after these come the symbols defined in the grammar
3065 For single-character literal tokens and literal string tokens, the name
3066 in the table includes the single-quote or double-quote characters: for
3067 example, @code{"'+'"} is a single-character literal and @code{"\"<=\""}
3068 is a literal string token. All the characters of the literal string
3069 token appear verbatim in the string found in the table; even
3070 double-quote characters are not escaped. For example, if the token
3071 consists of three characters @samp{*"*}, its string in @code{yytname}
3072 contains @samp{"*"*"}. (In C, that would be written as
3075 When you specify @code{%token_table}, Bison also generates macro
3076 definitions for macros @code{YYNTOKENS}, @code{YYNNTS}, and
3077 @code{YYNRULES}, and @code{YYNSTATES}:
3081 The highest token number, plus one.
3083 The number of nonterminal symbols.
3085 The number of grammar rules,
3087 The number of parser states (@pxref{Parser States}).
3091 @node Multiple Parsers,, Declarations, Grammar File
3092 @section Multiple Parsers in the Same Program
3094 Most programs that use Bison parse only one language and therefore contain
3095 only one Bison parser. But what if you want to parse more than one
3096 language with the same program? Then you need to avoid a name conflict
3097 between different definitions of @code{yyparse}, @code{yylval}, and so on.
3099 The easy way to do this is to use the option @samp{-p @var{prefix}}
3100 (@pxref{Invocation, ,Invoking Bison}). This renames the interface functions and
3101 variables of the Bison parser to start with @var{prefix} instead of
3102 @samp{yy}. You can use this to give each parser distinct names that do
3105 The precise list of symbols renamed is @code{yyparse}, @code{yylex},
3106 @code{yyerror}, @code{yynerrs}, @code{yylval}, @code{yychar} and
3107 @code{yydebug}. For example, if you use @samp{-p c}, the names become
3108 @code{cparse}, @code{clex}, and so on.
3110 @strong{All the other variables and macros associated with Bison are not
3111 renamed.} These others are not global; there is no conflict if the same
3112 name is used in different parsers. For example, @code{YYSTYPE} is not
3113 renamed, but defining this in different ways in different parsers causes
3114 no trouble (@pxref{Value Type, ,Data Types of Semantic Values}).
3116 The @samp{-p} option works by adding macro definitions to the beginning
3117 of the parser source file, defining @code{yyparse} as
3118 @code{@var{prefix}parse}, and so on. This effectively substitutes one
3119 name for the other in the entire parser file.
3121 @node Interface, Algorithm, Grammar File, Top
3122 @chapter Parser C-Language Interface
3123 @cindex C-language interface
3126 The Bison parser is actually a C function named @code{yyparse}. Here we
3127 describe the interface conventions of @code{yyparse} and the other
3128 functions that it needs to use.
3130 Keep in mind that the parser uses many C identifiers starting with
3131 @samp{yy} and @samp{YY} for internal purposes. If you use such an
3132 identifier (aside from those in this manual) in an action or in additional
3133 C code in the grammar file, you are likely to run into trouble.
3136 * Parser Function:: How to call @code{yyparse} and what it returns.
3137 * Lexical:: You must supply a function @code{yylex}
3139 * Error Reporting:: You must supply a function @code{yyerror}.
3140 * Action Features:: Special features for use in actions.
3143 @node Parser Function, Lexical, , Interface
3144 @section The Parser Function @code{yyparse}
3147 You call the function @code{yyparse} to cause parsing to occur. This
3148 function reads tokens, executes actions, and ultimately returns when it
3149 encounters end-of-input or an unrecoverable syntax error. You can also
3150 write an action which directs @code{yyparse} to return immediately
3151 without reading further.
3153 The value returned by @code{yyparse} is 0 if parsing was successful (return
3154 is due to end-of-input).
3156 The value is 1 if parsing failed (return is due to a syntax error).
3158 In an action, you can cause immediate return from @code{yyparse} by using
3164 Return immediately with value 0 (to report success).
3168 Return immediately with value 1 (to report failure).
3171 @node Lexical, Error Reporting, Parser Function, Interface
3172 @section The Lexical Analyzer Function @code{yylex}
3174 @cindex lexical analyzer
3176 The @dfn{lexical analyzer} function, @code{yylex}, recognizes tokens from
3177 the input stream and returns them to the parser. Bison does not create
3178 this function automatically; you must write it so that @code{yyparse} can
3179 call it. The function is sometimes referred to as a lexical scanner.
3181 In simple programs, @code{yylex} is often defined at the end of the Bison
3182 grammar file. If @code{yylex} is defined in a separate source file, you
3183 need to arrange for the token-type macro definitions to be available there.
3184 To do this, use the @samp{-d} option when you run Bison, so that it will
3185 write these macro definitions into a separate header file
3186 @file{@var{name}.tab.h} which you can include in the other source files
3187 that need it. @xref{Invocation, ,Invoking Bison}.@refill
3190 * Calling Convention:: How @code{yyparse} calls @code{yylex}.
3191 * Token Values:: How @code{yylex} must return the semantic value
3192 of the token it has read.
3193 * Token Positions:: How @code{yylex} must return the text position
3194 (line number, etc.) of the token, if the
3196 * Pure Calling:: How the calling convention differs
3197 in a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
3200 @node Calling Convention, Token Values, , Lexical
3201 @subsection Calling Convention for @code{yylex}
3203 The value that @code{yylex} returns must be the numeric code for the type
3204 of token it has just found, or 0 for end-of-input.
3206 When a token is referred to in the grammar rules by a name, that name
3207 in the parser file becomes a C macro whose definition is the proper
3208 numeric code for that token type. So @code{yylex} can use the name
3209 to indicate that type. @xref{Symbols}.
3211 When a token is referred to in the grammar rules by a character literal,
3212 the numeric code for that character is also the code for the token type.
3213 So @code{yylex} can simply return that character code. The null character
3214 must not be used this way, because its code is zero and that is what
3215 signifies end-of-input.
3217 Here is an example showing these things:
3224 if (c == EOF) /* Detect end of file. */
3227 if (c == '+' || c == '-')
3228 return c; /* Assume token type for `+' is '+'. */
3230 return INT; /* Return the type of the token. */
3236 This interface has been designed so that the output from the @code{lex}
3237 utility can be used without change as the definition of @code{yylex}.
3239 If the grammar uses literal string tokens, there are two ways that
3240 @code{yylex} can determine the token type codes for them:
3244 If the grammar defines symbolic token names as aliases for the
3245 literal string tokens, @code{yylex} can use these symbolic names like
3246 all others. In this case, the use of the literal string tokens in
3247 the grammar file has no effect on @code{yylex}.
3250 @code{yylex} can find the multicharacter token in the @code{yytname}
3251 table. The index of the token in the table is the token type's code.
3252 The name of a multicharacter token is recorded in @code{yytname} with a
3253 double-quote, the token's characters, and another double-quote. The
3254 token's characters are not escaped in any way; they appear verbatim in
3255 the contents of the string in the table.
3257 Here's code for looking up a token in @code{yytname}, assuming that the
3258 characters of the token are stored in @code{token_buffer}.
3261 for (i = 0; i < YYNTOKENS; i++)
3264 && yytname[i][0] == '"'
3265 && strncmp (yytname[i] + 1, token_buffer,
3266 strlen (token_buffer))
3267 && yytname[i][strlen (token_buffer) + 1] == '"'
3268 && yytname[i][strlen (token_buffer) + 2] == 0)
3273 The @code{yytname} table is generated only if you use the
3274 @code{%token_table} declaration. @xref{Decl Summary}.
3277 @node Token Values, Token Positions, Calling Convention, Lexical
3278 @subsection Semantic Values of Tokens
3281 In an ordinary (non-reentrant) parser, the semantic value of the token must
3282 be stored into the global variable @code{yylval}. When you are using
3283 just one data type for semantic values, @code{yylval} has that type.
3284 Thus, if the type is @code{int} (the default), you might write this in
3290 yylval = value; /* Put value onto Bison stack. */
3291 return INT; /* Return the type of the token. */
3296 When you are using multiple data types, @code{yylval}'s type is a union
3297 made from the @code{%union} declaration (@pxref{Union Decl, ,The Collection of Value Types}). So when
3298 you store a token's value, you must use the proper member of the union.
3299 If the @code{%union} declaration looks like this:
3312 then the code in @code{yylex} might look like this:
3317 yylval.intval = value; /* Put value onto Bison stack. */
3318 return INT; /* Return the type of the token. */
3323 @node Token Positions, Pure Calling, Token Values, Lexical
3324 @subsection Textual Positions of Tokens
3327 If you are using the @samp{@@@var{n}}-feature (@pxref{Locations, ,
3328 Tracking Locations}) in actions to keep track of the
3329 textual locations of tokens and groupings, then you must provide this
3330 information in @code{yylex}. The function @code{yyparse} expects to
3331 find the textual location of a token just parsed in the global variable
3332 @code{yylloc}. So @code{yylex} must store the proper data in that
3335 By default, the value of @code{yylloc} is a structure and you need only
3336 initialize the members that are going to be used by the actions. The
3337 four members are called @code{first_line}, @code{first_column},
3338 @code{last_line} and @code{last_column}. Note that the use of this
3339 feature makes the parser noticeably slower.
3342 The data type of @code{yylloc} has the name @code{YYLTYPE}.
3344 @node Pure Calling, , Token Positions, Lexical
3345 @subsection Calling Conventions for Pure Parsers
3347 When you use the Bison declaration @code{%pure_parser} to request a
3348 pure, reentrant parser, the global communication variables @code{yylval}
3349 and @code{yylloc} cannot be used. (@xref{Pure Decl, ,A Pure (Reentrant)
3350 Parser}.) In such parsers the two global variables are replaced by
3351 pointers passed as arguments to @code{yylex}. You must declare them as
3352 shown here, and pass the information back by storing it through those
3357 yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
3360 *lvalp = value; /* Put value onto Bison stack. */
3361 return INT; /* Return the type of the token. */
3366 If the grammar file does not use the @samp{@@} constructs to refer to
3367 textual positions, then the type @code{YYLTYPE} will not be defined. In
3368 this case, omit the second argument; @code{yylex} will be called with
3371 @vindex YYPARSE_PARAM
3372 If you use a reentrant parser, you can optionally pass additional
3373 parameter information to it in a reentrant way. To do so, define the
3374 macro @code{YYPARSE_PARAM} as a variable name. This modifies the
3375 @code{yyparse} function to accept one argument, of type @code{void *},
3378 When you call @code{yyparse}, pass the address of an object, casting the
3379 address to @code{void *}. The grammar actions can refer to the contents
3380 of the object by casting the pointer value back to its proper type and
3381 then dereferencing it. Here's an example. Write this in the parser:
3385 struct parser_control
3391 #define YYPARSE_PARAM parm
3396 Then call the parser like this:
3399 struct parser_control
3408 struct parser_control foo;
3409 @dots{} /* @r{Store proper data in @code{foo}.} */
3410 value = yyparse ((void *) &foo);
3416 In the grammar actions, use expressions like this to refer to the data:
3419 ((struct parser_control *) parm)->randomness
3423 If you wish to pass the additional parameter data to @code{yylex},
3424 define the macro @code{YYLEX_PARAM} just like @code{YYPARSE_PARAM}, as
3429 struct parser_control
3435 #define YYPARSE_PARAM parm
3436 #define YYLEX_PARAM parm
3440 You should then define @code{yylex} to accept one additional
3441 argument---the value of @code{parm}. (This makes either two or three
3442 arguments in total, depending on whether an argument of type
3443 @code{YYLTYPE} is passed.) You can declare the argument as a pointer to
3444 the proper object type, or you can declare it as @code{void *} and
3445 access the contents as shown above.
3447 You can use @samp{%pure_parser} to request a reentrant parser without
3448 also using @code{YYPARSE_PARAM}. Then you should call @code{yyparse}
3449 with no arguments, as usual.
3451 @node Error Reporting, Action Features, Lexical, Interface
3452 @section The Error Reporting Function @code{yyerror}
3453 @cindex error reporting function
3456 @cindex syntax error
3458 The Bison parser detects a @dfn{parse error} or @dfn{syntax error}
3459 whenever it reads a token which cannot satisfy any syntax rule. An
3460 action in the grammar can also explicitly proclaim an error, using the
3461 macro @code{YYERROR} (@pxref{Action Features, ,Special Features for Use
3464 The Bison parser expects to report the error by calling an error
3465 reporting function named @code{yyerror}, which you must supply. It is
3466 called by @code{yyparse} whenever a syntax error is found, and it
3467 receives one argument. For a parse error, the string is normally
3468 @w{@code{"parse error"}}.
3470 @findex YYERROR_VERBOSE
3471 If you define the macro @code{YYERROR_VERBOSE} in the Bison declarations
3472 section (@pxref{Bison Declarations, ,The Bison Declarations Section}),
3473 then Bison provides a more verbose and specific error message string
3474 instead of just plain @w{@code{"parse error"}}. It doesn't matter what
3475 definition you use for @code{YYERROR_VERBOSE}, just whether you define
3478 The parser can detect one other kind of error: stack overflow. This
3479 happens when the input contains constructions that are very deeply
3480 nested. It isn't likely you will encounter this, since the Bison
3481 parser extends its stack automatically up to a very large limit. But
3482 if overflow happens, @code{yyparse} calls @code{yyerror} in the usual
3483 fashion, except that the argument string is @w{@code{"parser stack
3486 The following definition suffices in simple programs:
3495 fprintf (stderr, "%s\n", s);
3500 After @code{yyerror} returns to @code{yyparse}, the latter will attempt
3501 error recovery if you have written suitable error recovery grammar rules
3502 (@pxref{Error Recovery}). If recovery is impossible, @code{yyparse} will
3503 immediately return 1.
3506 The variable @code{yynerrs} contains the number of syntax errors
3507 encountered so far. Normally this variable is global; but if you
3508 request a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}) then it is a local variable
3509 which only the actions can access.
3511 @node Action Features, , Error Reporting, Interface
3512 @section Special Features for Use in Actions
3513 @cindex summary, action features
3514 @cindex action features summary
3516 Here is a table of Bison constructs, variables and macros that
3517 are useful in actions.
3521 Acts like a variable that contains the semantic value for the
3522 grouping made by the current rule. @xref{Actions}.
3525 Acts like a variable that contains the semantic value for the
3526 @var{n}th component of the current rule. @xref{Actions}.
3528 @item $<@var{typealt}>$
3529 Like @code{$$} but specifies alternative @var{typealt} in the union
3530 specified by the @code{%union} declaration. @xref{Action Types, ,Data Types of Values in Actions}.
3532 @item $<@var{typealt}>@var{n}
3533 Like @code{$@var{n}} but specifies alternative @var{typealt} in the
3534 union specified by the @code{%union} declaration.
3535 @xref{Action Types, ,Data Types of Values in Actions}.@refill
3538 Return immediately from @code{yyparse}, indicating failure.
3539 @xref{Parser Function, ,The Parser Function @code{yyparse}}.
3542 Return immediately from @code{yyparse}, indicating success.
3543 @xref{Parser Function, ,The Parser Function @code{yyparse}}.
3545 @item YYBACKUP (@var{token}, @var{value});
3547 Unshift a token. This macro is allowed only for rules that reduce
3548 a single value, and only when there is no look-ahead token.
3549 It installs a look-ahead token with token type @var{token} and
3550 semantic value @var{value}; then it discards the value that was
3551 going to be reduced by this rule.
3553 If the macro is used when it is not valid, such as when there is
3554 a look-ahead token already, then it reports a syntax error with
3555 a message @samp{cannot back up} and performs ordinary error
3558 In either case, the rest of the action is not executed.
3562 Value stored in @code{yychar} when there is no look-ahead token.
3566 Cause an immediate syntax error. This statement initiates error
3567 recovery just as if the parser itself had detected an error; however, it
3568 does not call @code{yyerror}, and does not print any message. If you
3569 want to print an error message, call @code{yyerror} explicitly before
3570 the @samp{YYERROR;} statement. @xref{Error Recovery}.
3573 This macro stands for an expression that has the value 1 when the parser
3574 is recovering from a syntax error, and 0 the rest of the time.
3575 @xref{Error Recovery}.
3578 Variable containing the current look-ahead token. (In a pure parser,
3579 this is actually a local variable within @code{yyparse}.) When there is
3580 no look-ahead token, the value @code{YYEMPTY} is stored in the variable.
3581 @xref{Look-Ahead, ,Look-Ahead Tokens}.
3584 Discard the current look-ahead token. This is useful primarily in
3585 error rules. @xref{Error Recovery}.
3588 Resume generating error messages immediately for subsequent syntax
3589 errors. This is useful primarily in error rules.
3590 @xref{Error Recovery}.
3594 Acts like a structure variable containing information on the textual position
3595 of the grouping made by the current rule. @xref{Locations, ,
3596 Tracking Locations}.
3598 @c Check if those paragraphs are still useful or not.
3602 @c int first_line, last_line;
3603 @c int first_column, last_column;
3607 @c Thus, to get the starting line number of the third component, you would
3608 @c use @samp{@@3.first_line}.
3610 @c In order for the members of this structure to contain valid information,
3611 @c you must make @code{yylex} supply this information about each token.
3612 @c If you need only certain members, then @code{yylex} need only fill in
3615 @c The use of this feature makes the parser noticeably slower.
3619 Acts like a structure variable containing information on the textual position
3620 of the @var{n}th component of the current rule. @xref{Locations, ,
3621 Tracking Locations}.
3625 @node Algorithm, Error Recovery, Interface, Top
3626 @chapter The Bison Parser Algorithm
3627 @cindex Bison parser algorithm
3628 @cindex algorithm of parser
3631 @cindex parser stack
3632 @cindex stack, parser
3634 As Bison reads tokens, it pushes them onto a stack along with their
3635 semantic values. The stack is called the @dfn{parser stack}. Pushing a
3636 token is traditionally called @dfn{shifting}.
3638 For example, suppose the infix calculator has read @samp{1 + 5 *}, with a
3639 @samp{3} to come. The stack will have four elements, one for each token
3642 But the stack does not always have an element for each token read. When
3643 the last @var{n} tokens and groupings shifted match the components of a
3644 grammar rule, they can be combined according to that rule. This is called
3645 @dfn{reduction}. Those tokens and groupings are replaced on the stack by a
3646 single grouping whose symbol is the result (left hand side) of that rule.
3647 Running the rule's action is part of the process of reduction, because this
3648 is what computes the semantic value of the resulting grouping.
3650 For example, if the infix calculator's parser stack contains this:
3657 and the next input token is a newline character, then the last three
3658 elements can be reduced to 15 via the rule:
3661 expr: expr '*' expr;
3665 Then the stack contains just these three elements:
3672 At this point, another reduction can be made, resulting in the single value
3673 16. Then the newline token can be shifted.
3675 The parser tries, by shifts and reductions, to reduce the entire input down
3676 to a single grouping whose symbol is the grammar's start-symbol
3677 (@pxref{Language and Grammar, ,Languages and Context-Free Grammars}).
3679 This kind of parser is known in the literature as a bottom-up parser.
3682 * Look-Ahead:: Parser looks one token ahead when deciding what to do.
3683 * Shift/Reduce:: Conflicts: when either shifting or reduction is valid.
3684 * Precedence:: Operator precedence works by resolving conflicts.
3685 * Contextual Precedence:: When an operator's precedence depends on context.
3686 * Parser States:: The parser is a finite-state-machine with stack.
3687 * Reduce/Reduce:: When two rules are applicable in the same situation.
3688 * Mystery Conflicts:: Reduce/reduce conflicts that look unjustified.
3689 * Stack Overflow:: What happens when stack gets full. How to avoid it.
3692 @node Look-Ahead, Shift/Reduce, , Algorithm
3693 @section Look-Ahead Tokens
3694 @cindex look-ahead token
3696 The Bison parser does @emph{not} always reduce immediately as soon as the
3697 last @var{n} tokens and groupings match a rule. This is because such a
3698 simple strategy is inadequate to handle most languages. Instead, when a
3699 reduction is possible, the parser sometimes ``looks ahead'' at the next
3700 token in order to decide what to do.
3702 When a token is read, it is not immediately shifted; first it becomes the
3703 @dfn{look-ahead token}, which is not on the stack. Now the parser can
3704 perform one or more reductions of tokens and groupings on the stack, while
3705 the look-ahead token remains off to the side. When no more reductions
3706 should take place, the look-ahead token is shifted onto the stack. This
3707 does not mean that all possible reductions have been done; depending on the
3708 token type of the look-ahead token, some rules may choose to delay their
3711 Here is a simple case where look-ahead is needed. These three rules define
3712 expressions which contain binary addition operators and postfix unary
3713 factorial operators (@samp{!}), and allow parentheses for grouping.
3730 Suppose that the tokens @w{@samp{1 + 2}} have been read and shifted; what
3731 should be done? If the following token is @samp{)}, then the first three
3732 tokens must be reduced to form an @code{expr}. This is the only valid
3733 course, because shifting the @samp{)} would produce a sequence of symbols
3734 @w{@code{term ')'}}, and no rule allows this.
3736 If the following token is @samp{!}, then it must be shifted immediately so
3737 that @w{@samp{2 !}} can be reduced to make a @code{term}. If instead the
3738 parser were to reduce before shifting, @w{@samp{1 + 2}} would become an
3739 @code{expr}. It would then be impossible to shift the @samp{!} because
3740 doing so would produce on the stack the sequence of symbols @code{expr
3741 '!'}. No rule allows that sequence.
3744 The current look-ahead token is stored in the variable @code{yychar}.
3745 @xref{Action Features, ,Special Features for Use in Actions}.
3747 @node Shift/Reduce, Precedence, Look-Ahead, Algorithm
3748 @section Shift/Reduce Conflicts
3750 @cindex shift/reduce conflicts
3751 @cindex dangling @code{else}
3752 @cindex @code{else}, dangling
3754 Suppose we are parsing a language which has if-then and if-then-else
3755 statements, with a pair of rules like this:
3761 | IF expr THEN stmt ELSE stmt
3767 Here we assume that @code{IF}, @code{THEN} and @code{ELSE} are
3768 terminal symbols for specific keyword tokens.
3770 When the @code{ELSE} token is read and becomes the look-ahead token, the
3771 contents of the stack (assuming the input is valid) are just right for
3772 reduction by the first rule. But it is also legitimate to shift the
3773 @code{ELSE}, because that would lead to eventual reduction by the second
3776 This situation, where either a shift or a reduction would be valid, is
3777 called a @dfn{shift/reduce conflict}. Bison is designed to resolve
3778 these conflicts by choosing to shift, unless otherwise directed by
3779 operator precedence declarations. To see the reason for this, let's
3780 contrast it with the other alternative.
3782 Since the parser prefers to shift the @code{ELSE}, the result is to attach
3783 the else-clause to the innermost if-statement, making these two inputs
3787 if x then if y then win (); else lose;
3789 if x then do; if y then win (); else lose; end;
3792 But if the parser chose to reduce when possible rather than shift, the
3793 result would be to attach the else-clause to the outermost if-statement,
3794 making these two inputs equivalent:
3797 if x then if y then win (); else lose;
3799 if x then do; if y then win (); end; else lose;
3802 The conflict exists because the grammar as written is ambiguous: either
3803 parsing of the simple nested if-statement is legitimate. The established
3804 convention is that these ambiguities are resolved by attaching the
3805 else-clause to the innermost if-statement; this is what Bison accomplishes
3806 by choosing to shift rather than reduce. (It would ideally be cleaner to
3807 write an unambiguous grammar, but that is very hard to do in this case.)
3808 This particular ambiguity was first encountered in the specifications of
3809 Algol 60 and is called the ``dangling @code{else}'' ambiguity.
3811 To avoid warnings from Bison about predictable, legitimate shift/reduce
3812 conflicts, use the @code{%expect @var{n}} declaration. There will be no
3813 warning as long as the number of shift/reduce conflicts is exactly @var{n}.
3814 @xref{Expect Decl, ,Suppressing Conflict Warnings}.
3816 The definition of @code{if_stmt} above is solely to blame for the
3817 conflict, but the conflict does not actually appear without additional
3818 rules. Here is a complete Bison input file that actually manifests the
3823 %token IF THEN ELSE variable
3835 | IF expr THEN stmt ELSE stmt
3843 @node Precedence, Contextual Precedence, Shift/Reduce, Algorithm
3844 @section Operator Precedence
3845 @cindex operator precedence
3846 @cindex precedence of operators
3848 Another situation where shift/reduce conflicts appear is in arithmetic
3849 expressions. Here shifting is not always the preferred resolution; the
3850 Bison declarations for operator precedence allow you to specify when to
3851 shift and when to reduce.
3854 * Why Precedence:: An example showing why precedence is needed.
3855 * Using Precedence:: How to specify precedence in Bison grammars.
3856 * Precedence Examples:: How these features are used in the previous example.
3857 * How Precedence:: How they work.
3860 @node Why Precedence, Using Precedence, , Precedence
3861 @subsection When Precedence is Needed
3863 Consider the following ambiguous grammar fragment (ambiguous because the
3864 input @w{@samp{1 - 2 * 3}} can be parsed in two different ways):
3878 Suppose the parser has seen the tokens @samp{1}, @samp{-} and @samp{2};
3879 should it reduce them via the rule for the subtraction operator? It
3880 depends on the next token. Of course, if the next token is @samp{)}, we
3881 must reduce; shifting is invalid because no single rule can reduce the
3882 token sequence @w{@samp{- 2 )}} or anything starting with that. But if
3883 the next token is @samp{*} or @samp{<}, we have a choice: either
3884 shifting or reduction would allow the parse to complete, but with
3887 To decide which one Bison should do, we must consider the results. If
3888 the next operator token @var{op} is shifted, then it must be reduced
3889 first in order to permit another opportunity to reduce the difference.
3890 The result is (in effect) @w{@samp{1 - (2 @var{op} 3)}}. On the other
3891 hand, if the subtraction is reduced before shifting @var{op}, the result
3892 is @w{@samp{(1 - 2) @var{op} 3}}. Clearly, then, the choice of shift or
3893 reduce should depend on the relative precedence of the operators
3894 @samp{-} and @var{op}: @samp{*} should be shifted first, but not
3897 @cindex associativity
3898 What about input such as @w{@samp{1 - 2 - 5}}; should this be
3899 @w{@samp{(1 - 2) - 5}} or should it be @w{@samp{1 - (2 - 5)}}? For most
3900 operators we prefer the former, which is called @dfn{left association}.
3901 The latter alternative, @dfn{right association}, is desirable for
3902 assignment operators. The choice of left or right association is a
3903 matter of whether the parser chooses to shift or reduce when the stack
3904 contains @w{@samp{1 - 2}} and the look-ahead token is @samp{-}: shifting
3905 makes right-associativity.
3907 @node Using Precedence, Precedence Examples, Why Precedence, Precedence
3908 @subsection Specifying Operator Precedence
3913 Bison allows you to specify these choices with the operator precedence
3914 declarations @code{%left} and @code{%right}. Each such declaration
3915 contains a list of tokens, which are operators whose precedence and
3916 associativity is being declared. The @code{%left} declaration makes all
3917 those operators left-associative and the @code{%right} declaration makes
3918 them right-associative. A third alternative is @code{%nonassoc}, which
3919 declares that it is a syntax error to find the same operator twice ``in a
3922 The relative precedence of different operators is controlled by the
3923 order in which they are declared. The first @code{%left} or
3924 @code{%right} declaration in the file declares the operators whose
3925 precedence is lowest, the next such declaration declares the operators
3926 whose precedence is a little higher, and so on.
3928 @node Precedence Examples, How Precedence, Using Precedence, Precedence
3929 @subsection Precedence Examples
3931 In our example, we would want the following declarations:
3939 In a more complete example, which supports other operators as well, we
3940 would declare them in groups of equal precedence. For example, @code{'+'} is
3941 declared with @code{'-'}:
3944 %left '<' '>' '=' NE LE GE
3950 (Here @code{NE} and so on stand for the operators for ``not equal''
3951 and so on. We assume that these tokens are more than one character long
3952 and therefore are represented by names, not character literals.)
3954 @node How Precedence, , Precedence Examples, Precedence
3955 @subsection How Precedence Works
3957 The first effect of the precedence declarations is to assign precedence
3958 levels to the terminal symbols declared. The second effect is to assign
3959 precedence levels to certain rules: each rule gets its precedence from the
3960 last terminal symbol mentioned in the components. (You can also specify
3961 explicitly the precedence of a rule. @xref{Contextual Precedence, ,Context-Dependent Precedence}.)
3963 Finally, the resolution of conflicts works by comparing the
3964 precedence of the rule being considered with that of the
3965 look-ahead token. If the token's precedence is higher, the
3966 choice is to shift. If the rule's precedence is higher, the
3967 choice is to reduce. If they have equal precedence, the choice
3968 is made based on the associativity of that precedence level. The
3969 verbose output file made by @samp{-v} (@pxref{Invocation, ,Invoking Bison}) says
3970 how each conflict was resolved.
3972 Not all rules and not all tokens have precedence. If either the rule or
3973 the look-ahead token has no precedence, then the default is to shift.
3975 @node Contextual Precedence, Parser States, Precedence, Algorithm
3976 @section Context-Dependent Precedence
3977 @cindex context-dependent precedence
3978 @cindex unary operator precedence
3979 @cindex precedence, context-dependent
3980 @cindex precedence, unary operator
3983 Often the precedence of an operator depends on the context. This sounds
3984 outlandish at first, but it is really very common. For example, a minus
3985 sign typically has a very high precedence as a unary operator, and a
3986 somewhat lower precedence (lower than multiplication) as a binary operator.
3988 The Bison precedence declarations, @code{%left}, @code{%right} and
3989 @code{%nonassoc}, can only be used once for a given token; so a token has
3990 only one precedence declared in this way. For context-dependent
3991 precedence, you need to use an additional mechanism: the @code{%prec}
3992 modifier for rules.@refill
3994 The @code{%prec} modifier declares the precedence of a particular rule by
3995 specifying a terminal symbol whose precedence should be used for that rule.
3996 It's not necessary for that symbol to appear otherwise in the rule. The
3997 modifier's syntax is:
4000 %prec @var{terminal-symbol}
4004 and it is written after the components of the rule. Its effect is to
4005 assign the rule the precedence of @var{terminal-symbol}, overriding
4006 the precedence that would be deduced for it in the ordinary way. The
4007 altered rule precedence then affects how conflicts involving that rule
4008 are resolved (@pxref{Precedence, ,Operator Precedence}).
4010 Here is how @code{%prec} solves the problem of unary minus. First, declare
4011 a precedence for a fictitious terminal symbol named @code{UMINUS}. There
4012 are no tokens of this type, but the symbol serves to stand for its
4022 Now the precedence of @code{UMINUS} can be used in specific rules:
4029 | '-' exp %prec UMINUS
4033 @node Parser States, Reduce/Reduce, Contextual Precedence, Algorithm
4034 @section Parser States
4035 @cindex finite-state machine
4036 @cindex parser state
4037 @cindex state (of parser)
4039 The function @code{yyparse} is implemented using a finite-state machine.
4040 The values pushed on the parser stack are not simply token type codes; they
4041 represent the entire sequence of terminal and nonterminal symbols at or
4042 near the top of the stack. The current state collects all the information
4043 about previous input which is relevant to deciding what to do next.
4045 Each time a look-ahead token is read, the current parser state together
4046 with the type of look-ahead token are looked up in a table. This table
4047 entry can say, ``Shift the look-ahead token.'' In this case, it also
4048 specifies the new parser state, which is pushed onto the top of the
4049 parser stack. Or it can say, ``Reduce using rule number @var{n}.''
4050 This means that a certain number of tokens or groupings are taken off
4051 the top of the stack, and replaced by one grouping. In other words,
4052 that number of states are popped from the stack, and one new state is
4055 There is one other alternative: the table can say that the look-ahead token
4056 is erroneous in the current state. This causes error processing to begin
4057 (@pxref{Error Recovery}).
4059 @node Reduce/Reduce, Mystery Conflicts, Parser States, Algorithm
4060 @section Reduce/Reduce Conflicts
4061 @cindex reduce/reduce conflict
4062 @cindex conflicts, reduce/reduce
4064 A reduce/reduce conflict occurs if there are two or more rules that apply
4065 to the same sequence of input. This usually indicates a serious error
4068 For example, here is an erroneous attempt to define a sequence
4069 of zero or more @code{word} groupings.
4072 sequence: /* empty */
4073 @{ printf ("empty sequence\n"); @}
4076 @{ printf ("added word %s\n", $2); @}
4079 maybeword: /* empty */
4080 @{ printf ("empty maybeword\n"); @}
4082 @{ printf ("single word %s\n", $1); @}
4087 The error is an ambiguity: there is more than one way to parse a single
4088 @code{word} into a @code{sequence}. It could be reduced to a
4089 @code{maybeword} and then into a @code{sequence} via the second rule.
4090 Alternatively, nothing-at-all could be reduced into a @code{sequence}
4091 via the first rule, and this could be combined with the @code{word}
4092 using the third rule for @code{sequence}.
4094 There is also more than one way to reduce nothing-at-all into a
4095 @code{sequence}. This can be done directly via the first rule,
4096 or indirectly via @code{maybeword} and then the second rule.
4098 You might think that this is a distinction without a difference, because it
4099 does not change whether any particular input is valid or not. But it does
4100 affect which actions are run. One parsing order runs the second rule's
4101 action; the other runs the first rule's action and the third rule's action.
4102 In this example, the output of the program changes.
4104 Bison resolves a reduce/reduce conflict by choosing to use the rule that
4105 appears first in the grammar, but it is very risky to rely on this. Every
4106 reduce/reduce conflict must be studied and usually eliminated. Here is the
4107 proper way to define @code{sequence}:
4110 sequence: /* empty */
4111 @{ printf ("empty sequence\n"); @}
4113 @{ printf ("added word %s\n", $2); @}
4117 Here is another common error that yields a reduce/reduce conflict:
4120 sequence: /* empty */
4122 | sequence redirects
4129 redirects:/* empty */
4130 | redirects redirect
4135 The intention here is to define a sequence which can contain either
4136 @code{word} or @code{redirect} groupings. The individual definitions of
4137 @code{sequence}, @code{words} and @code{redirects} are error-free, but the
4138 three together make a subtle ambiguity: even an empty input can be parsed
4139 in infinitely many ways!
4141 Consider: nothing-at-all could be a @code{words}. Or it could be two
4142 @code{words} in a row, or three, or any number. It could equally well be a
4143 @code{redirects}, or two, or any number. Or it could be a @code{words}
4144 followed by three @code{redirects} and another @code{words}. And so on.
4146 Here are two ways to correct these rules. First, to make it a single level
4150 sequence: /* empty */
4156 Second, to prevent either a @code{words} or a @code{redirects}
4160 sequence: /* empty */
4162 | sequence redirects
4170 | redirects redirect
4174 @node Mystery Conflicts, Stack Overflow, Reduce/Reduce, Algorithm
4175 @section Mysterious Reduce/Reduce Conflicts
4177 Sometimes reduce/reduce conflicts can occur that don't look warranted.
4185 def: param_spec return_spec ','
4189 | name_list ':' type
4207 | name ',' name_list
4212 It would seem that this grammar can be parsed with only a single token
4213 of look-ahead: when a @code{param_spec} is being read, an @code{ID} is
4214 a @code{name} if a comma or colon follows, or a @code{type} if another
4215 @code{ID} follows. In other words, this grammar is LR(1).
4219 However, Bison, like most parser generators, cannot actually handle all
4220 LR(1) grammars. In this grammar, two contexts, that after an @code{ID}
4221 at the beginning of a @code{param_spec} and likewise at the beginning of
4222 a @code{return_spec}, are similar enough that Bison assumes they are the
4223 same. They appear similar because the same set of rules would be
4224 active---the rule for reducing to a @code{name} and that for reducing to
4225 a @code{type}. Bison is unable to determine at that stage of processing
4226 that the rules would require different look-ahead tokens in the two
4227 contexts, so it makes a single parser state for them both. Combining
4228 the two contexts causes a conflict later. In parser terminology, this
4229 occurrence means that the grammar is not LALR(1).
4231 In general, it is better to fix deficiencies than to document them. But
4232 this particular deficiency is intrinsically hard to fix; parser
4233 generators that can handle LR(1) grammars are hard to write and tend to
4234 produce parsers that are very large. In practice, Bison is more useful
4237 When the problem arises, you can often fix it by identifying the two
4238 parser states that are being confused, and adding something to make them
4239 look distinct. In the above example, adding one rule to
4240 @code{return_spec} as follows makes the problem go away:
4251 /* This rule is never used. */
4257 This corrects the problem because it introduces the possibility of an
4258 additional active rule in the context after the @code{ID} at the beginning of
4259 @code{return_spec}. This rule is not active in the corresponding context
4260 in a @code{param_spec}, so the two contexts receive distinct parser states.
4261 As long as the token @code{BOGUS} is never generated by @code{yylex},
4262 the added rule cannot alter the way actual input is parsed.
4264 In this particular example, there is another way to solve the problem:
4265 rewrite the rule for @code{return_spec} to use @code{ID} directly
4266 instead of via @code{name}. This also causes the two confusing
4267 contexts to have different sets of active rules, because the one for
4268 @code{return_spec} activates the altered rule for @code{return_spec}
4269 rather than the one for @code{name}.
4274 | name_list ':' type
4282 @node Stack Overflow, , Mystery Conflicts, Algorithm
4283 @section Stack Overflow, and How to Avoid It
4284 @cindex stack overflow
4285 @cindex parser stack overflow
4286 @cindex overflow of parser stack
4288 The Bison parser stack can overflow if too many tokens are shifted and
4289 not reduced. When this happens, the parser function @code{yyparse}
4290 returns a nonzero value, pausing only to call @code{yyerror} to report
4294 By defining the macro @code{YYMAXDEPTH}, you can control how deep the
4295 parser stack can become before a stack overflow occurs. Define the
4296 macro with a value that is an integer. This value is the maximum number
4297 of tokens that can be shifted (and not reduced) before overflow.
4298 It must be a constant expression whose value is known at compile time.
4300 The stack space allowed is not necessarily allocated. If you specify a
4301 large value for @code{YYMAXDEPTH}, the parser actually allocates a small
4302 stack at first, and then makes it bigger by stages as needed. This
4303 increasing allocation happens automatically and silently. Therefore,
4304 you do not need to make @code{YYMAXDEPTH} painfully small merely to save
4305 space for ordinary inputs that do not need much stack.
4307 @cindex default stack limit
4308 The default value of @code{YYMAXDEPTH}, if you do not define it, is
4312 You can control how much stack is allocated initially by defining the
4313 macro @code{YYINITDEPTH}. This value too must be a compile-time
4314 constant integer. The default is 200.
4316 @node Error Recovery, Context Dependency, Algorithm, Top
4317 @chapter Error Recovery
4318 @cindex error recovery
4319 @cindex recovery from errors
4321 It is not usually acceptable to have a program terminate on a parse
4322 error. For example, a compiler should recover sufficiently to parse the
4323 rest of the input file and check it for errors; a calculator should accept
4326 In a simple interactive command parser where each input is one line, it may
4327 be sufficient to allow @code{yyparse} to return 1 on error and have the
4328 caller ignore the rest of the input line when that happens (and then call
4329 @code{yyparse} again). But this is inadequate for a compiler, because it
4330 forgets all the syntactic context leading up to the error. A syntax error
4331 deep within a function in the compiler input should not cause the compiler
4332 to treat the following line like the beginning of a source file.
4335 You can define how to recover from a syntax error by writing rules to
4336 recognize the special token @code{error}. This is a terminal symbol that
4337 is always defined (you need not declare it) and reserved for error
4338 handling. The Bison parser generates an @code{error} token whenever a
4339 syntax error happens; if you have provided a rule to recognize this token
4340 in the current context, the parse can continue.
4345 stmnts: /* empty string */
4351 The fourth rule in this example says that an error followed by a newline
4352 makes a valid addition to any @code{stmnts}.
4354 What happens if a syntax error occurs in the middle of an @code{exp}? The
4355 error recovery rule, interpreted strictly, applies to the precise sequence
4356 of a @code{stmnts}, an @code{error} and a newline. If an error occurs in
4357 the middle of an @code{exp}, there will probably be some additional tokens
4358 and subexpressions on the stack after the last @code{stmnts}, and there
4359 will be tokens to read before the next newline. So the rule is not
4360 applicable in the ordinary way.
4362 But Bison can force the situation to fit the rule, by discarding part of
4363 the semantic context and part of the input. First it discards states and
4364 objects from the stack until it gets back to a state in which the
4365 @code{error} token is acceptable. (This means that the subexpressions
4366 already parsed are discarded, back to the last complete @code{stmnts}.) At
4367 this point the @code{error} token can be shifted. Then, if the old
4368 look-ahead token is not acceptable to be shifted next, the parser reads
4369 tokens and discards them until it finds a token which is acceptable. In
4370 this example, Bison reads and discards input until the next newline
4371 so that the fourth rule can apply.
4373 The choice of error rules in the grammar is a choice of strategies for
4374 error recovery. A simple and useful strategy is simply to skip the rest of
4375 the current input line or current statement if an error is detected:
4378 stmnt: error ';' /* on error, skip until ';' is read */
4381 It is also useful to recover to the matching close-delimiter of an
4382 opening-delimiter that has already been parsed. Otherwise the
4383 close-delimiter will probably appear to be unmatched, and generate another,
4384 spurious error message:
4387 primary: '(' expr ')'
4393 Error recovery strategies are necessarily guesses. When they guess wrong,
4394 one syntax error often leads to another. In the above example, the error
4395 recovery rule guesses that an error is due to bad input within one
4396 @code{stmnt}. Suppose that instead a spurious semicolon is inserted in the
4397 middle of a valid @code{stmnt}. After the error recovery rule recovers
4398 from the first error, another syntax error will be found straightaway,
4399 since the text following the spurious semicolon is also an invalid
4402 To prevent an outpouring of error messages, the parser will output no error
4403 message for another syntax error that happens shortly after the first; only
4404 after three consecutive input tokens have been successfully shifted will
4405 error messages resume.
4407 Note that rules which accept the @code{error} token may have actions, just
4408 as any other rules can.
4411 You can make error messages resume immediately by using the macro
4412 @code{yyerrok} in an action. If you do this in the error rule's action, no
4413 error messages will be suppressed. This macro requires no arguments;
4414 @samp{yyerrok;} is a valid C statement.
4417 The previous look-ahead token is reanalyzed immediately after an error. If
4418 this is unacceptable, then the macro @code{yyclearin} may be used to clear
4419 this token. Write the statement @samp{yyclearin;} in the error rule's
4422 For example, suppose that on a parse error, an error handling routine is
4423 called that advances the input stream to some point where parsing should
4424 once again commence. The next symbol returned by the lexical scanner is
4425 probably correct. The previous look-ahead token ought to be discarded
4426 with @samp{yyclearin;}.
4428 @vindex YYRECOVERING
4429 The macro @code{YYRECOVERING} stands for an expression that has the
4430 value 1 when the parser is recovering from a syntax error, and 0 the
4431 rest of the time. A value of 1 indicates that error messages are
4432 currently suppressed for new syntax errors.
4434 @node Context Dependency, Debugging, Error Recovery, Top
4435 @chapter Handling Context Dependencies
4437 The Bison paradigm is to parse tokens first, then group them into larger
4438 syntactic units. In many languages, the meaning of a token is affected by
4439 its context. Although this violates the Bison paradigm, certain techniques
4440 (known as @dfn{kludges}) may enable you to write Bison parsers for such
4444 * Semantic Tokens:: Token parsing can depend on the semantic context.
4445 * Lexical Tie-ins:: Token parsing can depend on the syntactic context.
4446 * Tie-in Recovery:: Lexical tie-ins have implications for how
4447 error recovery rules must be written.
4450 (Actually, ``kludge'' means any technique that gets its job done but is
4451 neither clean nor robust.)
4453 @node Semantic Tokens, Lexical Tie-ins, , Context Dependency
4454 @section Semantic Info in Token Types
4456 The C language has a context dependency: the way an identifier is used
4457 depends on what its current meaning is. For example, consider this:
4463 This looks like a function call statement, but if @code{foo} is a typedef
4464 name, then this is actually a declaration of @code{x}. How can a Bison
4465 parser for C decide how to parse this input?
4467 The method used in GNU C is to have two different token types,
4468 @code{IDENTIFIER} and @code{TYPENAME}. When @code{yylex} finds an
4469 identifier, it looks up the current declaration of the identifier in order
4470 to decide which token type to return: @code{TYPENAME} if the identifier is
4471 declared as a typedef, @code{IDENTIFIER} otherwise.
4473 The grammar rules can then express the context dependency by the choice of
4474 token type to recognize. @code{IDENTIFIER} is accepted as an expression,
4475 but @code{TYPENAME} is not. @code{TYPENAME} can start a declaration, but
4476 @code{IDENTIFIER} cannot. In contexts where the meaning of the identifier
4477 is @emph{not} significant, such as in declarations that can shadow a
4478 typedef name, either @code{TYPENAME} or @code{IDENTIFIER} is
4479 accepted---there is one rule for each of the two token types.
4481 This technique is simple to use if the decision of which kinds of
4482 identifiers to allow is made at a place close to where the identifier is
4483 parsed. But in C this is not always so: C allows a declaration to
4484 redeclare a typedef name provided an explicit type has been specified
4488 typedef int foo, bar, lose;
4489 static foo (bar); /* @r{redeclare @code{bar} as static variable} */
4490 static int foo (lose); /* @r{redeclare @code{foo} as function} */
4493 Unfortunately, the name being declared is separated from the declaration
4494 construct itself by a complicated syntactic structure---the ``declarator''.
4496 As a result, part of the Bison parser for C needs to be duplicated, with
4497 all the nonterminal names changed: once for parsing a declaration in
4498 which a typedef name can be redefined, and once for parsing a
4499 declaration in which that can't be done. Here is a part of the
4500 duplication, with actions omitted for brevity:
4504 declarator maybeasm '='
4506 | declarator maybeasm
4510 notype_declarator maybeasm '='
4512 | notype_declarator maybeasm
4517 Here @code{initdcl} can redeclare a typedef name, but @code{notype_initdcl}
4518 cannot. The distinction between @code{declarator} and
4519 @code{notype_declarator} is the same sort of thing.
4521 There is some similarity between this technique and a lexical tie-in
4522 (described next), in that information which alters the lexical analysis is
4523 changed during parsing by other parts of the program. The difference is
4524 here the information is global, and is used for other purposes in the
4525 program. A true lexical tie-in has a special-purpose flag controlled by
4526 the syntactic context.
4528 @node Lexical Tie-ins, Tie-in Recovery, Semantic Tokens, Context Dependency
4529 @section Lexical Tie-ins
4530 @cindex lexical tie-in
4532 One way to handle context-dependency is the @dfn{lexical tie-in}: a flag
4533 which is set by Bison actions, whose purpose is to alter the way tokens are
4536 For example, suppose we have a language vaguely like C, but with a special
4537 construct @samp{hex (@var{hex-expr})}. After the keyword @code{hex} comes
4538 an expression in parentheses in which all integers are hexadecimal. In
4539 particular, the token @samp{a1b} must be treated as an integer rather than
4540 as an identifier if it appears in that context. Here is how you can do it:
4559 @{ $$ = make_sum ($1, $3); @}
4573 Here we assume that @code{yylex} looks at the value of @code{hexflag}; when
4574 it is nonzero, all integers are parsed in hexadecimal, and tokens starting
4575 with letters are parsed as integers if possible.
4577 The declaration of @code{hexflag} shown in the C declarations section of
4578 the parser file is needed to make it accessible to the actions
4579 (@pxref{C Declarations, ,The C Declarations Section}). You must also write the code in @code{yylex}
4582 @node Tie-in Recovery, , Lexical Tie-ins, Context Dependency
4583 @section Lexical Tie-ins and Error Recovery
4585 Lexical tie-ins make strict demands on any error recovery rules you have.
4586 @xref{Error Recovery}.
4588 The reason for this is that the purpose of an error recovery rule is to
4589 abort the parsing of one construct and resume in some larger construct.
4590 For example, in C-like languages, a typical error recovery rule is to skip
4591 tokens until the next semicolon, and then start a new statement, like this:
4595 | IF '(' expr ')' stmt @{ @dots{} @}
4602 If there is a syntax error in the middle of a @samp{hex (@var{expr})}
4603 construct, this error rule will apply, and then the action for the
4604 completed @samp{hex (@var{expr})} will never run. So @code{hexflag} would
4605 remain set for the entire rest of the input, or until the next @code{hex}
4606 keyword, causing identifiers to be misinterpreted as integers.
4608 To avoid this problem the error recovery rule itself clears @code{hexflag}.
4610 There may also be an error recovery rule that works within expressions.
4611 For example, there could be a rule which applies within parentheses
4612 and skips to the close-parenthesis:
4624 If this rule acts within the @code{hex} construct, it is not going to abort
4625 that construct (since it applies to an inner level of parentheses within
4626 the construct). Therefore, it should not clear the flag: the rest of
4627 the @code{hex} construct should be parsed with the flag still in effect.
4629 What if there is an error recovery rule which might abort out of the
4630 @code{hex} construct or might not, depending on circumstances? There is no
4631 way you can write the action to determine whether a @code{hex} construct is
4632 being aborted or not. So if you are using a lexical tie-in, you had better
4633 make sure your error recovery rules are not of this kind. Each rule must
4634 be such that you can be sure that it always will, or always won't, have to
4637 @node Debugging, Invocation, Context Dependency, Top
4638 @chapter Debugging Your Parser
4642 @cindex tracing the parser
4644 If a Bison grammar compiles properly but doesn't do what you want when it
4645 runs, the @code{yydebug} parser-trace feature can help you figure out why.
4647 To enable compilation of trace facilities, you must define the macro
4648 @code{YYDEBUG} when you compile the parser. You could use
4649 @samp{-DYYDEBUG=1} as a compiler option or you could put @samp{#define
4650 YYDEBUG 1} in the C declarations section of the grammar file
4651 (@pxref{C Declarations, ,The C Declarations Section}). Alternatively, use the @samp{-t} option when
4652 you run Bison (@pxref{Invocation, ,Invoking Bison}). We always define @code{YYDEBUG} so that
4653 debugging is always possible.
4655 The trace facility uses @code{stderr}, so you must add @w{@code{#include
4656 <stdio.h>}} to the C declarations section unless it is already there.
4658 Once you have compiled the program with trace facilities, the way to
4659 request a trace is to store a nonzero value in the variable @code{yydebug}.
4660 You can do this by making the C code do it (in @code{main}, perhaps), or
4661 you can alter the value with a C debugger.
4663 Each step taken by the parser when @code{yydebug} is nonzero produces a
4664 line or two of trace information, written on @code{stderr}. The trace
4665 messages tell you these things:
4669 Each time the parser calls @code{yylex}, what kind of token was read.
4672 Each time a token is shifted, the depth and complete contents of the
4673 state stack (@pxref{Parser States}).
4676 Each time a rule is reduced, which rule it is, and the complete contents
4677 of the state stack afterward.
4680 To make sense of this information, it helps to refer to the listing file
4681 produced by the Bison @samp{-v} option (@pxref{Invocation, ,Invoking Bison}). This file
4682 shows the meaning of each state in terms of positions in various rules, and
4683 also what each state will do with each possible input token. As you read
4684 the successive trace messages, you can see that the parser is functioning
4685 according to its specification in the listing file. Eventually you will
4686 arrive at the place where something undesirable happens, and you will see
4687 which parts of the grammar are to blame.
4689 The parser file is a C program and you can use C debuggers on it, but it's
4690 not easy to interpret what it is doing. The parser function is a
4691 finite-state machine interpreter, and aside from the actions it executes
4692 the same code over and over. Only the values of variables show where in
4693 the grammar it is working.
4696 The debugging information normally gives the token type of each token
4697 read, but not its semantic value. You can optionally define a macro
4698 named @code{YYPRINT} to provide a way to print the value. If you define
4699 @code{YYPRINT}, it should take three arguments. The parser will pass a
4700 standard I/O stream, the numeric code for the token type, and the token
4701 value (from @code{yylval}).
4703 Here is an example of @code{YYPRINT} suitable for the multi-function
4704 calculator (@pxref{Mfcalc Decl, ,Declarations for @code{mfcalc}}):
4707 #define YYPRINT(file, type, value) yyprint (file, type, value)
4710 yyprint (FILE *file, int type, YYSTYPE value)
4713 fprintf (file, " %s", value.tptr->name);
4714 else if (type == NUM)
4715 fprintf (file, " %d", value.val);
4719 @node Invocation, Table of Symbols, Debugging, Top
4720 @chapter Invoking Bison
4721 @cindex invoking Bison
4722 @cindex Bison invocation
4723 @cindex options for invoking Bison
4725 The usual way to invoke Bison is as follows:
4731 Here @var{infile} is the grammar file name, which usually ends in
4732 @samp{.y}. The parser file's name is made by replacing the @samp{.y}
4733 with @samp{.tab.c}. Thus, the @samp{bison foo.y} filename yields
4734 @file{foo.tab.c}, and the @samp{bison hack/foo.y} filename yields
4735 @file{hack/foo.tab.c}. It's is also possible, in case you are writting
4736 C++ code instead of C in your grammar file, to name it @file{foo.ypp}
4737 or @file{foo.y++}. Then, the output files will take an extention like
4738 the given one as input (repectively @file{foo.tab.cpp} and @file{foo.tab.c++}).
4739 This feature takes effect with all options that manipulate filenames like
4740 @samp{-o} or @samp{-d}.
4745 bison -d @var{infile.yxx}
4748 will produce @file{infile.tab.cxx} and @file{infile.tab.hxx}. and
4751 bison -d @var{infile.y} -o @var{output.c++}
4754 will produce @file{output.c++} and @file{outfile.h++}.
4758 * Bison Options:: All the options described in detail,
4759 in alphabetical order by short options.
4760 * Environment Variables:: Variables which affect Bison execution.
4761 * Option Cross Key:: Alphabetical list of long options.
4762 * VMS Invocation:: Bison command syntax on VMS.
4765 @node Bison Options, Environment Variables, , Invocation
4766 @section Bison Options
4768 Bison supports both traditional single-letter options and mnemonic long
4769 option names. Long option names are indicated with @samp{--} instead of
4770 @samp{-}. Abbreviations for option names are allowed as long as they
4771 are unique. When a long option takes an argument, like
4772 @samp{--file-prefix}, connect the option name and the argument with
4775 Here is a list of options that can be used with Bison, alphabetized by
4776 short option. It is followed by a cross key alphabetized by long
4779 @c Please, keep this ordered as in `bison --help'.
4785 Print a summary of the command-line options to Bison and exit.
4789 Print the version number of Bison and exit.
4794 @itemx --fixed-output-files
4795 Equivalent to @samp{-o y.tab.c}; the parser output file is called
4796 @file{y.tab.c}, and the other outputs are called @file{y.output} and
4797 @file{y.tab.h}. The purpose of this option is to imitate Yacc's output
4798 file name conventions. Thus, the following shell script can substitute
4811 @itemx --skeleton=@var{file}
4812 Specify the skeleton to use. You probably don't need this option unless
4813 you are developing Bison.
4817 Output a definition of the macro @code{YYDEBUG} into the parser file, so
4818 that the debugging facilities are compiled. @xref{Debugging, ,Debugging
4822 Pretend that @code{%locactions} was specified. @xref{Decl Summary}.
4824 @item -p @var{prefix}
4825 @itemx --name-prefix=@var{prefix}
4826 Rename the external symbols used in the parser so that they start with
4827 @var{prefix} instead of @samp{yy}. The precise list of symbols renamed
4828 is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yynerrs},
4829 @code{yylval}, @code{yychar} and @code{yydebug}.
4831 For example, if you use @samp{-p c}, the names become @code{cparse},
4832 @code{clex}, and so on.
4834 @xref{Multiple Parsers, ,Multiple Parsers in the Same Program}.
4838 Don't put any @code{#line} preprocessor commands in the parser file.
4839 Ordinarily Bison puts them in the parser file so that the C compiler
4840 and debuggers will associate errors with your source file, the
4841 grammar file. This option causes them to associate errors with the
4842 parser file, treating it as an independent source file in its own right.
4846 Pretend that @code{%no_parser} was specified. @xref{Decl Summary}.
4849 @itemx --token-table
4850 Pretend that @code{%token_table} was specified. @xref{Decl Summary}.
4859 Pretend that @code{%verbose} was specified, i.e., write an extra output
4860 file containing macro definitions for the token type names defined in
4861 the grammar and the semantic value type @code{YYSTYPE}, as well as a few
4862 @code{extern} variable declarations. @xref{Decl Summary}.
4864 @item -b @var{file-prefix}
4865 @itemx --file-prefix=@var{prefix}
4866 Specify a prefix to use for all Bison output file names. The names are
4867 chosen as if the input file were named @file{@var{prefix}.c}.
4871 Pretend that @code{%verbose} was specified, i.e, write an extra output
4872 file containing verbose descriptions of the grammar and
4873 parser. @xref{Decl Summary}, for more.
4875 @item -o @var{outfile}
4876 @itemx --output-file=@var{outfile}
4877 Specify the name @var{outfile} for the parser file.
4879 The other output files' names are constructed from @var{outfile}
4880 as described under the @samp{-v} and @samp{-d} options.
4883 @node Environment Variables, Option Cross Key, Bison Options, Invocation
4884 @section Environment Variables
4885 @cindex environment variables
4887 @cindex BISON_SIMPLE
4889 Here is a list of environment variables which affect the way Bison
4895 Much of the parser generated by Bison is copied verbatim from a file
4896 called @file{bison.simple}. If Bison cannot find that file, or if you
4897 would like to direct Bison to use a different copy, setting the
4898 environment variable @code{BISON_SIMPLE} to the path of the file will
4899 cause Bison to use that copy instead.
4901 When the @samp{%semantic_parser} declaration is used, Bison copies from
4902 a file called @file{bison.hairy} instead. The location of this file can
4903 also be specified or overridden in a similar fashion, with the
4904 @code{BISON_HAIRY} environment variable.
4908 @node Option Cross Key, VMS Invocation, Environment Variables, Invocation
4909 @section Option Cross Key
4911 Here is a list of options, alphabetized by long option, to help you find
4912 the corresponding short option.
4915 \def\leaderfill{\leaders\hbox to 1em{\hss.\hss}\hfill}
4918 \line{ --debug \leaderfill -t}
4919 \line{ --defines \leaderfill -d}
4920 \line{ --file-prefix \leaderfill -b}
4921 \line{ --fixed-output-files \leaderfill -y}
4922 \line{ --help \leaderfill -h}
4923 \line{ --name-prefix \leaderfill -p}
4924 \line{ --no-lines \leaderfill -l}
4925 \line{ --no-parser \leaderfill -n}
4926 \line{ --output-file \leaderfill -o}
4927 \line{ --token-table \leaderfill -k}
4928 \line{ --verbose \leaderfill -v}
4929 \line{ --version \leaderfill -V}
4930 \line{ --yacc \leaderfill -y}
4938 --file-prefix=@var{prefix} -b @var{file-prefix}
4939 --fixed-output-files --yacc -y
4941 --name-prefix=@var{prefix} -p @var{name-prefix}
4944 --output-file=@var{outfile} -o @var{outfile}
4951 @node VMS Invocation, , Option Cross Key, Invocation
4952 @section Invoking Bison under VMS
4953 @cindex invoking Bison under VMS
4956 The command line syntax for Bison on VMS is a variant of the usual
4957 Bison command syntax---adapted to fit VMS conventions.
4959 To find the VMS equivalent for any Bison option, start with the long
4960 option, and substitute a @samp{/} for the leading @samp{--}, and
4961 substitute a @samp{_} for each @samp{-} in the name of the long option.
4962 For example, the following invocation under VMS:
4965 bison /debug/name_prefix=bar foo.y
4969 is equivalent to the following command under POSIX.
4972 bison --debug --name-prefix=bar foo.y
4975 The VMS file system does not permit filenames such as
4976 @file{foo.tab.c}. In the above example, the output file
4977 would instead be named @file{foo_tab.c}.
4979 @node Table of Symbols, Glossary, Invocation, Top
4980 @appendix Bison Symbols
4981 @cindex Bison symbols, table of
4982 @cindex symbols in Bison, table of
4986 A token name reserved for error recovery. This token may be used in
4987 grammar rules so as to allow the Bison parser to recognize an error in
4988 the grammar without halting the process. In effect, a sentence
4989 containing an error may be recognized as valid. On a parse error, the
4990 token @code{error} becomes the current look-ahead token. Actions
4991 corresponding to @code{error} are then executed, and the look-ahead
4992 token is reset to the token that originally caused the violation.
4993 @xref{Error Recovery}.
4996 Macro to pretend that an unrecoverable syntax error has occurred, by
4997 making @code{yyparse} return 1 immediately. The error reporting
4998 function @code{yyerror} is not called. @xref{Parser Function, ,The
4999 Parser Function @code{yyparse}}.
5002 Macro to pretend that a complete utterance of the language has been
5003 read, by making @code{yyparse} return 0 immediately.
5004 @xref{Parser Function, ,The Parser Function @code{yyparse}}.
5007 Macro to discard a value from the parser stack and fake a look-ahead
5008 token. @xref{Action Features, ,Special Features for Use in Actions}.
5011 Macro to pretend that a syntax error has just been detected: call
5012 @code{yyerror} and then perform normal error recovery if possible
5013 (@pxref{Error Recovery}), or (if recovery is impossible) make
5014 @code{yyparse} return 1. @xref{Error Recovery}.
5016 @item YYERROR_VERBOSE
5017 Macro that you define with @code{#define} in the Bison declarations
5018 section to request verbose, specific error message strings when
5019 @code{yyerror} is called.
5022 Macro for specifying the initial size of the parser stack.
5023 @xref{Stack Overflow}.
5026 Macro for specifying an extra argument (or list of extra arguments) for
5027 @code{yyparse} to pass to @code{yylex}. @xref{Pure Calling,, Calling
5028 Conventions for Pure Parsers}.
5031 Macro for the data type of @code{yylloc}; a structure with four
5032 members. @xref{Location Type, , Data Types of Locations}.
5035 Default value for YYLTYPE.
5038 Macro for specifying the maximum size of the parser stack.
5039 @xref{Stack Overflow}.
5042 Macro for specifying the name of a parameter that @code{yyparse} should
5043 accept. @xref{Pure Calling,, Calling Conventions for Pure Parsers}.
5046 Macro whose value indicates whether the parser is recovering from a
5047 syntax error. @xref{Action Features, ,Special Features for Use in Actions}.
5050 Macro for the data type of semantic values; @code{int} by default.
5051 @xref{Value Type, ,Data Types of Semantic Values}.
5054 External integer variable that contains the integer value of the current
5055 look-ahead token. (In a pure parser, it is a local variable within
5056 @code{yyparse}.) Error-recovery rule actions may examine this variable.
5057 @xref{Action Features, ,Special Features for Use in Actions}.
5060 Macro used in error-recovery rule actions. It clears the previous
5061 look-ahead token. @xref{Error Recovery}.
5064 External integer variable set to zero by default. If @code{yydebug}
5065 is given a nonzero value, the parser will output information on input
5066 symbols and parser action. @xref{Debugging, ,Debugging Your Parser}.
5069 Macro to cause parser to recover immediately to its normal mode
5070 after a parse error. @xref{Error Recovery}.
5073 User-supplied function to be called by @code{yyparse} on error. The
5074 function receives one argument, a pointer to a character string
5075 containing an error message. @xref{Error Reporting, ,The Error
5076 Reporting Function @code{yyerror}}.
5079 User-supplied lexical analyzer function, called with no arguments
5080 to get the next token. @xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
5083 External variable in which @code{yylex} should place the semantic
5084 value associated with a token. (In a pure parser, it is a local
5085 variable within @code{yyparse}, and its address is passed to
5086 @code{yylex}.) @xref{Token Values, ,Semantic Values of Tokens}.
5089 External variable in which @code{yylex} should place the line and column
5090 numbers associated with a token. (In a pure parser, it is a local
5091 variable within @code{yyparse}, and its address is passed to
5092 @code{yylex}.) You can ignore this variable if you don't use the
5093 @samp{@@} feature in the grammar actions. @xref{Token Positions,
5094 ,Textual Positions of Tokens}.
5097 Global variable which Bison increments each time there is a parse error.
5098 (In a pure parser, it is a local variable within @code{yyparse}.)
5099 @xref{Error Reporting, ,The Error Reporting Function @code{yyerror}}.
5102 The parser function produced by Bison; call this function to start
5103 parsing. @xref{Parser Function, ,The Parser Function @code{yyparse}}.
5106 Equip the parser for debugging. @xref{Decl Summary}.
5109 Bison declaration to create a header file meant for the scanner.
5110 @xref{Decl Summary}.
5113 Bison declaration to assign left associativity to token(s).
5114 @xref{Precedence Decl, ,Operator Precedence}.
5117 Bison declaration to avoid generating @code{#line} directives in the
5118 parser file. @xref{Decl Summary}.
5121 Bison declaration to assign non-associativity to token(s).
5122 @xref{Precedence Decl, ,Operator Precedence}.
5125 Bison declaration to assign a precedence to a specific rule.
5126 @xref{Contextual Precedence, ,Context-Dependent Precedence}.
5129 Bison declaration to request a pure (reentrant) parser.
5130 @xref{Pure Decl, ,A Pure (Reentrant) Parser}.
5133 Bison declaration to assign right associativity to token(s).
5134 @xref{Precedence Decl, ,Operator Precedence}.
5137 Bison declaration to specify the start symbol. @xref{Start Decl, ,The Start-Symbol}.
5140 Bison declaration to declare token(s) without specifying precedence.
5141 @xref{Token Decl, ,Token Type Names}.
5144 Bison declaration to include a token name table in the parser file.
5145 @xref{Decl Summary}.
5148 Bison declaration to declare nonterminals. @xref{Type Decl, ,Nonterminal Symbols}.
5151 Bison declaration to specify several possible data types for semantic
5152 values. @xref{Union Decl, ,The Collection of Value Types}.
5155 These are the punctuation and delimiters used in Bison input:
5159 Delimiter used to separate the grammar rule section from the
5160 Bison declarations section or the additional C code section.
5161 @xref{Grammar Layout, ,The Overall Layout of a Bison Grammar}.
5164 All code listed between @samp{%@{} and @samp{%@}} is copied directly to
5165 the output file uninterpreted. Such code forms the ``C declarations''
5166 section of the input file. @xref{Grammar Outline, ,Outline of a Bison
5170 Comment delimiters, as in C.
5173 Separates a rule's result from its components. @xref{Rules, ,Syntax of
5177 Terminates a rule. @xref{Rules, ,Syntax of Grammar Rules}.
5180 Separates alternate rules for the same result nonterminal.
5181 @xref{Rules, ,Syntax of Grammar Rules}.
5184 @node Glossary, Index, Table of Symbols, Top
5189 @item Backus-Naur Form (BNF)
5190 Formal method of specifying context-free grammars. BNF was first used
5191 in the @cite{ALGOL-60} report, 1963. @xref{Language and Grammar,
5192 ,Languages and Context-Free Grammars}.
5194 @item Context-free grammars
5195 Grammars specified as rules that can be applied regardless of context.
5196 Thus, if there is a rule which says that an integer can be used as an
5197 expression, integers are allowed @emph{anywhere} an expression is
5198 permitted. @xref{Language and Grammar, ,Languages and Context-Free
5201 @item Dynamic allocation
5202 Allocation of memory that occurs during execution, rather than at
5203 compile time or on entry to a function.
5206 Analogous to the empty set in set theory, the empty string is a
5207 character string of length zero.
5209 @item Finite-state stack machine
5210 A ``machine'' that has discrete states in which it is said to exist at
5211 each instant in time. As input to the machine is processed, the
5212 machine moves from state to state as specified by the logic of the
5213 machine. In the case of the parser, the input is the language being
5214 parsed, and the states correspond to various stages in the grammar
5215 rules. @xref{Algorithm, ,The Bison Parser Algorithm }.
5218 A language construct that is (in general) grammatically divisible;
5219 for example, `expression' or `declaration' in C.
5220 @xref{Language and Grammar, ,Languages and Context-Free Grammars}.
5222 @item Infix operator
5223 An arithmetic operator that is placed between the operands on which it
5224 performs some operation.
5227 A continuous flow of data between devices or programs.
5229 @item Language construct
5230 One of the typical usage schemas of the language. For example, one of
5231 the constructs of the C language is the @code{if} statement.
5232 @xref{Language and Grammar, ,Languages and Context-Free Grammars}.
5234 @item Left associativity
5235 Operators having left associativity are analyzed from left to right:
5236 @samp{a+b+c} first computes @samp{a+b} and then combines with
5237 @samp{c}. @xref{Precedence, ,Operator Precedence}.
5239 @item Left recursion
5240 A rule whose result symbol is also its first component symbol; for
5241 example, @samp{expseq1 : expseq1 ',' exp;}. @xref{Recursion, ,Recursive
5244 @item Left-to-right parsing
5245 Parsing a sentence of a language by analyzing it token by token from
5246 left to right. @xref{Algorithm, ,The Bison Parser Algorithm }.
5248 @item Lexical analyzer (scanner)
5249 A function that reads an input stream and returns tokens one by one.
5250 @xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
5252 @item Lexical tie-in
5253 A flag, set by actions in the grammar rules, which alters the way
5254 tokens are parsed. @xref{Lexical Tie-ins}.
5256 @item Literal string token
5257 A token which consists of two or more fixed characters. @xref{Symbols}.
5259 @item Look-ahead token
5260 A token already read but not yet shifted. @xref{Look-Ahead, ,Look-Ahead
5264 The class of context-free grammars that Bison (like most other parser
5265 generators) can handle; a subset of LR(1). @xref{Mystery Conflicts, ,
5266 Mysterious Reduce/Reduce Conflicts}.
5269 The class of context-free grammars in which at most one token of
5270 look-ahead is needed to disambiguate the parsing of any piece of input.
5272 @item Nonterminal symbol
5273 A grammar symbol standing for a grammatical construct that can
5274 be expressed through rules in terms of smaller constructs; in other
5275 words, a construct that is not a token. @xref{Symbols}.
5278 An error encountered during parsing of an input stream due to invalid
5279 syntax. @xref{Error Recovery}.
5282 A function that recognizes valid sentences of a language by analyzing
5283 the syntax structure of a set of tokens passed to it from a lexical
5286 @item Postfix operator
5287 An arithmetic operator that is placed after the operands upon which it
5288 performs some operation.
5291 Replacing a string of nonterminals and/or terminals with a single
5292 nonterminal, according to a grammar rule. @xref{Algorithm, ,The Bison
5296 A reentrant subprogram is a subprogram which can be in invoked any
5297 number of times in parallel, without interference between the various
5298 invocations. @xref{Pure Decl, ,A Pure (Reentrant) Parser}.
5300 @item Reverse polish notation
5301 A language in which all operators are postfix operators.
5303 @item Right recursion
5304 A rule whose result symbol is also its last component symbol; for
5305 example, @samp{expseq1: exp ',' expseq1;}. @xref{Recursion, ,Recursive
5309 In computer languages, the semantics are specified by the actions
5310 taken for each instance of the language, i.e., the meaning of
5311 each statement. @xref{Semantics, ,Defining Language Semantics}.
5314 A parser is said to shift when it makes the choice of analyzing
5315 further input from the stream rather than reducing immediately some
5316 already-recognized rule. @xref{Algorithm, ,The Bison Parser Algorithm }.
5318 @item Single-character literal
5319 A single character that is recognized and interpreted as is.
5320 @xref{Grammar in Bison, ,From Formal Rules to Bison Input}.
5323 The nonterminal symbol that stands for a complete valid utterance in
5324 the language being parsed. The start symbol is usually listed as the
5325 first nonterminal symbol in a language specification.
5326 @xref{Start Decl, ,The Start-Symbol}.
5329 A data structure where symbol names and associated data are stored
5330 during parsing to allow for recognition and use of existing
5331 information in repeated uses of a symbol. @xref{Multi-function Calc}.
5334 A basic, grammatically indivisible unit of a language. The symbol
5335 that describes a token in the grammar is a terminal symbol.
5336 The input of the Bison parser is a stream of tokens which comes from
5337 the lexical analyzer. @xref{Symbols}.
5339 @item Terminal symbol
5340 A grammar symbol that has no rules in the grammar and therefore is
5341 grammatically indivisible. The piece of text it represents is a token.
5342 @xref{Language and Grammar, ,Languages and Context-Free Grammars}.
5345 @node Index, , Glossary, Top