1 Ceci est le fichier Info bison.info, produit par Makeinfo version 4.0b
2 à partir bison.texinfo.
5 * bison: (bison). GNU Project parser generator (yacc replacement).
8 This file documents the Bison parser generator.
10 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1998, 1999,
11 2000, 2001 Free Software Foundation, Inc.
13 Permission is granted to make and distribute verbatim copies of this
14 manual provided the copyright notice and this permission notice are
15 preserved on all copies.
17 Permission is granted to copy and distribute modified versions of
18 this manual under the conditions for verbatim copying, provided also
19 that the sections entitled "GNU General Public License" and "Conditions
20 for Using Bison" are included exactly as in the original, and provided
21 that the entire resulting derived work is distributed under the terms
22 of a permission notice identical to this one.
24 Permission is granted to copy and distribute translations of this
25 manual into another language, under the above conditions for modified
26 versions, except that the sections entitled "GNU General Public
27 License", "Conditions for Using Bison" and this permission notice may be
28 included in translations approved by the Free Software Foundation
29 instead of in the original English.
32 File: bison.info, Node: Rpcalc Decls, Next: Rpcalc Rules, Up: RPN Calc
34 Declarations for `rpcalc'
35 -------------------------
37 Here are the C and Bison declarations for the reverse polish notation
38 calculator. As in C, comments are placed between `/*...*/'.
40 /* Reverse polish notation calculator. */
43 #define YYSTYPE double
49 %% /* Grammar rules and actions follow */
51 The C declarations section (*note The C Declarations Section: C
52 Declarations.) contains two preprocessor directives.
54 The `#define' directive defines the macro `YYSTYPE', thus specifying
55 the C data type for semantic values of both tokens and groupings (*note
56 Data Types of Semantic Values: Value Type.). The Bison parser will use
57 whatever type `YYSTYPE' is defined as; if you don't define it, `int' is
58 the default. Because we specify `double', each token and each
59 expression has an associated value, which is a floating point number.
61 The `#include' directive is used to declare the exponentiation
64 The second section, Bison declarations, provides information to
65 Bison about the token types (*note The Bison Declarations Section:
66 Bison Declarations.). Each terminal symbol that is not a
67 single-character literal must be declared here. (Single-character
68 literals normally don't need to be declared.) In this example, all the
69 arithmetic operators are designated by single-character literals, so the
70 only terminal symbol that needs to be declared is `NUM', the token type
71 for numeric constants.
74 File: bison.info, Node: Rpcalc Rules, Next: Rpcalc Lexer, Prev: Rpcalc Decls, Up: RPN Calc
76 Grammar Rules for `rpcalc'
77 --------------------------
79 Here are the grammar rules for the reverse polish notation
87 | exp '\n' { printf ("\t%.10g\n", $1); }
91 | exp exp '+' { $$ = $1 + $2; }
92 | exp exp '-' { $$ = $1 - $2; }
93 | exp exp '*' { $$ = $1 * $2; }
94 | exp exp '/' { $$ = $1 / $2; }
96 | exp exp '^' { $$ = pow ($1, $2); }
98 | exp 'n' { $$ = -$1; }
102 The groupings of the rpcalc "language" defined here are the
103 expression (given the name `exp'), the line of input (`line'), and the
104 complete input transcript (`input'). Each of these nonterminal symbols
105 has several alternate rules, joined by the `|' punctuator which is read
106 as "or". The following sections explain what these rules mean.
108 The semantics of the language is determined by the actions taken
109 when a grouping is recognized. The actions are the C code that appears
110 inside braces. *Note Actions::.
112 You must specify these actions in C, but Bison provides the means for
113 passing semantic values between the rules. In each action, the
114 pseudo-variable `$$' stands for the semantic value for the grouping
115 that the rule is going to construct. Assigning a value to `$$' is the
116 main job of most actions. The semantic values of the components of the
117 rule are referred to as `$1', `$2', and so on.
126 File: bison.info, Node: Rpcalc Input, Next: Rpcalc Line, Up: Rpcalc Rules
128 Explanation of `input'
129 ......................
131 Consider the definition of `input':
137 This definition reads as follows: "A complete input is either an
138 empty string, or a complete input followed by an input line". Notice
139 that "complete input" is defined in terms of itself. This definition
140 is said to be "left recursive" since `input' appears always as the
141 leftmost symbol in the sequence. *Note Recursive Rules: Recursion.
143 The first alternative is empty because there are no symbols between
144 the colon and the first `|'; this means that `input' can match an empty
145 string of input (no tokens). We write the rules this way because it is
146 legitimate to type `Ctrl-d' right after you start the calculator. It's
147 conventional to put an empty alternative first and write the comment
150 The second alternate rule (`input line') handles all nontrivial
151 input. It means, "After reading any number of lines, read one more
152 line if possible." The left recursion makes this rule into a loop.
153 Since the first alternative matches empty input, the loop can be
154 executed zero or more times.
156 The parser function `yyparse' continues to process input until a
157 grammatical error is seen or the lexical analyzer says there are no more
158 input tokens; we will arrange for the latter to happen at end of file.
161 File: bison.info, Node: Rpcalc Line, Next: Rpcalc Expr, Prev: Rpcalc Input, Up: Rpcalc Rules
163 Explanation of `line'
164 .....................
166 Now consider the definition of `line':
169 | exp '\n' { printf ("\t%.10g\n", $1); }
172 The first alternative is a token which is a newline character; this
173 means that rpcalc accepts a blank line (and ignores it, since there is
174 no action). The second alternative is an expression followed by a
175 newline. This is the alternative that makes rpcalc useful. The
176 semantic value of the `exp' grouping is the value of `$1' because the
177 `exp' in question is the first symbol in the alternative. The action
178 prints this value, which is the result of the computation the user
181 This action is unusual because it does not assign a value to `$$'.
182 As a consequence, the semantic value associated with the `line' is
183 uninitialized (its value will be unpredictable). This would be a bug if
184 that value were ever used, but we don't use it: once rpcalc has printed
185 the value of the user's input line, that value is no longer needed.
188 File: bison.info, Node: Rpcalc Expr, Prev: Rpcalc Line, Up: Rpcalc Rules
190 Explanation of `expr'
191 .....................
193 The `exp' grouping has several rules, one for each kind of
194 expression. The first rule handles the simplest expressions: those
195 that are just numbers. The second handles an addition-expression,
196 which looks like two expressions followed by a plus-sign. The third
197 handles subtraction, and so on.
200 | exp exp '+' { $$ = $1 + $2; }
201 | exp exp '-' { $$ = $1 - $2; }
205 We have used `|' to join all the rules for `exp', but we could
206 equally well have written them separately:
209 exp: exp exp '+' { $$ = $1 + $2; } ;
210 exp: exp exp '-' { $$ = $1 - $2; } ;
213 Most of the rules have actions that compute the value of the
214 expression in terms of the value of its parts. For example, in the
215 rule for addition, `$1' refers to the first component `exp' and `$2'
216 refers to the second one. The third component, `'+'', has no meaningful
217 associated semantic value, but if it had one you could refer to it as
218 `$3'. When `yyparse' recognizes a sum expression using this rule, the
219 sum of the two subexpressions' values is produced as the value of the
220 entire expression. *Note Actions::.
222 You don't have to give an action for every rule. When a rule has no
223 action, Bison by default copies the value of `$1' into `$$'. This is
224 what happens in the first rule (the one that uses `NUM').
226 The formatting shown here is the recommended convention, but Bison
227 does not require it. You can add or change whitespace as much as you
228 wish. For example, this:
230 exp : NUM | exp exp '+' {$$ = $1 + $2; } | ...
232 means the same thing as this:
235 | exp exp '+' { $$ = $1 + $2; }
238 The latter, however, is much more readable.
241 File: bison.info, Node: Rpcalc Lexer, Next: Rpcalc Main, Prev: Rpcalc Rules, Up: RPN Calc
243 The `rpcalc' Lexical Analyzer
244 -----------------------------
246 The lexical analyzer's job is low-level parsing: converting
247 characters or sequences of characters into tokens. The Bison parser
248 gets its tokens by calling the lexical analyzer. *Note The Lexical
249 Analyzer Function `yylex': Lexical.
251 Only a simple lexical analyzer is needed for the RPN calculator.
252 This lexical analyzer skips blanks and tabs, then reads in numbers as
253 `double' and returns them as `NUM' tokens. Any other character that
254 isn't part of a number is a separate token. Note that the token-code
255 for such a single-character token is the character itself.
257 The return value of the lexical analyzer function is a numeric code
258 which represents a token type. The same text used in Bison rules to
259 stand for this token type is also a C expression for the numeric code
260 for the type. This works in two ways. If the token type is a
261 character literal, then its numeric code is the ASCII code for that
262 character; you can use the same character literal in the lexical
263 analyzer to express the number. If the token type is an identifier,
264 that identifier is defined by Bison as a C macro whose definition is
265 the appropriate number. In this example, therefore, `NUM' becomes a
266 macro for `yylex' to use.
268 The semantic value of the token (if it has one) is stored into the
269 global variable `yylval', which is where the Bison parser will look for
270 it. (The C data type of `yylval' is `YYSTYPE', which was defined at
271 the beginning of the grammar; *note Declarations for `rpcalc': Rpcalc
274 A token type code of zero is returned if the end-of-file is
275 encountered. (Bison recognizes any nonpositive value as indicating the
278 Here is the code for the lexical analyzer:
280 /* Lexical analyzer returns a double floating point
281 number on the stack and the token NUM, or the ASCII
282 character read if not a number. Skips all blanks
283 and tabs, returns 0 for EOF. */
292 /* skip white space */
293 while ((c = getchar ()) == ' ' || c == '\t')
295 /* process numbers */
296 if (c == '.' || isdigit (c))
299 scanf ("%lf", &yylval);
302 /* return end-of-file */
305 /* return single chars */
310 File: bison.info, Node: Rpcalc Main, Next: Rpcalc Error, Prev: Rpcalc Lexer, Up: RPN Calc
312 The Controlling Function
313 ------------------------
315 In keeping with the spirit of this example, the controlling function
316 is kept to the bare minimum. The only requirement is that it call
317 `yyparse' to start the process of parsing.
326 File: bison.info, Node: Rpcalc Error, Next: Rpcalc Gen, Prev: Rpcalc Main, Up: RPN Calc
328 The Error Reporting Routine
329 ---------------------------
331 When `yyparse' detects a syntax error, it calls the error reporting
332 function `yyerror' to print an error message (usually but not always
333 `"parse error"'). It is up to the programmer to supply `yyerror'
334 (*note Parser C-Language Interface: Interface.), so here is the
335 definition we will use:
340 yyerror (const char *s) /* Called by yyparse on error */
345 After `yyerror' returns, the Bison parser may recover from the error
346 and continue parsing if the grammar contains a suitable error rule
347 (*note Error Recovery::). Otherwise, `yyparse' returns nonzero. We
348 have not written any error rules in this example, so any invalid input
349 will cause the calculator program to exit. This is not clean behavior
350 for a real calculator, but it is adequate for the first example.
353 File: bison.info, Node: Rpcalc Gen, Next: Rpcalc Compile, Prev: Rpcalc Error, Up: RPN Calc
355 Running Bison to Make the Parser
356 --------------------------------
358 Before running Bison to produce a parser, we need to decide how to
359 arrange all the source code in one or more source files. For such a
360 simple example, the easiest thing is to put everything in one file. The
361 definitions of `yylex', `yyerror' and `main' go at the end, in the
362 "additional C code" section of the file (*note The Overall Layout of a
363 Bison Grammar: Grammar Layout.).
365 For a large project, you would probably have several source files,
366 and use `make' to arrange to recompile them.
368 With all the source in a single file, you use the following command
369 to convert it into a parser file:
373 In this example the file was called `rpcalc.y' (for "Reverse Polish
374 CALCulator"). Bison produces a file named `FILE_NAME.tab.c', removing
375 the `.y' from the original file name. The file output by Bison contains
376 the source code for `yyparse'. The additional functions in the input
377 file (`yylex', `yyerror' and `main') are copied verbatim to the output.
380 File: bison.info, Node: Rpcalc Compile, Prev: Rpcalc Gen, Up: RPN Calc
382 Compiling the Parser File
383 -------------------------
385 Here is how to compile and run the parser file:
387 # List files in current directory.
389 rpcalc.tab.c rpcalc.y
391 # Compile the Bison parser.
392 # `-lm' tells compiler to search math library for `pow'.
393 $ cc rpcalc.tab.c -lm -o rpcalc
397 rpcalc rpcalc.tab.c rpcalc.y
399 The file `rpcalc' now contains the executable code. Here is an
400 example session using `rpcalc'.
407 3 7 + 3 4 5 * + - n Note the unary minus, `n'
413 ^D End-of-file indicator
417 File: bison.info, Node: Infix Calc, Next: Simple Error Recovery, Prev: RPN Calc, Up: Examples
419 Infix Notation Calculator: `calc'
420 =================================
422 We now modify rpcalc to handle infix operators instead of postfix.
423 Infix notation involves the concept of operator precedence and the need
424 for parentheses nested to arbitrary depth. Here is the Bison code for
425 `calc.y', an infix desk-top calculator.
427 /* Infix notation calculator--calc */
430 #define YYSTYPE double
434 /* BISON Declarations */
438 %left NEG /* negation--unary minus */
439 %right '^' /* exponentiation */
441 /* Grammar follows */
443 input: /* empty string */
448 | exp '\n' { printf ("\t%.10g\n", $1); }
451 exp: NUM { $$ = $1; }
452 | exp '+' exp { $$ = $1 + $3; }
453 | exp '-' exp { $$ = $1 - $3; }
454 | exp '*' exp { $$ = $1 * $3; }
455 | exp '/' exp { $$ = $1 / $3; }
456 | '-' exp %prec NEG { $$ = -$2; }
457 | exp '^' exp { $$ = pow ($1, $3); }
458 | '(' exp ')' { $$ = $2; }
462 The functions `yylex', `yyerror' and `main' can be the same as before.
464 There are two important new features shown in this code.
466 In the second section (Bison declarations), `%left' declares token
467 types and says they are left-associative operators. The declarations
468 `%left' and `%right' (right associativity) take the place of `%token'
469 which is used to declare a token type name without associativity.
470 (These tokens are single-character literals, which ordinarily don't
471 need to be declared. We declare them here to specify the
474 Operator precedence is determined by the line ordering of the
475 declarations; the higher the line number of the declaration (lower on
476 the page or screen), the higher the precedence. Hence, exponentiation
477 has the highest precedence, unary minus (`NEG') is next, followed by
478 `*' and `/', and so on. *Note Operator Precedence: Precedence.
480 The other important new feature is the `%prec' in the grammar section
481 for the unary minus operator. The `%prec' simply instructs Bison that
482 the rule `| '-' exp' has the same precedence as `NEG'--in this case the
483 next-to-highest. *Note Context-Dependent Precedence: Contextual
486 Here is a sample run of `calc.y':
489 4 + 4.5 - (34/(8*3+-3))
497 File: bison.info, Node: Simple Error Recovery, Next: Location Tracking Calc, Prev: Infix Calc, Up: Examples
499 Simple Error Recovery
500 =====================
502 Up to this point, this manual has not addressed the issue of "error
503 recovery"--how to continue parsing after the parser detects a syntax
504 error. All we have handled is error reporting with `yyerror'. Recall
505 that by default `yyparse' returns after calling `yyerror'. This means
506 that an erroneous input line causes the calculator program to exit.
507 Now we show how to rectify this deficiency.
509 The Bison language itself includes the reserved word `error', which
510 may be included in the grammar rules. In the example below it has been
511 added to one of the alternatives for `line':
514 | exp '\n' { printf ("\t%.10g\n", $1); }
515 | error '\n' { yyerrok; }
518 This addition to the grammar allows for simple error recovery in the
519 event of a parse error. If an expression that cannot be evaluated is
520 read, the error will be recognized by the third rule for `line', and
521 parsing will continue. (The `yyerror' function is still called upon to
522 print its message as well.) The action executes the statement
523 `yyerrok', a macro defined automatically by Bison; its meaning is that
524 error recovery is complete (*note Error Recovery::). Note the
525 difference between `yyerrok' and `yyerror'; neither one is a misprint.
527 This form of error recovery deals with syntax errors. There are
528 other kinds of errors; for example, division by zero, which raises an
529 exception signal that is normally fatal. A real calculator program
530 must handle this signal and use `longjmp' to return to `main' and
531 resume parsing input lines; it would also have to discard the rest of
532 the current line of input. We won't discuss this issue further because
533 it is not specific to Bison programs.
536 File: bison.info, Node: Location Tracking Calc, Next: Multi-function Calc, Prev: Simple Error Recovery, Up: Examples
538 Location Tracking Calculator: `ltcalc'
539 ======================================
541 This example extends the infix notation calculator with location
542 tracking. This feature will be used to improve the error messages. For
543 the sake of clarity, this example is a simple integer calculator, since
544 most of the work needed to use locations will be done in the lexical
549 * Decls: Ltcalc Decls. Bison and C declarations for ltcalc.
550 * Rules: Ltcalc Rules. Grammar rules for ltcalc, with explanations.
551 * Lexer: Ltcalc Lexer. The lexical analyzer.
554 File: bison.info, Node: Ltcalc Decls, Next: Ltcalc Rules, Up: Location Tracking Calc
556 Declarations for `ltcalc'
557 -------------------------
559 The C and Bison declarations for the location tracking calculator are
560 the same as the declarations for the infix notation calculator.
562 /* Location tracking calculator. */
569 /* Bison declarations. */
577 %% /* Grammar follows */
579 Note there are no declarations specific to locations. Defining a data
580 type for storing locations is not needed: we will use the type provided
581 by default (*note Data Types of Locations: Location Type.), which is a
582 four member structure with the following integer fields: `first_line',
583 `first_column', `last_line' and `last_column'.
586 File: bison.info, Node: Ltcalc Rules, Next: Ltcalc Lexer, Prev: Ltcalc Decls, Up: Location Tracking Calc
588 Grammar Rules for `ltcalc'
589 --------------------------
591 Whether handling locations or not has no effect on the syntax of your
592 language. Therefore, grammar rules for this example will be very close
593 to those of the previous example: we will only modify them to benefit
594 from the new information.
596 Here, we will use locations to report divisions by zero, and locate
597 the wrong expressions or subexpressions.
604 | exp '\n' { printf ("%d\n", $1); }
607 exp : NUM { $$ = $1; }
608 | exp '+' exp { $$ = $1 + $3; }
609 | exp '-' exp { $$ = $1 - $3; }
610 | exp '*' exp { $$ = $1 * $3; }
618 fprintf (stderr, "%d.%d-%d.%d: division by zero",
619 @3.first_line, @3.first_column,
620 @3.last_line, @3.last_column);
623 | '-' exp %preg NEG { $$ = -$2; }
624 | exp '^' exp { $$ = pow ($1, $3); }
625 | '(' exp ')' { $$ = $2; }
627 This code shows how to reach locations inside of semantic actions, by
628 using the pseudo-variables `@N' for rule components, and the
629 pseudo-variable `@$' for groupings.
631 We don't need to assign a value to `@$': the output parser does it
632 automatically. By default, before executing the C code of each action,
633 `@$' is set to range from the beginning of `@1' to the end of `@N', for
634 a rule with N components. This behavior can be redefined (*note
635 Default Action for Locations: Location Default Action.), and for very
636 specific rules, `@$' can be computed by hand.
639 File: bison.info, Node: Ltcalc Lexer, Prev: Ltcalc Rules, Up: Location Tracking Calc
641 The `ltcalc' Lexical Analyzer.
642 ------------------------------
644 Until now, we relied on Bison's defaults to enable location
645 tracking. The next step is to rewrite the lexical analyser, and make it
646 able to feed the parser with the token locations, as it already does for
649 To this end, we must take into account every single character of the
650 input text, to avoid the computed locations of being fuzzy or wrong:
657 /* skip white space */
658 while ((c = getchar ()) == ' ' || c == '\t')
659 ++yylloc.last_column;
662 yylloc.first_line = yylloc.last_line;
663 yylloc.first_column = yylloc.last_column;
665 /* process numbers */
669 ++yylloc.last_column;
670 while (isdigit (c = getchar ()))
672 ++yylloc.last_column;
673 yylval = yylval * 10 + c - '0';
679 /* return end-of-file */
683 /* return single chars and update location */
687 yylloc.last_column = 0;
690 ++yylloc.last_column;
694 Basically, the lexical analyzer performs the same processing as
695 before: it skips blanks and tabs, and reads numbers or single-character
696 tokens. In addition, it updates `yylloc', the global variable (of type
697 `YYLTYPE') containing the token's location.
699 Now, each time this function returns a token, the parser has its
700 number as well as its semantic value, and its location in the text. The
701 last needed change is to initialize `yylloc', for example in the
702 controlling function:
707 yylloc.first_line = yylloc.last_line = 1;
708 yylloc.first_column = yylloc.last_column = 0;
712 Remember that computing locations is not a matter of syntax. Every
713 character must be associated to a location update, whether it is in
714 valid input, in comments, in literal strings, and so on.
717 File: bison.info, Node: Multi-function Calc, Next: Exercises, Prev: Location Tracking Calc, Up: Examples
719 Multi-Function Calculator: `mfcalc'
720 ===================================
722 Now that the basics of Bison have been discussed, it is time to move
723 on to a more advanced problem. The above calculators provided only five
724 functions, `+', `-', `*', `/' and `^'. It would be nice to have a
725 calculator that provides other mathematical functions such as `sin',
728 It is easy to add new operators to the infix calculator as long as
729 they are only single-character literals. The lexical analyzer `yylex'
730 passes back all nonnumber characters as tokens, so new grammar rules
731 suffice for adding a new operator. But we want something more
732 flexible: built-in functions whose syntax has this form:
734 FUNCTION_NAME (ARGUMENT)
736 At the same time, we will add memory to the calculator, by allowing you
737 to create named variables, store values in them, and use them later.
738 Here is a sample session with the multi-function calculator:
755 Note that multiple assignment and nested function calls are
760 * Decl: Mfcalc Decl. Bison declarations for multi-function calculator.
761 * Rules: Mfcalc Rules. Grammar rules for the calculator.
762 * Symtab: Mfcalc Symtab. Symbol table management subroutines.
765 File: bison.info, Node: Mfcalc Decl, Next: Mfcalc Rules, Up: Multi-function Calc
767 Declarations for `mfcalc'
768 -------------------------
770 Here are the C and Bison declarations for the multi-function
774 #include <math.h> /* For math functions, cos(), sin(), etc. */
775 #include "calc.h" /* Contains definition of `symrec' */
778 double val; /* For returning numbers. */
779 symrec *tptr; /* For returning symbol-table pointers */
782 %token <val> NUM /* Simple double precision number */
783 %token <tptr> VAR FNCT /* Variable and Function */
789 %left NEG /* Negation--unary minus */
790 %right '^' /* Exponentiation */
792 /* Grammar follows */
796 The above grammar introduces only two new features of the Bison
797 language. These features allow semantic values to have various data
798 types (*note More Than One Value Type: Multiple Types.).
800 The `%union' declaration specifies the entire list of possible types;
801 this is instead of defining `YYSTYPE'. The allowable types are now
802 double-floats (for `exp' and `NUM') and pointers to entries in the
803 symbol table. *Note The Collection of Value Types: Union Decl.
805 Since values can now have various types, it is necessary to
806 associate a type with each grammar symbol whose semantic value is used.
807 These symbols are `NUM', `VAR', `FNCT', and `exp'. Their declarations
808 are augmented with information about their data type (placed between
811 The Bison construct `%type' is used for declaring nonterminal
812 symbols, just as `%token' is used for declaring token types. We have
813 not used `%type' before because nonterminal symbols are normally
814 declared implicitly by the rules that define them. But `exp' must be
815 declared explicitly so we can specify its value type. *Note
816 Nonterminal Symbols: Type Decl.
819 File: bison.info, Node: Mfcalc Rules, Next: Mfcalc Symtab, Prev: Mfcalc Decl, Up: Multi-function Calc
821 Grammar Rules for `mfcalc'
822 --------------------------
824 Here are the grammar rules for the multi-function calculator. Most
825 of them are copied directly from `calc'; three rules, those which
826 mention `VAR' or `FNCT', are new.
834 | exp '\n' { printf ("\t%.10g\n", $1); }
835 | error '\n' { yyerrok; }
838 exp: NUM { $$ = $1; }
839 | VAR { $$ = $1->value.var; }
840 | VAR '=' exp { $$ = $3; $1->value.var = $3; }
841 | FNCT '(' exp ')' { $$ = (*($1->value.fnctptr))($3); }
842 | exp '+' exp { $$ = $1 + $3; }
843 | exp '-' exp { $$ = $1 - $3; }
844 | exp '*' exp { $$ = $1 * $3; }
845 | exp '/' exp { $$ = $1 / $3; }
846 | '-' exp %prec NEG { $$ = -$2; }
847 | exp '^' exp { $$ = pow ($1, $3); }
848 | '(' exp ')' { $$ = $2; }
854 File: bison.info, Node: Mfcalc Symtab, Prev: Mfcalc Rules, Up: Multi-function Calc
856 The `mfcalc' Symbol Table
857 -------------------------
859 The multi-function calculator requires a symbol table to keep track
860 of the names and meanings of variables and functions. This doesn't
861 affect the grammar rules (except for the actions) or the Bison
862 declarations, but it requires some additional C functions for support.
864 The symbol table itself consists of a linked list of records. Its
865 definition, which is kept in the header `calc.h', is as follows. It
866 provides for either functions or variables to be placed in the table.
868 /* Fonctions type. */
869 typedef double (*func_t) (double);
871 /* Data type for links in the chain of symbols. */
874 char *name; /* name of symbol */
875 int type; /* type of symbol: either VAR or FNCT */
878 double var; /* value of a VAR */
879 func_t fnctptr; /* value of a FNCT */
881 struct symrec *next; /* link field */
884 typedef struct symrec symrec;
886 /* The symbol table: a chain of `struct symrec'. */
887 extern symrec *sym_table;
889 symrec *putsym (const char *, func_t);
890 symrec *getsym (const char *);
892 The new version of `main' includes a call to `init_table', a
893 function that initializes the symbol table. Here it is, and
894 `init_table' as well:
906 yyerror (const char *s) /* Called by yyparse on error */
914 double (*fnct)(double);
917 struct init arith_fncts[] =
928 /* The symbol table: a chain of `struct symrec'. */
929 symrec *sym_table = (symrec *) 0;
931 /* Put arithmetic functions in table. */
937 for (i = 0; arith_fncts[i].fname != 0; i++)
939 ptr = putsym (arith_fncts[i].fname, FNCT);
940 ptr->value.fnctptr = arith_fncts[i].fnct;
944 By simply editing the initialization list and adding the necessary
945 include files, you can add additional functions to the calculator.
947 Two important functions allow look-up and installation of symbols in
948 the symbol table. The function `putsym' is passed a name and the type
949 (`VAR' or `FNCT') of the object to be installed. The object is linked
950 to the front of the list, and a pointer to the object is returned. The
951 function `getsym' is passed the name of the symbol to look up. If
952 found, a pointer to that symbol is returned; otherwise zero is returned.
955 putsym (char *sym_name, int sym_type)
958 ptr = (symrec *) malloc (sizeof (symrec));
959 ptr->name = (char *) malloc (strlen (sym_name) + 1);
960 strcpy (ptr->name,sym_name);
961 ptr->type = sym_type;
962 ptr->value.var = 0; /* set value to 0 even if fctn. */
963 ptr->next = (struct symrec *)sym_table;
969 getsym (const char *sym_name)
972 for (ptr = sym_table; ptr != (symrec *) 0;
973 ptr = (symrec *)ptr->next)
974 if (strcmp (ptr->name,sym_name) == 0)
979 The function `yylex' must now recognize variables, numeric values,
980 and the single-character arithmetic operators. Strings of alphanumeric
981 characters with a leading non-digit are recognized as either variables
982 or functions depending on what the symbol table says about them.
984 The string is passed to `getsym' for look up in the symbol table. If
985 the name appears in the table, a pointer to its location and its type
986 (`VAR' or `FNCT') is returned to `yyparse'. If it is not already in
987 the table, then it is installed as a `VAR' using `putsym'. Again, a
988 pointer and its type (which must be `VAR') is returned to `yyparse'.
990 No change is needed in the handling of numeric values and arithmetic
991 operators in `yylex'.
1000 /* Ignore whitespace, get first nonwhite character. */
1001 while ((c = getchar ()) == ' ' || c == '\t');
1006 /* Char starts a number => parse the number. */
1007 if (c == '.' || isdigit (c))
1010 scanf ("%lf", &yylval.val);
1014 /* Char starts an identifier => read the name. */
1018 static char *symbuf = 0;
1019 static int length = 0;
1022 /* Initially make the buffer long enough
1023 for a 40-character symbol name. */
1025 length = 40, symbuf = (char *)malloc (length + 1);
1030 /* If buffer is full, make it bigger. */
1034 symbuf = (char *)realloc (symbuf, length + 1);
1036 /* Add this character to the buffer. */
1038 /* Get another character. */
1041 while (c != EOF && isalnum (c));
1046 s = getsym (symbuf);
1048 s = putsym (symbuf, VAR);
1053 /* Any other character is a token by itself. */
1057 This program is both powerful and flexible. You may easily add new
1058 functions, and it is a simple job to modify this code to install
1059 predefined variables such as `pi' or `e' as well.
1062 File: bison.info, Node: Exercises, Prev: Multi-function Calc, Up: Examples
1067 1. Add some new functions from `math.h' to the initialization list.
1069 2. Add another array that contains constants and their values. Then
1070 modify `init_table' to add these constants to the symbol table.
1071 It will be easiest to give the constants type `VAR'.
1073 3. Make the program report an error if the user refers to an
1074 uninitialized variable in any way except to store a value in it.
1077 File: bison.info, Node: Grammar File, Next: Interface, Prev: Examples, Up: Top
1082 Bison takes as input a context-free grammar specification and
1083 produces a C-language function that recognizes correct instances of the
1086 The Bison grammar input file conventionally has a name ending in
1087 `.y'. *Note Invoking Bison: Invocation.
1091 * Grammar Outline:: Overall layout of the grammar file.
1092 * Symbols:: Terminal and nonterminal symbols.
1093 * Rules:: How to write grammar rules.
1094 * Recursion:: Writing recursive rules.
1095 * Semantics:: Semantic values and actions.
1096 * Locations:: Locations and actions.
1097 * Declarations:: All kinds of Bison declarations are described here.
1098 * Multiple Parsers:: Putting more than one Bison parser in one program.
1101 File: bison.info, Node: Grammar Outline, Next: Symbols, Up: Grammar File
1103 Outline of a Bison Grammar
1104 ==========================
1106 A Bison grammar file has four main sections, shown here with the
1107 appropriate delimiters:
1121 Comments enclosed in `/* ... */' may appear in any of the sections.
1125 * C Declarations:: Syntax and usage of the C declarations section.
1126 * Bison Declarations:: Syntax and usage of the Bison declarations section.
1127 * Grammar Rules:: Syntax and usage of the grammar rules section.
1128 * C Code:: Syntax and usage of the additional C code section.
1131 File: bison.info, Node: C Declarations, Next: Bison Declarations, Up: Grammar Outline
1133 The C Declarations Section
1134 --------------------------
1136 The C DECLARATIONS section contains macro definitions and
1137 declarations of functions and variables that are used in the actions in
1138 the grammar rules. These are copied to the beginning of the parser
1139 file so that they precede the definition of `yyparse'. You can use
1140 `#include' to get the declarations from a header file. If you don't
1141 need any C declarations, you may omit the `%{' and `%}' delimiters that
1142 bracket this section.
1145 File: bison.info, Node: Bison Declarations, Next: Grammar Rules, Prev: C Declarations, Up: Grammar Outline
1147 The Bison Declarations Section
1148 ------------------------------
1150 The BISON DECLARATIONS section contains declarations that define
1151 terminal and nonterminal symbols, specify precedence, and so on. In
1152 some simple grammars you may not need any declarations. *Note Bison
1153 Declarations: Declarations.
1156 File: bison.info, Node: Grammar Rules, Next: C Code, Prev: Bison Declarations, Up: Grammar Outline
1158 The Grammar Rules Section
1159 -------------------------
1161 The "grammar rules" section contains one or more Bison grammar
1162 rules, and nothing else. *Note Syntax of Grammar Rules: Rules.
1164 There must always be at least one grammar rule, and the first `%%'
1165 (which precedes the grammar rules) may never be omitted even if it is
1166 the first thing in the file.
1169 File: bison.info, Node: C Code, Prev: Grammar Rules, Up: Grammar Outline
1171 The Additional C Code Section
1172 -----------------------------
1174 The ADDITIONAL C CODE section is copied verbatim to the end of the
1175 parser file, just as the C DECLARATIONS section is copied to the
1176 beginning. This is the most convenient place to put anything that you
1177 want to have in the parser file but which need not come before the
1178 definition of `yyparse'. For example, the definitions of `yylex' and
1179 `yyerror' often go here. *Note Parser C-Language Interface: Interface.
1181 If the last section is empty, you may omit the `%%' that separates it
1182 from the grammar rules.
1184 The Bison parser itself contains many static variables whose names
1185 start with `yy' and many macros whose names start with `YY'. It is a
1186 good idea to avoid using any such names (except those documented in this
1187 manual) in the additional C code section of the grammar file.
1190 File: bison.info, Node: Symbols, Next: Rules, Prev: Grammar Outline, Up: Grammar File
1192 Symbols, Terminal and Nonterminal
1193 =================================
1195 "Symbols" in Bison grammars represent the grammatical classifications
1198 A "terminal symbol" (also known as a "token type") represents a
1199 class of syntactically equivalent tokens. You use the symbol in grammar
1200 rules to mean that a token in that class is allowed. The symbol is
1201 represented in the Bison parser by a numeric code, and the `yylex'
1202 function returns a token type code to indicate what kind of token has
1203 been read. You don't need to know what the code value is; you can use
1204 the symbol to stand for it.
1206 A "nonterminal symbol" stands for a class of syntactically equivalent
1207 groupings. The symbol name is used in writing grammar rules. By
1208 convention, it should be all lower case.
1210 Symbol names can contain letters, digits (not at the beginning),
1211 underscores and periods. Periods make sense only in nonterminals.
1213 There are three ways of writing terminal symbols in the grammar:
1215 * A "named token type" is written with an identifier, like an
1216 identifier in C. By convention, it should be all upper case. Each
1217 such name must be defined with a Bison declaration such as
1218 `%token'. *Note Token Type Names: Token Decl.
1220 * A "character token type" (or "literal character token") is written
1221 in the grammar using the same syntax used in C for character
1222 constants; for example, `'+'' is a character token type. A
1223 character token type doesn't need to be declared unless you need to
1224 specify its semantic value data type (*note Data Types of Semantic
1225 Values: Value Type.), associativity, or precedence (*note Operator
1226 Precedence: Precedence.).
1228 By convention, a character token type is used only to represent a
1229 token that consists of that particular character. Thus, the token
1230 type `'+'' is used to represent the character `+' as a token.
1231 Nothing enforces this convention, but if you depart from it, your
1232 program will confuse other readers.
1234 All the usual escape sequences used in character literals in C can
1235 be used in Bison as well, but you must not use the null character
1236 as a character literal because its ASCII code, zero, is the code
1237 `yylex' returns for end-of-input (*note Calling Convention for
1238 `yylex': Calling Convention.).
1240 * A "literal string token" is written like a C string constant; for
1241 example, `"<="' is a literal string token. A literal string token
1242 doesn't need to be declared unless you need to specify its semantic
1243 value data type (*note Value Type::), associativity, or precedence
1244 (*note Precedence::).
1246 You can associate the literal string token with a symbolic name as
1247 an alias, using the `%token' declaration (*note Token
1248 Declarations: Token Decl.). If you don't do that, the lexical
1249 analyzer has to retrieve the token number for the literal string
1250 token from the `yytname' table (*note Calling Convention::).
1252 *WARNING*: literal string tokens do not work in Yacc.
1254 By convention, a literal string token is used only to represent a
1255 token that consists of that particular string. Thus, you should
1256 use the token type `"<="' to represent the string `<=' as a token.
1257 Bison does not enforce this convention, but if you depart from
1258 it, people who read your program will be confused.
1260 All the escape sequences used in string literals in C can be used
1261 in Bison as well. A literal string token must contain two or more
1262 characters; for a token containing just one character, use a
1263 character token (see above).
1265 How you choose to write a terminal symbol has no effect on its
1266 grammatical meaning. That depends only on where it appears in rules and
1267 on when the parser function returns that symbol.
1269 The value returned by `yylex' is always one of the terminal symbols
1270 (or 0 for end-of-input). Whichever way you write the token type in the
1271 grammar rules, you write it the same way in the definition of `yylex'.
1272 The numeric code for a character token type is simply the ASCII code for
1273 the character, so `yylex' can use the identical character constant to
1274 generate the requisite code. Each named token type becomes a C macro in
1275 the parser file, so `yylex' can use the name to stand for the code.
1276 (This is why periods don't make sense in terminal symbols.) *Note
1277 Calling Convention for `yylex': Calling Convention.
1279 If `yylex' is defined in a separate file, you need to arrange for the
1280 token-type macro definitions to be available there. Use the `-d'
1281 option when you run Bison, so that it will write these macro definitions
1282 into a separate header file `NAME.tab.h' which you can include in the
1283 other source files that need it. *Note Invoking Bison: Invocation.
1285 The symbol `error' is a terminal symbol reserved for error recovery
1286 (*note Error Recovery::); you shouldn't use it for any other purpose.
1287 In particular, `yylex' should never return this value.
1290 File: bison.info, Node: Rules, Next: Recursion, Prev: Symbols, Up: Grammar File
1292 Syntax of Grammar Rules
1293 =======================
1295 A Bison grammar rule has the following general form:
1297 RESULT: COMPONENTS...
1300 where RESULT is the nonterminal symbol that this rule describes, and
1301 COMPONENTS are various terminal and nonterminal symbols that are put
1302 together by this rule (*note Symbols::).
1309 says that two groupings of type `exp', with a `+' token in between, can
1310 be combined into a larger grouping of type `exp'.
1312 Whitespace in rules is significant only to separate symbols. You
1313 can add extra whitespace as you wish.
1315 Scattered among the components can be ACTIONS that determine the
1316 semantics of the rule. An action looks like this:
1320 Usually there is only one action and it follows the components. *Note
1323 Multiple rules for the same RESULT can be written separately or can
1324 be joined with the vertical-bar character `|' as follows:
1326 RESULT: RULE1-COMPONENTS...
1327 | RULE2-COMPONENTS...
1331 They are still considered distinct rules even when joined in this way.
1333 If COMPONENTS in a rule is empty, it means that RESULT can match the
1334 empty string. For example, here is how to define a comma-separated
1335 sequence of zero or more `exp' groupings:
1345 It is customary to write a comment `/* empty */' in each rule with no
1349 File: bison.info, Node: Recursion, Next: Semantics, Prev: Rules, Up: Grammar File
1354 A rule is called "recursive" when its RESULT nonterminal appears
1355 also on its right hand side. Nearly all Bison grammars need to use
1356 recursion, because that is the only way to define a sequence of any
1357 number of a particular thing. Consider this recursive definition of a
1358 comma-separated sequence of one or more expressions:
1364 Since the recursive use of `expseq1' is the leftmost symbol in the
1365 right hand side, we call this "left recursion". By contrast, here the
1366 same construct is defined using "right recursion":
1372 Any kind of sequence can be defined using either left recursion or
1373 right recursion, but you should always use left recursion, because it
1374 can parse a sequence of any number of elements with bounded stack
1375 space. Right recursion uses up space on the Bison stack in proportion
1376 to the number of elements in the sequence, because all the elements
1377 must be shifted onto the stack before the rule can be applied even
1378 once. *Note The Bison Parser Algorithm: Algorithm, for further
1379 explanation of this.
1381 "Indirect" or "mutual" recursion occurs when the result of the rule
1382 does not appear directly on its right hand side, but does appear in
1383 rules for other nonterminals which do appear on its right hand side.
1388 | primary '+' primary
1395 defines two mutually-recursive nonterminals, since each refers to the
1399 File: bison.info, Node: Semantics, Next: Locations, Prev: Recursion, Up: Grammar File
1401 Defining Language Semantics
1402 ===========================
1404 The grammar rules for a language determine only the syntax. The
1405 semantics are determined by the semantic values associated with various
1406 tokens and groupings, and by the actions taken when various groupings
1409 For example, the calculator calculates properly because the value
1410 associated with each expression is the proper number; it adds properly
1411 because the action for the grouping `X + Y' is to add the numbers
1412 associated with X and Y.
1416 * Value Type:: Specifying one data type for all semantic values.
1417 * Multiple Types:: Specifying several alternative data types.
1418 * Actions:: An action is the semantic definition of a grammar rule.
1419 * Action Types:: Specifying data types for actions to operate on.
1420 * Mid-Rule Actions:: Most actions go at the end of a rule.
1421 This says when, why and how to use the exceptional
1422 action in the middle of a rule.