Annotation of GNUtools/bison/bison.texinfo, revision 1.1

1.1     ! root        1: \input texinfo @c -*-texinfo-*-
        !             2: @comment %**start of header
        !             3: @setfilename bison.info
        !             4: @settitle Bison 1.20
        !             5: @setchapternewpage odd
        !             6: 
        !             7: @c SMALL BOOK version   
        !             8: @c This edition has been formatted so that you can format and print it in
        !             9: @c the smallbook format. 
        !            10: @c @smallbook
        !            11: 
        !            12: @c next time, consider using @set for edition number, etc...
        !            13: 
        !            14: @c Set following if you have the new `shorttitlepage' command
        !            15: @c @clear shorttitlepage-enabled
        !            16: @c @set shorttitlepage-enabled
        !            17: 
        !            18: @c ISPELL CHECK: done, 14 Jan 1993 --bob
        !            19: 
        !            20: @c Check COPYRIGHT dates.  should be updated in the titlepage, ifinfo
        !            21: @c titlepage; should NOT be changed in the GPL.  --mew
        !            22: 
        !            23: @iftex
        !            24: @syncodeindex fn cp
        !            25: @syncodeindex vr cp
        !            26: @syncodeindex tp cp
        !            27: @end iftex
        !            28: @ifinfo
        !            29: @synindex fn cp
        !            30: @synindex vr cp
        !            31: @synindex tp cp
        !            32: @end ifinfo
        !            33: @comment %**end of header
        !            34: 
        !            35: @ifinfo
        !            36: This file documents the Bison parser generator.
        !            37: 
        !            38: Copyright (C) 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
        !            39: 
        !            40: Permission is granted to make and distribute verbatim copies of
        !            41: this manual provided the copyright notice and this permission notice
        !            42: are preserved on all copies.
        !            43: 
        !            44: @ignore
        !            45: Permission is granted to process this file through Tex and print the
        !            46: results, provided the printed document carries copying permission
        !            47: notice identical to this one except for the removal of this paragraph
        !            48: (this paragraph not being relevant to the printed manual).
        !            49: 
        !            50: @end ignore
        !            51: Permission is granted to copy and distribute modified versions of this
        !            52: manual under the conditions for verbatim copying, provided also that the
        !            53: sections entitled ``GNU General Public License'' and ``Conditions for
        !            54: Using Bison'' are included exactly as in the original, and provided that
        !            55: the entire resulting derived work is distributed under the terms of a
        !            56: permission notice identical to this one.
        !            57: 
        !            58: Permission is granted to copy and distribute translations of this manual
        !            59: into another language, under the above conditions for modified versions,
        !            60: except that the sections entitled ``GNU General Public License'',
        !            61: ``Conditions for Using Bison'' and this permission notice may be
        !            62: included in translations approved by the Free Software Foundation
        !            63: instead of in the original English.
        !            64: @end ifinfo
        !            65: 
        !            66: @ifset shorttitlepage-enabled
        !            67: @shorttitlepage Bison
        !            68: @end ifset
        !            69: @titlepage
        !            70: @title Bison
        !            71: @subtitle The YACC-compatible Parser Generator
        !            72: @subtitle December 1992, Bison Version 1.20
        !            73: 
        !            74: @author by Charles Donnelly and Richard Stallman
        !            75: 
        !            76: @page
        !            77: @vskip 0pt plus 1filll
        !            78: Copyright @copyright{} 1988, 1989, 1990, 1991, 1992 Free Software
        !            79: Foundation 
        !            80: 
        !            81: @sp 2
        !            82: Published by the Free Software Foundation @*
        !            83: 675 Massachusetts Avenue @*
        !            84: Cambridge, MA 02139 USA @*
        !            85: Printed copies are available for $15 each.@*
        !            86: ISBN-1-882114-30-2
        !            87: 
        !            88: Permission is granted to make and distribute verbatim copies of
        !            89: this manual provided the copyright notice and this permission notice
        !            90: are preserved on all copies.
        !            91: 
        !            92: @ignore
        !            93: Permission is granted to process this file through TeX and print the
        !            94: results, provided the printed document carries copying permission
        !            95: notice identical to this one except for the removal of this paragraph
        !            96: (this paragraph not being relevant to the printed manual).
        !            97: 
        !            98: @end ignore
        !            99: Permission is granted to copy and distribute modified versions of this
        !           100: manual under the conditions for verbatim copying, provided also that the
        !           101: sections entitled ``GNU General Public License'' and ``Conditions for
        !           102: Using Bison'' are included exactly as in the original, and provided that
        !           103: the entire resulting derived work is distributed under the terms of a
        !           104: permission notice identical to this one.
        !           105: 
        !           106: Permission is granted to copy and distribute translations of this manual
        !           107: into another language, under the above conditions for modified versions,
        !           108: except that the sections entitled ``GNU General Public License'',
        !           109: ``Conditions for Using Bison'' and this permission notice may be
        !           110: included in translations approved by the Free Software Foundation
        !           111: instead of in the original English.
        !           112: @sp 2
        !           113: Cover art by Etienne Suvasa.
        !           114: @end titlepage
        !           115: @page
        !           116: 
        !           117: @node Top, Introduction, (dir), (dir)
        !           118: 
        !           119: @ifinfo
        !           120: This manual documents version 1.20 of Bison.
        !           121: @end ifinfo
        !           122: 
        !           123: @menu
        !           124: * Introduction::      
        !           125: * Conditions::        
        !           126: * Copying::           The GNU General Public License says
        !           127:                         how you can copy and share Bison
        !           128: 
        !           129: Tutorial sections:
        !           130: * Concepts::          Basic concepts for understanding Bison.
        !           131: * Examples::          Three simple explained examples of using Bison.
        !           132: 
        !           133: Reference sections:
        !           134: * Grammar File::      Writing Bison declarations and rules.
        !           135: * Interface::         C-language interface to the parser function @code{yyparse}.
        !           136: * Algorithm::         How the Bison parser works at run-time.
        !           137: * Error Recovery::    Writing rules for error recovery.
        !           138: * Context Dependency::  What to do if your language syntax is too
        !           139:                         messy for Bison to handle straightforwardly.
        !           140: * Debugging::         Debugging Bison parsers that parse wrong.
        !           141: * Invocation::        How to run Bison (to produce the parser source file).
        !           142: * Table of Symbols::  All the keywords of the Bison language are explained.
        !           143: * Glossary::          Basic concepts are explained.
        !           144: * Index::             Cross-references to the text.
        !           145: 
        !           146:  --- The Detailed Node Listing ---
        !           147: 
        !           148: The Concepts of Bison
        !           149: 
        !           150: * Language and Grammar::  Languages and context-free grammars,
        !           151:                             as mathematical ideas.
        !           152: * Grammar in Bison::  How we represent grammars for Bison's sake.
        !           153: * Semantic Values::   Each token or syntactic grouping can have
        !           154:                         a semantic value (the value of an integer,
        !           155:                         the name of an identifier, etc.).
        !           156: * Semantic Actions::  Each rule can have an action containing C code.
        !           157: * Bison Parser::      What are Bison's input and output,
        !           158:                         how is the output used?
        !           159: * Stages::            Stages in writing and running Bison grammars.
        !           160: * Grammar Layout::    Overall structure of a Bison grammar file.
        !           161: 
        !           162: Examples
        !           163: 
        !           164: * RPN Calc::          Reverse polish notation calculator;
        !           165:                         a first example with no operator precedence.
        !           166: * Infix Calc::        Infix (algebraic) notation calculator.
        !           167:                         Operator precedence is introduced.
        !           168: * Simple Error Recovery::  Continuing after syntax errors.
        !           169: * Multi-function Calc::    Calculator with memory and trig functions.
        !           170:                         It uses multiple data-types for semantic values.
        !           171: * Exercises::         Ideas for improving the multi-function calculator.
        !           172: 
        !           173: Reverse Polish Notation Calculator
        !           174: 
        !           175: * Decls: Rpcalc Decls.  Bison and C declarations for rpcalc.
        !           176: * Rules: Rpcalc Rules.  Grammar Rules for rpcalc, with explanation.
        !           177: * Lexer: Rpcalc Lexer.  The lexical analyzer.
        !           178: * Main: Rpcalc Main.    The controlling function.
        !           179: * Error: Rpcalc Error.  The error reporting function.
        !           180: * Gen: Rpcalc Gen.      Running Bison on the grammar file.
        !           181: * Comp: Rpcalc Compile. Run the C compiler on the output code.
        !           182: 
        !           183: Grammar Rules for @code{rpcalc}
        !           184: 
        !           185: * Rpcalc Input::      
        !           186: * Rpcalc Line::       
        !           187: * Rpcalc Expr::       
        !           188: 
        !           189: Multi-Function Calculator: @code{mfcalc}
        !           190: 
        !           191: * Decl: Mfcalc Decl.      Bison declarations for multi-function calculator.
        !           192: * Rules: Mfcalc Rules.    Grammar rules for the calculator.
        !           193: * Symtab: Mfcalc Symtab.  Symbol table management subroutines.
        !           194: 
        !           195: Bison Grammar Files
        !           196: 
        !           197: * Grammar Outline::   Overall layout of the grammar file.
        !           198: * Symbols::           Terminal and nonterminal symbols.
        !           199: * Rules::             How to write grammar rules.
        !           200: * Recursion::         Writing recursive rules.
        !           201: * Semantics::         Semantic values and actions.
        !           202: * Declarations::      All kinds of Bison declarations are described here.
        !           203: * Multiple Parsers::  Putting more than one Bison parser in one program.
        !           204: 
        !           205: Outline of a Bison Grammar
        !           206: 
        !           207: * C Declarations::    Syntax and usage of the C declarations section.
        !           208: * Bison Declarations::  Syntax and usage of the Bison declarations section.
        !           209: * Grammar Rules::     Syntax and usage of the grammar rules section.
        !           210: * C Code::            Syntax and usage of the additional C code section.
        !           211: 
        !           212: Defining Language Semantics
        !           213: 
        !           214: * Value Type::        Specifying one data type for all semantic values.
        !           215: * Multiple Types::    Specifying several alternative data types.
        !           216: * Actions::           An action is the semantic definition of a grammar rule.
        !           217: * Action Types::      Specifying data types for actions to operate on.
        !           218: * Mid-Rule Actions::  Most actions go at the end of a rule.
        !           219:                       This says when, why and how to use the exceptional
        !           220:                         action in the middle of a rule.
        !           221: 
        !           222: Bison Declarations
        !           223: 
        !           224: * Token Decl::        Declaring terminal symbols.
        !           225: * Precedence Decl::   Declaring terminals with precedence and associativity.
        !           226: * Union Decl::        Declaring the set of all semantic value types.
        !           227: * Type Decl::         Declaring the choice of type for a nonterminal symbol.
        !           228: * Expect Decl::       Suppressing warnings about shift/reduce conflicts.
        !           229: * Start Decl::        Specifying the start symbol.
        !           230: * Pure Decl::         Requesting a reentrant parser.
        !           231: * Decl Summary::      Table of all Bison declarations.
        !           232: 
        !           233: Parser C-Language Interface
        !           234: 
        !           235: * Parser Function::   How to call @code{yyparse} and what it returns.
        !           236: * Lexical::           You must supply a function @code{yylex} 
        !           237:                         which reads tokens.
        !           238: * Error Reporting::   You must supply a function @code{yyerror}.
        !           239: * Action Features::   Special features for use in actions.
        !           240: 
        !           241: The Lexical Analyzer Function @code{yylex}
        !           242: 
        !           243: * Calling Convention::  How @code{yyparse} calls @code{yylex}.
        !           244: * Token Values::      How @code{yylex} must return the semantic value
        !           245:                         of the token it has read.
        !           246: * Token Positions::   How @code{yylex} must return the text position
        !           247:                         (line number, etc.) of the token, if the
        !           248:                          actions want that.
        !           249: * Pure Calling::      How the calling convention differs
        !           250:                         in a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
        !           251: 
        !           252: The Bison Parser Algorithm 
        !           253: 
        !           254: * Look-Ahead::        Parser looks one token ahead when deciding what to do.
        !           255: * Shift/Reduce::      Conflicts: when either shifting or reduction is valid.
        !           256: * Precedence::        Operator precedence works by resolving conflicts.
        !           257: * Contextual Precedence::  When an operator's precedence depends on context.
        !           258: * Parser States::     The parser is a finite-state-machine with stack.
        !           259: * Reduce/Reduce::     When two rules are applicable in the same situation.
        !           260: * Mystery Conflicts::  Reduce/reduce conflicts that look unjustified.
        !           261: * Stack Overflow::    What happens when stack gets full.  How to avoid it.
        !           262: 
        !           263: Operator Precedence
        !           264: 
        !           265: * Why Precedence::    An example showing why precedence is needed.
        !           266: * Using Precedence::  How to specify precedence in Bison grammars.
        !           267: * Precedence Examples::  How these features are used in the previous example.
        !           268: * How Precedence::    How they work.
        !           269: 
        !           270: Handling Context Dependencies
        !           271: 
        !           272: * Semantic Tokens::   Token parsing can depend on the semantic context.
        !           273: * Lexical Tie-ins::   Token parsing can depend on the syntactic context.
        !           274: * Tie-in Recovery::   Lexical tie-ins have implications for how
        !           275:                         error recovery rules must be written.
        !           276: 
        !           277: Invoking Bison
        !           278: 
        !           279: * Bison Options::     All the options described in detail, 
        !           280:                        in alphabetical order by short options.
        !           281: * Option Cross Key::  Alphabetical list of long options.
        !           282: * VMS Invocation::    Bison command syntax on VMS.
        !           283: @end menu
        !           284: 
        !           285: @node Introduction, Conditions, Top, Top
        !           286: @unnumbered Introduction
        !           287: @cindex introduction
        !           288: 
        !           289: @dfn{Bison} is a general-purpose parser generator that converts a
        !           290: grammar description for an LALR(1) context-free grammar into a C
        !           291: program to parse that grammar.  Once you are proficient with Bison,
        !           292: you may use it to develop a wide range of language parsers, from those
        !           293: used in simple desk calculators to complex programming languages.
        !           294: 
        !           295: Bison is upward compatible with Yacc: all properly-written Yacc grammars
        !           296: ought to work with Bison with no change.  Anyone familiar with Yacc
        !           297: should be able to use Bison with little trouble.  You need to be fluent in
        !           298: C programming in order to use Bison or to understand this manual.
        !           299: 
        !           300: We begin with tutorial chapters that explain the basic concepts of using
        !           301: Bison and show three explained examples, each building on the last.  If you
        !           302: don't know Bison or Yacc, start by reading these chapters.  Reference
        !           303: chapters follow which describe specific aspects of Bison in detail.
        !           304: 
        !           305: Bison was written primarily by Robert Corbett; Richard Stallman made
        !           306: it Yacc-compatible.  This edition corresponds to version 1.20 of Bison.
        !           307: 
        !           308: @node Conditions, Copying, Introduction, Top
        !           309: @unnumbered Conditions for Using Bison
        !           310: 
        !           311: Bison grammars can be used only in programs that are free software.  This
        !           312: is in contrast to what happens with the GNU C compiler and the other
        !           313: GNU programming tools.
        !           314: 
        !           315: The reason Bison is special is that the output of the Bison utility---the
        !           316: Bison parser file---contains a verbatim copy of a sizable piece of Bison,
        !           317: which is the code for the @code{yyparse} function.  (The actions from your
        !           318: grammar are inserted into this function at one point, but the rest of the
        !           319: function is not changed.)
        !           320: 
        !           321: As a result, the Bison parser file is covered by the same copying
        !           322: conditions that cover Bison itself and the rest of the GNU system: any
        !           323: program containing it has to be distributed under the standard GNU copying
        !           324: conditions.
        !           325: 
        !           326: Occasionally people who would like to use Bison to develop proprietary
        !           327: programs complain about this.
        !           328: 
        !           329: We don't particularly sympathize with their complaints.  The purpose of the
        !           330: GNU project is to promote the right to share software and the practice of
        !           331: sharing software; it is a means of changing society.  The people who
        !           332: complain are planning to be uncooperative toward the rest of the world; why
        !           333: should they deserve our help in doing so?
        !           334: 
        !           335: However, it's possible that a change in these conditions might encourage
        !           336: computer companies to use and distribute the GNU system.  If so, then we
        !           337: might decide to change the terms on @code{yyparse} as a matter of the
        !           338: strategy of promoting the right to share.  Such a change would be
        !           339: irrevocable.  Since we stand by the copying permissions we have announced,
        !           340: we cannot withdraw them once given.
        !           341: 
        !           342: We mustn't make an irrevocable change hastily.  We have to wait until there
        !           343: is a complete GNU system and there has been time to learn how this issue
        !           344: affects its reception.
        !           345: 
        !           346: @node Copying, Concepts, Conditions, Top
        !           347: @unnumbered GNU GENERAL PUBLIC LICENSE
        !           348: @center Version 2, June 1991
        !           349: 
        !           350: @display
        !           351: Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
        !           352: 675 Mass Ave, Cambridge, MA 02139, USA
        !           353: 
        !           354: Everyone is permitted to copy and distribute verbatim copies
        !           355: of this license document, but changing it is not allowed.
        !           356: @end display
        !           357: 
        !           358: @unnumberedsec Preamble
        !           359: 
        !           360:   The licenses for most software are designed to take away your
        !           361: freedom to share and change it.  By contrast, the GNU General Public
        !           362: License is intended to guarantee your freedom to share and change free
        !           363: software---to make sure the software is free for all its users.  This
        !           364: General Public License applies to most of the Free Software
        !           365: Foundation's software and to any other program whose authors commit to
        !           366: using it.  (Some other Free Software Foundation software is covered by
        !           367: the GNU Library General Public License instead.)  You can apply it to
        !           368: your programs, too.
        !           369: 
        !           370:   When we speak of free software, we are referring to freedom, not
        !           371: price.  Our General Public Licenses are designed to make sure that you
        !           372: have the freedom to distribute copies of free software (and charge for
        !           373: this service if you wish), that you receive source code or can get it
        !           374: if you want it, that you can change the software or use pieces of it
        !           375: in new free programs; and that you know you can do these things.
        !           376: 
        !           377:   To protect your rights, we need to make restrictions that forbid
        !           378: anyone to deny you these rights or to ask you to surrender the rights.
        !           379: These restrictions translate to certain responsibilities for you if you
        !           380: distribute copies of the software, or if you modify it.
        !           381: 
        !           382:   For example, if you distribute copies of such a program, whether
        !           383: gratis or for a fee, you must give the recipients all the rights that
        !           384: you have.  You must make sure that they, too, receive or can get the
        !           385: source code.  And you must show them these terms so they know their
        !           386: rights.
        !           387: 
        !           388:   We protect your rights with two steps: (1) copyright the software, and
        !           389: (2) offer you this license which gives you legal permission to copy,
        !           390: distribute and/or modify the software.
        !           391: 
        !           392:   Also, for each author's protection and ours, we want to make certain
        !           393: that everyone understands that there is no warranty for this free
        !           394: software.  If the software is modified by someone else and passed on, we
        !           395: want its recipients to know that what they have is not the original, so
        !           396: that any problems introduced by others will not reflect on the original
        !           397: authors' reputations.
        !           398: 
        !           399:   Finally, any free program is threatened constantly by software
        !           400: patents.  We wish to avoid the danger that redistributors of a free
        !           401: program will individually obtain patent licenses, in effect making the
        !           402: program proprietary.  To prevent this, we have made it clear that any
        !           403: patent must be licensed for everyone's free use or not licensed at all.
        !           404: 
        !           405:   The precise terms and conditions for copying, distribution and
        !           406: modification follow.
        !           407: 
        !           408: @iftex
        !           409: @unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
        !           410: @end iftex
        !           411: @ifinfo
        !           412: @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
        !           413: @end ifinfo
        !           414: 
        !           415: @enumerate 0
        !           416: @item
        !           417: This License applies to any program or other work which contains
        !           418: a notice placed by the copyright holder saying it may be distributed
        !           419: under the terms of this General Public License.  The ``Program'', below,
        !           420: refers to any such program or work, and a ``work based on the Program''
        !           421: means either the Program or any derivative work under copyright law:
        !           422: that is to say, a work containing the Program or a portion of it,
        !           423: either verbatim or with modifications and/or translated into another
        !           424: language.  (Hereinafter, translation is included without limitation in
        !           425: the term ``modification''.)  Each licensee is addressed as ``you''.
        !           426: 
        !           427: Activities other than copying, distribution and modification are not
        !           428: covered by this License; they are outside its scope.  The act of
        !           429: running the Program is not restricted, and the output from the Program
        !           430: is covered only if its contents constitute a work based on the
        !           431: Program (independent of having been made by running the Program).
        !           432: Whether that is true depends on what the Program does.
        !           433: 
        !           434: @item
        !           435: You may copy and distribute verbatim copies of the Program's
        !           436: source code as you receive it, in any medium, provided that you
        !           437: conspicuously and appropriately publish on each copy an appropriate
        !           438: copyright notice and disclaimer of warranty; keep intact all the
        !           439: notices that refer to this License and to the absence of any warranty;
        !           440: and give any other recipients of the Program a copy of this License
        !           441: along with the Program.
        !           442: 
        !           443: You may charge a fee for the physical act of transferring a copy, and
        !           444: you may at your option offer warranty protection in exchange for a fee.
        !           445: 
        !           446: @item
        !           447: You may modify your copy or copies of the Program or any portion
        !           448: of it, thus forming a work based on the Program, and copy and
        !           449: distribute such modifications or work under the terms of Section 1
        !           450: above, provided that you also meet all of these conditions:
        !           451: 
        !           452: @enumerate a
        !           453: @item
        !           454: You must cause the modified files to carry prominent notices
        !           455: stating that you changed the files and the date of any change.
        !           456: 
        !           457: @item
        !           458: You must cause any work that you distribute or publish, that in
        !           459: whole or in part contains or is derived from the Program or any
        !           460: part thereof, to be licensed as a whole at no charge to all third
        !           461: parties under the terms of this License.
        !           462: 
        !           463: @item
        !           464: If the modified program normally reads commands interactively
        !           465: when run, you must cause it, when started running for such
        !           466: interactive use in the most ordinary way, to print or display an
        !           467: announcement including an appropriate copyright notice and a
        !           468: notice that there is no warranty (or else, saying that you provide
        !           469: a warranty) and that users may redistribute the program under
        !           470: these conditions, and telling the user how to view a copy of this
        !           471: License.  (Exception: if the Program itself is interactive but
        !           472: does not normally print such an announcement, your work based on
        !           473: the Program is not required to print an announcement.)
        !           474: @end enumerate
        !           475: 
        !           476: These requirements apply to the modified work as a whole.  If
        !           477: identifiable sections of that work are not derived from the Program,
        !           478: and can be reasonably considered independent and separate works in
        !           479: themselves, then this License, and its terms, do not apply to those
        !           480: sections when you distribute them as separate works.  But when you
        !           481: distribute the same sections as part of a whole which is a work based
        !           482: on the Program, the distribution of the whole must be on the terms of
        !           483: this License, whose permissions for other licensees extend to the
        !           484: entire whole, and thus to each and every part regardless of who wrote it.
        !           485: 
        !           486: Thus, it is not the intent of this section to claim rights or contest
        !           487: your rights to work written entirely by you; rather, the intent is to
        !           488: exercise the right to control the distribution of derivative or
        !           489: collective works based on the Program.
        !           490: 
        !           491: In addition, mere aggregation of another work not based on the Program
        !           492: with the Program (or with a work based on the Program) on a volume of
        !           493: a storage or distribution medium does not bring the other work under
        !           494: the scope of this License.
        !           495: 
        !           496: @item
        !           497: You may copy and distribute the Program (or a work based on it,
        !           498: under Section 2) in object code or executable form under the terms of
        !           499: Sections 1 and 2 above provided that you also do one of the following:
        !           500: 
        !           501: @enumerate a
        !           502: @item
        !           503: Accompany it with the complete corresponding machine-readable
        !           504: source code, which must be distributed under the terms of Sections
        !           505: 1 and 2 above on a medium customarily used for software interchange; or,
        !           506: 
        !           507: @item
        !           508: Accompany it with a written offer, valid for at least three
        !           509: years, to give any third party, for a charge no more than your
        !           510: cost of physically performing source distribution, a complete
        !           511: machine-readable copy of the corresponding source code, to be
        !           512: distributed under the terms of Sections 1 and 2 above on a medium
        !           513: customarily used for software interchange; or,
        !           514: 
        !           515: @item
        !           516: Accompany it with the information you received as to the offer
        !           517: to distribute corresponding source code.  (This alternative is
        !           518: allowed only for noncommercial distribution and only if you
        !           519: received the program in object code or executable form with such
        !           520: an offer, in accord with Subsection b above.)
        !           521: @end enumerate
        !           522: 
        !           523: The source code for a work means the preferred form of the work for
        !           524: making modifications to it.  For an executable work, complete source
        !           525: code means all the source code for all modules it contains, plus any
        !           526: associated interface definition files, plus the scripts used to
        !           527: control compilation and installation of the executable.  However, as a
        !           528: special exception, the source code distributed need not include
        !           529: anything that is normally distributed (in either source or binary
        !           530: form) with the major components (compiler, kernel, and so on) of the
        !           531: operating system on which the executable runs, unless that component
        !           532: itself accompanies the executable.
        !           533: 
        !           534: If distribution of executable or object code is made by offering
        !           535: access to copy from a designated place, then offering equivalent
        !           536: access to copy the source code from the same place counts as
        !           537: distribution of the source code, even though third parties are not
        !           538: compelled to copy the source along with the object code.
        !           539: 
        !           540: @item
        !           541: You may not copy, modify, sublicense, or distribute the Program
        !           542: except as expressly provided under this License.  Any attempt
        !           543: otherwise to copy, modify, sublicense or distribute the Program is
        !           544: void, and will automatically terminate your rights under this License.
        !           545: However, parties who have received copies, or rights, from you under
        !           546: this License will not have their licenses terminated so long as such
        !           547: parties remain in full compliance.
        !           548: 
        !           549: @item
        !           550: You are not required to accept this License, since you have not
        !           551: signed it.  However, nothing else grants you permission to modify or
        !           552: distribute the Program or its derivative works.  These actions are
        !           553: prohibited by law if you do not accept this License.  Therefore, by
        !           554: modifying or distributing the Program (or any work based on the
        !           555: Program), you indicate your acceptance of this License to do so, and
        !           556: all its terms and conditions for copying, distributing or modifying
        !           557: the Program or works based on it.
        !           558: 
        !           559: @item
        !           560: Each time you redistribute the Program (or any work based on the
        !           561: Program), the recipient automatically receives a license from the
        !           562: original licensor to copy, distribute or modify the Program subject to
        !           563: these terms and conditions.  You may not impose any further
        !           564: restrictions on the recipients' exercise of the rights granted herein.
        !           565: You are not responsible for enforcing compliance by third parties to
        !           566: this License.
        !           567: 
        !           568: @item
        !           569: If, as a consequence of a court judgment or allegation of patent
        !           570: infringement or for any other reason (not limited to patent issues),
        !           571: conditions are imposed on you (whether by court order, agreement or
        !           572: otherwise) that contradict the conditions of this License, they do not
        !           573: excuse you from the conditions of this License.  If you cannot
        !           574: distribute so as to satisfy simultaneously your obligations under this
        !           575: License and any other pertinent obligations, then as a consequence you
        !           576: may not distribute the Program at all.  For example, if a patent
        !           577: license would not permit royalty-free redistribution of the Program by
        !           578: all those who receive copies directly or indirectly through you, then
        !           579: the only way you could satisfy both it and this License would be to
        !           580: refrain entirely from distribution of the Program.
        !           581: 
        !           582: If any portion of this section is held invalid or unenforceable under
        !           583: any particular circumstance, the balance of the section is intended to
        !           584: apply and the section as a whole is intended to apply in other
        !           585: circumstances.
        !           586: 
        !           587: It is not the purpose of this section to induce you to infringe any
        !           588: patents or other property right claims or to contest validity of any
        !           589: such claims; this section has the sole purpose of protecting the
        !           590: integrity of the free software distribution system, which is
        !           591: implemented by public license practices.  Many people have made
        !           592: generous contributions to the wide range of software distributed
        !           593: through that system in reliance on consistent application of that
        !           594: system; it is up to the author/donor to decide if he or she is willing
        !           595: to distribute software through any other system and a licensee cannot
        !           596: impose that choice.
        !           597: 
        !           598: This section is intended to make thoroughly clear what is believed to
        !           599: be a consequence of the rest of this License.
        !           600: 
        !           601: @item
        !           602: If the distribution and/or use of the Program is restricted in
        !           603: certain countries either by patents or by copyrighted interfaces, the
        !           604: original copyright holder who places the Program under this License
        !           605: may add an explicit geographical distribution limitation excluding
        !           606: those countries, so that distribution is permitted only in or among
        !           607: countries not thus excluded.  In such case, this License incorporates
        !           608: the limitation as if written in the body of this License.
        !           609: 
        !           610: @item
        !           611: The Free Software Foundation may publish revised and/or new versions
        !           612: of the General Public License from time to time.  Such new versions will
        !           613: be similar in spirit to the present version, but may differ in detail to
        !           614: address new problems or concerns.
        !           615: 
        !           616: Each version is given a distinguishing version number.  If the Program
        !           617: specifies a version number of this License which applies to it and ``any
        !           618: later version'', you have the option of following the terms and conditions
        !           619: either of that version or of any later version published by the Free
        !           620: Software Foundation.  If the Program does not specify a version number of
        !           621: this License, you may choose any version ever published by the Free Software
        !           622: Foundation.
        !           623: 
        !           624: @item
        !           625: If you wish to incorporate parts of the Program into other free
        !           626: programs whose distribution conditions are different, write to the author
        !           627: to ask for permission.  For software which is copyrighted by the Free
        !           628: Software Foundation, write to the Free Software Foundation; we sometimes
        !           629: make exceptions for this.  Our decision will be guided by the two goals
        !           630: of preserving the free status of all derivatives of our free software and
        !           631: of promoting the sharing and reuse of software generally.
        !           632: 
        !           633: @iftex
        !           634: @heading NO WARRANTY
        !           635: @end iftex
        !           636: @ifinfo
        !           637: @center NO WARRANTY
        !           638: @end ifinfo
        !           639: 
        !           640: @item
        !           641: BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
        !           642: FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
        !           643: OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
        !           644: PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
        !           645: OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
        !           646: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
        !           647: TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
        !           648: PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
        !           649: REPAIR OR CORRECTION.
        !           650: 
        !           651: @item
        !           652: IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
        !           653: WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
        !           654: REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
        !           655: INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
        !           656: OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
        !           657: TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
        !           658: YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
        !           659: PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
        !           660: POSSIBILITY OF SUCH DAMAGES.
        !           661: @end enumerate
        !           662: 
        !           663: @iftex
        !           664: @heading END OF TERMS AND CONDITIONS
        !           665: @end iftex
        !           666: @ifinfo
        !           667: @center END OF TERMS AND CONDITIONS
        !           668: @end ifinfo
        !           669: 
        !           670: @page
        !           671: @unnumberedsec How to Apply These Terms to Your New Programs
        !           672: 
        !           673:   If you develop a new program, and you want it to be of the greatest
        !           674: possible use to the public, the best way to achieve this is to make it
        !           675: free software which everyone can redistribute and change under these terms.
        !           676: 
        !           677:   To do so, attach the following notices to the program.  It is safest
        !           678: to attach them to the start of each source file to most effectively
        !           679: convey the exclusion of warranty; and each file should have at least
        !           680: the ``copyright'' line and a pointer to where the full notice is found.
        !           681: 
        !           682: @smallexample
        !           683: @var{one line to give the program's name and a brief idea of what it does.}
        !           684: Copyright (C) 19@var{yy}  @var{name of author}
        !           685: 
        !           686: This program is free software; you can redistribute it and/or modify
        !           687: it under the terms of the GNU General Public License as published by
        !           688: the Free Software Foundation; either version 2 of the License, or
        !           689: (at your option) any later version.
        !           690: 
        !           691: This program is distributed in the hope that it will be useful,
        !           692: but WITHOUT ANY WARRANTY; without even the implied warranty of
        !           693: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !           694: GNU General Public License for more details.
        !           695: 
        !           696: You should have received a copy of the GNU General Public License
        !           697: along with this program; if not, write to the Free Software
        !           698: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
        !           699: @end smallexample
        !           700: 
        !           701: Also add information on how to contact you by electronic and paper mail.
        !           702: 
        !           703: If the program is interactive, make it output a short notice like this
        !           704: when it starts in an interactive mode:
        !           705: 
        !           706: @smallexample
        !           707: Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
        !           708: Gnomovision comes with ABSOLUTELY NO WARRANTY; for details 
        !           709: type `show w'.
        !           710: This is free software, and you are welcome to redistribute it
        !           711: under certain conditions; type `show c' for details.
        !           712: @end smallexample
        !           713: 
        !           714: The hypothetical commands @samp{show w} and @samp{show c} should show
        !           715: the appropriate parts of the General Public License.  Of course, the
        !           716: commands you use may be called something other than @samp{show w} and
        !           717: @samp{show c}; they could even be mouse-clicks or menu items---whatever
        !           718: suits your program.
        !           719: 
        !           720: You should also get your employer (if you work as a programmer) or your
        !           721: school, if any, to sign a ``copyright disclaimer'' for the program, if
        !           722: necessary.  Here is a sample; alter the names:
        !           723: 
        !           724: @smallexample
        !           725: Yoyodyne, Inc., hereby disclaims all copyright interest in the program
        !           726: `Gnomovision' (which makes passes at compilers) written by James Hacker.
        !           727: 
        !           728: @var{signature of Ty Coon}, 1 April 1989
        !           729: Ty Coon, President of Vice
        !           730: @end smallexample
        !           731: 
        !           732: This General Public License does not permit incorporating your program into
        !           733: proprietary programs.  If your program is a subroutine library, you may
        !           734: consider it more useful to permit linking proprietary applications with the
        !           735: library.  If this is what you want to do, use the GNU Library General
        !           736: Public License instead of this License.
        !           737: 
        !           738: @node Concepts, Examples, Copying, Top
        !           739: @chapter The Concepts of Bison
        !           740: 
        !           741: This chapter introduces many of the basic concepts without which the
        !           742: details of Bison will not make sense.  If you do not already know how to
        !           743: use Bison or Yacc, we suggest you start by reading this chapter carefully.
        !           744: 
        !           745: @menu
        !           746: * Language and Grammar::  Languages and context-free grammars,
        !           747:                             as mathematical ideas.
        !           748: * Grammar in Bison::  How we represent grammars for Bison's sake.
        !           749: * Semantic Values::   Each token or syntactic grouping can have
        !           750:                         a semantic value (the value of an integer,
        !           751:                         the name of an identifier, etc.).
        !           752: * Semantic Actions::  Each rule can have an action containing C code.
        !           753: * Bison Parser::      What are Bison's input and output,
        !           754:                         how is the output used?
        !           755: * Stages::            Stages in writing and running Bison grammars.
        !           756: * Grammar Layout::    Overall structure of a Bison grammar file.
        !           757: @end menu
        !           758: 
        !           759: @node Language and Grammar, Grammar in Bison,  , Concepts
        !           760: @section Languages and Context-Free Grammars
        !           761: 
        !           762: @c !!! ``An expression can be an integer'' is not a valid Bison
        !           763: @c expression---Bison cannot read English! --rjc     6 Feb 1992
        !           764: @cindex context-free grammar
        !           765: @cindex grammar, context-free
        !           766: In order for Bison to parse a language, it must be described by a
        !           767: @dfn{context-free grammar}.  This means that you specify one or more
        !           768: @dfn{syntactic groupings} and give rules for constructing them from their
        !           769: parts.  For example, in the C language, one kind of grouping is called an
        !           770: `expression'.  One rule for making an expression might be, ``An expression
        !           771: can be made of a minus sign and another expression''.  Another would be,
        !           772: ``An expression can be an integer''.  As you can see, rules are often
        !           773: recursive, but there must be at least one rule which leads out of the
        !           774: recursion.
        !           775: 
        !           776: @cindex BNF
        !           777: @cindex Backus-Naur form
        !           778: The most common formal system for presenting such rules for humans to read
        !           779: is @dfn{Backus-Naur Form} or ``BNF'', which was developed in order to
        !           780: specify the language Algol 60.  Any grammar expressed in BNF is a
        !           781: context-free grammar.  The input to Bison is essentially machine-readable
        !           782: BNF.
        !           783: 
        !           784: Not all context-free languages can be handled by Bison, only those
        !           785: that are LALR(1).  In brief, this means that it must be possible to
        !           786: tell how to parse any portion of an input string with just a single
        !           787: token of look-ahead.  Strictly speaking, that is a description of an
        !           788: LR(1) grammar, and LALR(1) involves additional restrictions that are
        !           789: hard to explain simply; but it is rare in actual practice to find an
        !           790: LR(1) grammar that fails to be LALR(1).  @xref{Mystery Conflicts, ,
        !           791: Mysterious Reduce/Reduce Conflicts}, for more information on this.
        !           792: 
        !           793: @cindex symbols (abstract)
        !           794: @cindex token
        !           795: @cindex syntactic grouping
        !           796: @cindex grouping, syntactic
        !           797: In the formal grammatical rules for a language, each kind of syntactic unit
        !           798: or grouping is named by a @dfn{symbol}.  Those which are built by grouping
        !           799: smaller constructs according to grammatical rules are called
        !           800: @dfn{nonterminal symbols}; those which can't be subdivided are called
        !           801: @dfn{terminal symbols} or @dfn{token types}.  We call a piece of input
        !           802: corresponding to a single terminal symbol a @dfn{token}, and a piece
        !           803: corresponding to a single nonterminal symbol a @dfn{grouping}.@refill
        !           804: 
        !           805: We can use the C language as an example of what symbols, terminal and
        !           806: nonterminal, mean.  The tokens of C are identifiers, constants (numeric and
        !           807: string), and the various keywords, arithmetic operators and punctuation
        !           808: marks.  So the terminal symbols of a grammar for C include `identifier',
        !           809: `number', `string', plus one symbol for each keyword, operator or
        !           810: punctuation mark: `if', `return', `const', `static', `int', `char',
        !           811: `plus-sign', `open-brace', `close-brace', `comma' and many more.  (These
        !           812: tokens can be subdivided into characters, but that is a matter of
        !           813: lexicography, not grammar.)
        !           814: 
        !           815: Here is a simple C function subdivided into tokens:
        !           816: 
        !           817: @example
        !           818: int             /* @r{keyword `int'} */
        !           819: square (x)      /* @r{identifier, open-paren,} */
        !           820:                 /* @r{identifier, close-paren} */
        !           821:      int x;     /* @r{keyword `int', identifier, semicolon} */
        !           822: @{               /* @r{open-brace} */
        !           823:   return x * x; /* @r{keyword `return', identifier,} */
        !           824:                 /* @r{asterisk, identifier, semicolon} */
        !           825: @}               /* @r{close-brace} */
        !           826: @end example
        !           827: 
        !           828: The syntactic groupings of C include the expression, the statement, the
        !           829: declaration, and the function definition.  These are represented in the
        !           830: grammar of C by nonterminal symbols `expression', `statement',
        !           831: `declaration' and `function definition'.  The full grammar uses dozens of
        !           832: additional language constructs, each with its own nonterminal symbol, in
        !           833: order to express the meanings of these four.  The example above is a
        !           834: function definition; it contains one declaration, and one statement.  In
        !           835: the statement, each @samp{x} is an expression and so is @samp{x * x}.
        !           836: 
        !           837: Each nonterminal symbol must have grammatical rules showing how it is made
        !           838: out of simpler constructs.  For example, one kind of C statement is the
        !           839: @code{return} statement; this would be described with a grammar rule which
        !           840: reads informally as follows:
        !           841: 
        !           842: @quotation
        !           843: A `statement' can be made of a `return' keyword, an `expression' and a
        !           844: `semicolon'.
        !           845: @end quotation
        !           846: 
        !           847: @noindent
        !           848: There would be many other rules for `statement', one for each kind of
        !           849: statement in C.
        !           850: 
        !           851: @cindex start symbol
        !           852: One nonterminal symbol must be distinguished as the special one which
        !           853: defines a complete utterance in the language.  It is called the @dfn{start
        !           854: symbol}.  In a compiler, this means a complete input program.  In the C
        !           855: language, the nonterminal symbol `sequence of definitions and declarations'
        !           856: plays this role.
        !           857: 
        !           858: For example, @samp{1 + 2} is a valid C expression---a valid part of a C
        !           859: program---but it is not valid as an @emph{entire} C program.  In the
        !           860: context-free grammar of C, this follows from the fact that `expression' is
        !           861: not the start symbol.
        !           862: 
        !           863: The Bison parser reads a sequence of tokens as its input, and groups the
        !           864: tokens using the grammar rules.  If the input is valid, the end result is
        !           865: that the entire token sequence reduces to a single grouping whose symbol is
        !           866: the grammar's start symbol.  If we use a grammar for C, the entire input
        !           867: must be a `sequence of definitions and declarations'.  If not, the parser
        !           868: reports a syntax error.
        !           869: 
        !           870: @node Grammar in Bison, Semantic Values, Language and Grammar, Concepts
        !           871: @section From Formal Rules to Bison Input
        !           872: @cindex Bison grammar
        !           873: @cindex grammar, Bison
        !           874: @cindex formal grammar
        !           875: 
        !           876: A formal grammar is a mathematical construct.  To define the language
        !           877: for Bison, you must write a file expressing the grammar in Bison syntax:
        !           878: a @dfn{Bison grammar} file.  @xref{Grammar File, ,Bison Grammar Files}.
        !           879: 
        !           880: A nonterminal symbol in the formal grammar is represented in Bison input
        !           881: as an identifier, like an identifier in C.  By convention, it should be
        !           882: in lower case, such as @code{expr}, @code{stmt} or @code{declaration}.
        !           883: 
        !           884: The Bison representation for a terminal symbol is also called a @dfn{token
        !           885: type}.  Token types as well can be represented as C-like identifiers.  By
        !           886: convention, these identifiers should be upper case to distinguish them from
        !           887: nonterminals: for example, @code{INTEGER}, @code{IDENTIFIER}, @code{IF} or
        !           888: @code{RETURN}.  A terminal symbol that stands for a particular keyword in
        !           889: the language should be named after that keyword converted to upper case.
        !           890: The terminal symbol @code{error} is reserved for error recovery.
        !           891: @xref{Symbols}.@refill
        !           892: 
        !           893: A terminal symbol can also be represented as a character literal, just like
        !           894: a C character constant.  You should do this whenever a token is just a
        !           895: single character (parenthesis, plus-sign, etc.): use that same character in
        !           896: a literal as the terminal symbol for that token.
        !           897: 
        !           898: The grammar rules also have an expression in Bison syntax.  For example,
        !           899: here is the Bison rule for a C @code{return} statement.  The semicolon in
        !           900: quotes is a literal character token, representing part of the C syntax for
        !           901: the statement; the naked semicolon, and the colon, are Bison punctuation
        !           902: used in every rule.
        !           903: 
        !           904: @example
        !           905: stmt:   RETURN expr ';'
        !           906:         ;
        !           907: @end example
        !           908: 
        !           909: @noindent
        !           910: @xref{Rules, ,Syntax of Grammar Rules}.
        !           911: 
        !           912: @node Semantic Values, Semantic Actions, Grammar in Bison, Concepts
        !           913: @section Semantic Values
        !           914: @cindex semantic value
        !           915: @cindex value, semantic
        !           916: 
        !           917: A formal grammar selects tokens only by their classifications: for example,
        !           918: if a rule mentions the terminal symbol `integer constant', it means that
        !           919: @emph{any} integer constant is grammatically valid in that position.  The
        !           920: precise value of the constant is irrelevant to how to parse the input: if
        !           921: @samp{x+4} is grammatical then @samp{x+1} or @samp{x+3989} is equally
        !           922: grammatical.@refill
        !           923: 
        !           924: But the precise value is very important for what the input means once it is
        !           925: parsed.  A compiler is useless if it fails to distinguish between 4, 1 and
        !           926: 3989 as constants in the program!  Therefore, each token in a Bison grammar
        !           927: has both a token type and a @dfn{semantic value}.  @xref{Semantics, ,Defining Language Semantics},
        !           928: for details.
        !           929: 
        !           930: The token type is a terminal symbol defined in the grammar, such as
        !           931: @code{INTEGER}, @code{IDENTIFIER} or @code{','}.  It tells everything
        !           932: you need to know to decide where the token may validly appear and how to
        !           933: group it with other tokens.  The grammar rules know nothing about tokens
        !           934: except their types.@refill
        !           935: 
        !           936: The semantic value has all the rest of the information about the
        !           937: meaning of the token, such as the value of an integer, or the name of an
        !           938: identifier.  (A token such as @code{','} which is just punctuation doesn't
        !           939: need to have any semantic value.)
        !           940: 
        !           941: For example, an input token might be classified as token type
        !           942: @code{INTEGER} and have the semantic value 4.  Another input token might
        !           943: have the same token type @code{INTEGER} but value 3989.  When a grammar
        !           944: rule says that @code{INTEGER} is allowed, either of these tokens is
        !           945: acceptable because each is an @code{INTEGER}.  When the parser accepts the
        !           946: token, it keeps track of the token's semantic value.
        !           947: 
        !           948: Each grouping can also have a semantic value as well as its nonterminal
        !           949: symbol.  For example, in a calculator, an expression typically has a
        !           950: semantic value that is a number.  In a compiler for a programming
        !           951: language, an expression typically has a semantic value that is a tree
        !           952: structure describing the meaning of the expression.
        !           953: 
        !           954: @node Semantic Actions, Bison Parser, Semantic Values, Concepts
        !           955: @section Semantic Actions
        !           956: @cindex semantic actions
        !           957: @cindex actions, semantic
        !           958: 
        !           959: In order to be useful, a program must do more than parse input; it must
        !           960: also produce some output based on the input.  In a Bison grammar, a grammar
        !           961: rule can have an @dfn{action} made up of C statements.  Each time the
        !           962: parser recognizes a match for that rule, the action is executed.
        !           963: @xref{Actions}.
        !           964:         
        !           965: Most of the time, the purpose of an action is to compute the semantic value
        !           966: of the whole construct from the semantic values of its parts.  For example,
        !           967: suppose we have a rule which says an expression can be the sum of two
        !           968: expressions.  When the parser recognizes such a sum, each of the
        !           969: subexpressions has a semantic value which describes how it was built up.
        !           970: The action for this rule should create a similar sort of value for the
        !           971: newly recognized larger expression.
        !           972: 
        !           973: For example, here is a rule that says an expression can be the sum of
        !           974: two subexpressions:
        !           975: 
        !           976: @example
        !           977: expr: expr '+' expr   @{ $$ = $1 + $3; @}
        !           978:         ;
        !           979: @end example
        !           980: 
        !           981: @noindent
        !           982: The action says how to produce the semantic value of the sum expression
        !           983: from the values of the two subexpressions.
        !           984: 
        !           985: @node Bison Parser, Stages, Semantic Actions, Concepts
        !           986: @section Bison Output: the Parser File
        !           987: @cindex Bison parser
        !           988: @cindex Bison utility
        !           989: @cindex lexical analyzer, purpose
        !           990: @cindex parser
        !           991: 
        !           992: When you run Bison, you give it a Bison grammar file as input.  The output
        !           993: is a C source file that parses the language described by the grammar.
        !           994: This file is called a @dfn{Bison parser}.  Keep in mind that the Bison
        !           995: utility and the Bison parser are two distinct programs: the Bison utility
        !           996: is a program whose output is the Bison parser that becomes part of your
        !           997: program.
        !           998: 
        !           999: The job of the Bison parser is to group tokens into groupings according to
        !          1000: the grammar rules---for example, to build identifiers and operators into
        !          1001: expressions.  As it does this, it runs the actions for the grammar rules it
        !          1002: uses.
        !          1003: 
        !          1004: The tokens come from a function called the @dfn{lexical analyzer} that you
        !          1005: must supply in some fashion (such as by writing it in C).  The Bison parser
        !          1006: calls the lexical analyzer each time it wants a new token.  It doesn't know
        !          1007: what is ``inside'' the tokens (though their semantic values may reflect
        !          1008: this).  Typically the lexical analyzer makes the tokens by parsing
        !          1009: characters of text, but Bison does not depend on this.  @xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
        !          1010: 
        !          1011: The Bison parser file is C code which defines a function named
        !          1012: @code{yyparse} which implements that grammar.  This function does not make
        !          1013: a complete C program: you must supply some additional functions.  One is
        !          1014: the lexical analyzer.  Another is an error-reporting function which the
        !          1015: parser calls to report an error.  In addition, a complete C program must
        !          1016: start with a function called @code{main}; you have to provide this, and
        !          1017: arrange for it to call @code{yyparse} or the parser will never run.
        !          1018: @xref{Interface, ,Parser C-Language Interface}.
        !          1019: 
        !          1020: Aside from the token type names and the symbols in the actions you
        !          1021: write, all variable and function names used in the Bison parser file
        !          1022: begin with @samp{yy} or @samp{YY}.  This includes interface functions
        !          1023: such as the lexical analyzer function @code{yylex}, the error reporting
        !          1024: function @code{yyerror} and the parser function @code{yyparse} itself.
        !          1025: This also includes numerous identifiers used for internal purposes.
        !          1026: Therefore, you should avoid using C identifiers starting with @samp{yy}
        !          1027: or @samp{YY} in the Bison grammar file except for the ones defined in
        !          1028: this manual.
        !          1029: 
        !          1030: @node Stages, Grammar Layout, Bison Parser, Concepts
        !          1031: @section Stages in Using Bison
        !          1032: @cindex stages in using Bison
        !          1033: @cindex using Bison
        !          1034: 
        !          1035: The actual language-design process using Bison, from grammar specification
        !          1036: to a working compiler or interpreter, has these parts:
        !          1037: 
        !          1038: @enumerate
        !          1039: @item
        !          1040: Formally specify the grammar in a form recognized by Bison
        !          1041: (@pxref{Grammar File, ,Bison Grammar Files}).  For each grammatical rule in the language,
        !          1042: describe the action that is to be taken when an instance of that rule
        !          1043: is recognized.  The action is described by a sequence of C statements.
        !          1044: 
        !          1045: @item
        !          1046: Write a lexical analyzer to process input and pass tokens to the
        !          1047: parser.  The lexical analyzer may be written by hand in C
        !          1048: (@pxref{Lexical, ,The Lexical Analyzer Function @code{yylex}}).  It could also be produced using Lex, but the use
        !          1049: of Lex is not discussed in this manual.
        !          1050: 
        !          1051: @item
        !          1052: Write a controlling function that calls the Bison-produced parser.
        !          1053: 
        !          1054: @item
        !          1055: Write error-reporting routines.
        !          1056: @end enumerate
        !          1057: 
        !          1058: To turn this source code as written into a runnable program, you
        !          1059: must follow these steps:
        !          1060: 
        !          1061: @enumerate
        !          1062: @item
        !          1063: Run Bison on the grammar to produce the parser.
        !          1064: 
        !          1065: @item
        !          1066: Compile the code output by Bison, as well as any other source files.
        !          1067: 
        !          1068: @item
        !          1069: Link the object files to produce the finished product.
        !          1070: @end enumerate
        !          1071: 
        !          1072: @node Grammar Layout,  , Stages, Concepts
        !          1073: @section The Overall Layout of a Bison Grammar
        !          1074: @cindex grammar file
        !          1075: @cindex file format
        !          1076: @cindex format of grammar file
        !          1077: @cindex layout of Bison grammar
        !          1078: 
        !          1079: The input file for the Bison utility is a @dfn{Bison grammar file}.  The
        !          1080: general form of a Bison grammar file is as follows:
        !          1081: 
        !          1082: @example
        !          1083: %@{
        !          1084: @var{C declarations}
        !          1085: %@}
        !          1086: 
        !          1087: @var{Bison declarations}
        !          1088: 
        !          1089: %%
        !          1090: @var{Grammar rules}
        !          1091: %%
        !          1092: @var{Additional C code}
        !          1093: @end example
        !          1094: 
        !          1095: @noindent
        !          1096: The @samp{%%}, @samp{%@{} and @samp{%@}} are punctuation that appears
        !          1097: in every Bison grammar file to separate the sections.
        !          1098: 
        !          1099: The C declarations may define types and variables used in the actions.
        !          1100: You can also use preprocessor commands to define macros used there, and use
        !          1101: @code{#include} to include header files that do any of these things.
        !          1102: 
        !          1103: The Bison declarations declare the names of the terminal and nonterminal
        !          1104: symbols, and may also describe operator precedence and the data types of
        !          1105: semantic values of various symbols.
        !          1106: 
        !          1107: The grammar rules define how to construct each nonterminal symbol from its
        !          1108: parts.
        !          1109: 
        !          1110: The additional C code can contain any C code you want to use.  Often the
        !          1111: definition of the lexical analyzer @code{yylex} goes here, plus subroutines
        !          1112: called by the actions in the grammar rules.  In a simple program, all the
        !          1113: rest of the program can go here.
        !          1114: 
        !          1115: @node Examples, Grammar File, Concepts, Top
        !          1116: @chapter Examples
        !          1117: @cindex simple examples
        !          1118: @cindex examples, simple
        !          1119: 
        !          1120: Now we show and explain three sample programs written using Bison: a
        !          1121: reverse polish notation calculator, an algebraic (infix) notation
        !          1122: calculator, and a multi-function calculator.  All three have been tested
        !          1123: under BSD Unix 4.3; each produces a usable, though limited, interactive
        !          1124: desk-top calculator.
        !          1125: 
        !          1126: These examples are simple, but Bison grammars for real programming
        !          1127: languages are written the same way.
        !          1128: @ifinfo
        !          1129: You can copy these examples out of the Info file and into a source file
        !          1130: to try them.
        !          1131: @end ifinfo
        !          1132: 
        !          1133: @menu
        !          1134: * RPN Calc::          Reverse polish notation calculator;
        !          1135:                         a first example with no operator precedence.
        !          1136: * Infix Calc::        Infix (algebraic) notation calculator.
        !          1137:                         Operator precedence is introduced.
        !          1138: * Simple Error Recovery::  Continuing after syntax errors.
        !          1139: * Multi-function Calc::  Calculator with memory and trig functions.
        !          1140:                            It uses multiple data-types for semantic values.
        !          1141: * Exercises::         Ideas for improving the multi-function calculator.
        !          1142: @end menu
        !          1143: 
        !          1144: @node RPN Calc, Infix Calc,  , Examples
        !          1145: @section Reverse Polish Notation Calculator
        !          1146: @cindex reverse polish notation
        !          1147: @cindex polish notation calculator
        !          1148: @cindex @code{rpcalc}
        !          1149: @cindex calculator, simple
        !          1150: 
        !          1151: The first example is that of a simple double-precision @dfn{reverse polish
        !          1152: notation} calculator (a calculator using postfix operators).  This example
        !          1153: provides a good starting point, since operator precedence is not an issue.
        !          1154: The second example will illustrate how operator precedence is handled.
        !          1155: 
        !          1156: The source code for this calculator is named @file{rpcalc.y}.  The
        !          1157: @samp{.y} extension is a convention used for Bison input files.
        !          1158: 
        !          1159: @menu
        !          1160: * Decls: Rpcalc Decls.  Bison and C declarations for rpcalc.
        !          1161: * Rules: Rpcalc Rules.  Grammar Rules for rpcalc, with explanation.
        !          1162: * Lexer: Rpcalc Lexer.  The lexical analyzer.
        !          1163: * Main: Rpcalc Main.    The controlling function.
        !          1164: * Error: Rpcalc Error.  The error reporting function.
        !          1165: * Gen: Rpcalc Gen.      Running Bison on the grammar file.
        !          1166: * Comp: Rpcalc Compile. Run the C compiler on the output code.
        !          1167: @end menu
        !          1168: 
        !          1169: @node Rpcalc Decls, Rpcalc Rules,  , RPN Calc
        !          1170: @subsection Declarations for @code{rpcalc}
        !          1171: 
        !          1172: Here are the C and Bison declarations for the reverse polish notation
        !          1173: calculator.  As in C, comments are placed between @samp{/*@dots{}*/}.
        !          1174: 
        !          1175: @example
        !          1176: /* Reverse polish notation calculator. */
        !          1177: 
        !          1178: %@{
        !          1179: #define YYSTYPE double
        !          1180: #include <math.h>
        !          1181: %@}
        !          1182: 
        !          1183: %token NUM
        !          1184: 
        !          1185: %% /* Grammar rules and actions follow */
        !          1186: @end example
        !          1187: 
        !          1188: The C declarations section (@pxref{C Declarations, ,The C Declarations Section}) contains two
        !          1189: preprocessor directives.
        !          1190: 
        !          1191: The @code{#define} directive defines the macro @code{YYSTYPE}, thus
        !          1192: specifying the C data type for semantic values of both tokens and groupings
        !          1193: (@pxref{Value Type, ,Data Types of Semantic Values}).  The Bison parser will use whatever type
        !          1194: @code{YYSTYPE} is defined as; if you don't define it, @code{int} is the
        !          1195: default.  Because we specify @code{double}, each token and each expression
        !          1196: has an associated value, which is a floating point number.
        !          1197: 
        !          1198: The @code{#include} directive is used to declare the exponentiation
        !          1199: function @code{pow}.
        !          1200: 
        !          1201: The second section, Bison declarations, provides information to Bison about
        !          1202: the token types (@pxref{Bison Declarations, ,The Bison Declarations Section}).  Each terminal symbol that is
        !          1203: not a single-character literal must be declared here.  (Single-character
        !          1204: literals normally don't need to be declared.)  In this example, all the
        !          1205: arithmetic operators are designated by single-character literals, so the
        !          1206: only terminal symbol that needs to be declared is @code{NUM}, the token
        !          1207: type for numeric constants.
        !          1208: 
        !          1209: @node Rpcalc Rules, Rpcalc Lexer, Rpcalc Decls, RPN Calc
        !          1210: @subsection Grammar Rules for @code{rpcalc}
        !          1211: 
        !          1212: Here are the grammar rules for the reverse polish notation calculator.
        !          1213: 
        !          1214: @example
        !          1215: input:    /* empty */
        !          1216:         | input line
        !          1217: ;
        !          1218: 
        !          1219: line:     '\n'
        !          1220:         | exp '\n'  @{ printf ("\t%.10g\n", $1); @}
        !          1221: ;
        !          1222: 
        !          1223: exp:      NUM             @{ $$ = $1;         @}
        !          1224:         | exp exp '+'     @{ $$ = $1 + $2;    @}
        !          1225:         | exp exp '-'     @{ $$ = $1 - $2;    @}
        !          1226:         | exp exp '*'     @{ $$ = $1 * $2;    @}
        !          1227:         | exp exp '/'     @{ $$ = $1 / $2;    @}
        !          1228:       /* Exponentiation */
        !          1229:         | exp exp '^'     @{ $$ = pow ($1, $2); @}
        !          1230:       /* Unary minus    */
        !          1231:         | exp 'n'         @{ $$ = -$1;        @}
        !          1232: ;
        !          1233: %%
        !          1234: @end example
        !          1235: 
        !          1236: The groupings of the rpcalc ``language'' defined here are the expression
        !          1237: (given the name @code{exp}), the line of input (@code{line}), and the
        !          1238: complete input transcript (@code{input}).  Each of these nonterminal
        !          1239: symbols has several alternate rules, joined by the @samp{|} punctuator
        !          1240: which is read as ``or''.  The following sections explain what these rules
        !          1241: mean.
        !          1242: 
        !          1243: The semantics of the language is determined by the actions taken when a
        !          1244: grouping is recognized.  The actions are the C code that appears inside
        !          1245: braces.  @xref{Actions}.
        !          1246: 
        !          1247: You must specify these actions in C, but Bison provides the means for
        !          1248: passing semantic values between the rules.  In each action, the
        !          1249: pseudo-variable @code{$$} stands for the semantic value for the grouping
        !          1250: that the rule is going to construct.  Assigning a value to @code{$$} is the
        !          1251: main job of most actions.  The semantic values of the components of the
        !          1252: rule are referred to as @code{$1}, @code{$2}, and so on.
        !          1253: 
        !          1254: @menu
        !          1255: * Rpcalc Input::      
        !          1256: * Rpcalc Line::       
        !          1257: * Rpcalc Expr::       
        !          1258: @end menu
        !          1259: 
        !          1260: @node Rpcalc Input, Rpcalc Line,  , Rpcalc Rules
        !          1261: @subsubsection Explanation of @code{input}
        !          1262: 
        !          1263: Consider the definition of @code{input}:
        !          1264: 
        !          1265: @example
        !          1266: input:    /* empty */
        !          1267:         | input line
        !          1268: ;
        !          1269: @end example
        !          1270: 
        !          1271: This definition reads as follows: ``A complete input is either an empty
        !          1272: string, or a complete input followed by an input line''.  Notice that
        !          1273: ``complete input'' is defined in terms of itself.  This definition is said
        !          1274: to be @dfn{left recursive} since @code{input} appears always as the
        !          1275: leftmost symbol in the sequence.  @xref{Recursion, ,Recursive Rules}.
        !          1276: 
        !          1277: The first alternative is empty because there are no symbols between the
        !          1278: colon and the first @samp{|}; this means that @code{input} can match an
        !          1279: empty string of input (no tokens).  We write the rules this way because it
        !          1280: is legitimate to type @kbd{Ctrl-d} right after you start the calculator.
        !          1281: It's conventional to put an empty alternative first and write the comment
        !          1282: @samp{/* empty */} in it.
        !          1283: 
        !          1284: The second alternate rule (@code{input line}) handles all nontrivial input.
        !          1285: It means, ``After reading any number of lines, read one more line if
        !          1286: possible.''  The left recursion makes this rule into a loop.  Since the
        !          1287: first alternative matches empty input, the loop can be executed zero or
        !          1288: more times.
        !          1289: 
        !          1290: The parser function @code{yyparse} continues to process input until a
        !          1291: grammatical error is seen or the lexical analyzer says there are no more
        !          1292: input tokens; we will arrange for the latter to happen at end of file.
        !          1293: 
        !          1294: @node Rpcalc Line, Rpcalc Expr, Rpcalc Input, Rpcalc Rules
        !          1295: @subsubsection Explanation of @code{line}
        !          1296: 
        !          1297: Now consider the definition of @code{line}:
        !          1298: 
        !          1299: @example
        !          1300: line:     '\n'
        !          1301:         | exp '\n'  @{ printf ("\t%.10g\n", $1); @}
        !          1302: ;
        !          1303: @end example
        !          1304: 
        !          1305: The first alternative is a token which is a newline character; this means
        !          1306: that rpcalc accepts a blank line (and ignores it, since there is no
        !          1307: action).  The second alternative is an expression followed by a newline.
        !          1308: This is the alternative that makes rpcalc useful.  The semantic value of
        !          1309: the @code{exp} grouping is the value of @code{$1} because the @code{exp} in
        !          1310: question is the first symbol in the alternative.  The action prints this
        !          1311: value, which is the result of the computation the user asked for.
        !          1312: 
        !          1313: This action is unusual because it does not assign a value to @code{$$}.  As
        !          1314: a consequence, the semantic value associated with the @code{line} is
        !          1315: uninitialized (its value will be unpredictable).  This would be a bug if
        !          1316: that value were ever used, but we don't use it: once rpcalc has printed the
        !          1317: value of the user's input line, that value is no longer needed.
        !          1318: 
        !          1319: @node Rpcalc Expr,  , Rpcalc Line, Rpcalc Rules
        !          1320: @subsubsection Explanation of @code{expr}
        !          1321: 
        !          1322: The @code{exp} grouping has several rules, one for each kind of expression.
        !          1323: The first rule handles the simplest expressions: those that are just numbers.
        !          1324: The second handles an addition-expression, which looks like two expressions
        !          1325: followed by a plus-sign.  The third handles subtraction, and so on.
        !          1326: 
        !          1327: @example
        !          1328: exp:      NUM
        !          1329:         | exp exp '+'     @{ $$ = $1 + $2;    @}
        !          1330:         | exp exp '-'     @{ $$ = $1 - $2;    @}
        !          1331:         @dots{}
        !          1332:         ;
        !          1333: @end example
        !          1334: 
        !          1335: We have used @samp{|} to join all the rules for @code{exp}, but we could
        !          1336: equally well have written them separately:
        !          1337: 
        !          1338: @example
        !          1339: exp:      NUM ;
        !          1340: exp:      exp exp '+'     @{ $$ = $1 + $2;    @} ;
        !          1341: exp:      exp exp '-'     @{ $$ = $1 - $2;    @} ;
        !          1342:         @dots{}
        !          1343: @end example
        !          1344: 
        !          1345: Most of the rules have actions that compute the value of the expression in
        !          1346: terms of the value of its parts.  For example, in the rule for addition,
        !          1347: @code{$1} refers to the first component @code{exp} and @code{$2} refers to
        !          1348: the second one.  The third component, @code{'+'}, has no meaningful
        !          1349: associated semantic value, but if it had one you could refer to it as
        !          1350: @code{$3}.  When @code{yyparse} recognizes a sum expression using this
        !          1351: rule, the sum of the two subexpressions' values is produced as the value of
        !          1352: the entire expression.  @xref{Actions}.
        !          1353: 
        !          1354: You don't have to give an action for every rule.  When a rule has no
        !          1355: action, Bison by default copies the value of @code{$1} into @code{$$}.
        !          1356: This is what happens in the first rule (the one that uses @code{NUM}).
        !          1357: 
        !          1358: The formatting shown here is the recommended convention, but Bison does
        !          1359: not require it.  You can add or change whitespace as much as you wish.
        !          1360: For example, this:
        !          1361: 
        !          1362: @example
        !          1363: exp   : NUM | exp exp '+' @{$$ = $1 + $2; @} | @dots{}
        !          1364: @end example
        !          1365: 
        !          1366: @noindent
        !          1367: means the same thing as this:
        !          1368: 
        !          1369: @example
        !          1370: exp:      NUM
        !          1371:         | exp exp '+'    @{ $$ = $1 + $2; @}
        !          1372:         | @dots{}
        !          1373: @end example
        !          1374: 
        !          1375: @noindent
        !          1376: The latter, however, is much more readable.
        !          1377: 
        !          1378: @node Rpcalc Lexer, Rpcalc Main, Rpcalc Rules, RPN Calc
        !          1379: @subsection The @code{rpcalc} Lexical Analyzer
        !          1380: @cindex writing a lexical analyzer
        !          1381: @cindex lexical analyzer, writing
        !          1382: 
        !          1383: The lexical analyzer's job is low-level parsing: converting characters or
        !          1384: sequences of characters into tokens.  The Bison parser gets its tokens by
        !          1385: calling the lexical analyzer.  @xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
        !          1386: 
        !          1387: Only a simple lexical analyzer is needed for the RPN calculator.  This
        !          1388: lexical analyzer skips blanks and tabs, then reads in numbers as
        !          1389: @code{double} and returns them as @code{NUM} tokens.  Any other character
        !          1390: that isn't part of a number is a separate token.  Note that the token-code
        !          1391: for such a single-character token is the character itself.
        !          1392: 
        !          1393: The return value of the lexical analyzer function is a numeric code which
        !          1394: represents a token type.  The same text used in Bison rules to stand for
        !          1395: this token type is also a C expression for the numeric code for the type.
        !          1396: This works in two ways.  If the token type is a character literal, then its
        !          1397: numeric code is the ASCII code for that character; you can use the same
        !          1398: character literal in the lexical analyzer to express the number.  If the
        !          1399: token type is an identifier, that identifier is defined by Bison as a C
        !          1400: macro whose definition is the appropriate number.  In this example,
        !          1401: therefore, @code{NUM} becomes a macro for @code{yylex} to use.
        !          1402: 
        !          1403: The semantic value of the token (if it has one) is stored into the global
        !          1404: variable @code{yylval}, which is where the Bison parser will look for it.
        !          1405: (The C data type of @code{yylval} is @code{YYSTYPE}, which was defined
        !          1406: at the beginning of the grammar; @pxref{Rpcalc Decls, ,Declarations for @code{rpcalc}}.)
        !          1407: 
        !          1408: A token type code of zero is returned if the end-of-file is encountered.
        !          1409: (Bison recognizes any nonpositive value as indicating the end of the
        !          1410: input.)
        !          1411: 
        !          1412: Here is the code for the lexical analyzer:
        !          1413: 
        !          1414: @example
        !          1415: @group
        !          1416: /* Lexical analyzer returns a double floating point 
        !          1417:    number on the stack and the token NUM, or the ASCII
        !          1418:    character read if not a number.  Skips all blanks
        !          1419:    and tabs, returns 0 for EOF. */
        !          1420: 
        !          1421: #include <ctype.h>
        !          1422: @end group
        !          1423: 
        !          1424: @group
        !          1425: yylex ()
        !          1426: @{
        !          1427:   int c;
        !          1428: 
        !          1429:   /* skip white space  */
        !          1430:   while ((c = getchar ()) == ' ' || c == '\t')  
        !          1431:     ;
        !          1432: @end group
        !          1433: @group
        !          1434:   /* process numbers   */
        !          1435:   if (c == '.' || isdigit (c))                
        !          1436:     @{
        !          1437:       ungetc (c, stdin);
        !          1438:       scanf ("%lf", &yylval);
        !          1439:       return NUM;
        !          1440:     @}
        !          1441: @end group
        !          1442: @group
        !          1443:   /* return end-of-file  */
        !          1444:   if (c == EOF)                            
        !          1445:     return 0;
        !          1446:   /* return single chars */
        !          1447:   return c;                                
        !          1448: @}
        !          1449: @end group
        !          1450: @end example
        !          1451: 
        !          1452: @node Rpcalc Main, Rpcalc Error, Rpcalc Lexer, RPN Calc
        !          1453: @subsection The Controlling Function
        !          1454: @cindex controlling function
        !          1455: @cindex main function in simple example
        !          1456: 
        !          1457: In keeping with the spirit of this example, the controlling function is
        !          1458: kept to the bare minimum.  The only requirement is that it call
        !          1459: @code{yyparse} to start the process of parsing.
        !          1460: 
        !          1461: @example
        !          1462: @group
        !          1463: main ()
        !          1464: @{
        !          1465:   yyparse ();
        !          1466: @}
        !          1467: @end group
        !          1468: @end example
        !          1469: 
        !          1470: @node Rpcalc Error, Rpcalc Gen, Rpcalc Main, RPN Calc
        !          1471: @subsection The Error Reporting Routine
        !          1472: @cindex error reporting routine
        !          1473: 
        !          1474: When @code{yyparse} detects a syntax error, it calls the error reporting
        !          1475: function @code{yyerror} to print an error message (usually but not always
        !          1476: @code{"parse error"}).  It is up to the programmer to supply @code{yyerror}
        !          1477: (@pxref{Interface, ,Parser C-Language Interface}), so here is the definition we will use:
        !          1478: 
        !          1479: @example
        !          1480: @group
        !          1481: #include <stdio.h>
        !          1482: 
        !          1483: yyerror (s)  /* Called by yyparse on error */
        !          1484:      char *s;
        !          1485: @{
        !          1486:   printf ("%s\n", s);
        !          1487: @}
        !          1488: @end group
        !          1489: @end example
        !          1490: 
        !          1491: After @code{yyerror} returns, the Bison parser may recover from the error
        !          1492: and continue parsing if the grammar contains a suitable error rule
        !          1493: (@pxref{Error Recovery}).  Otherwise, @code{yyparse} returns nonzero.  We
        !          1494: have not written any error rules in this example, so any invalid input will
        !          1495: cause the calculator program to exit.  This is not clean behavior for a
        !          1496: real calculator, but it is adequate in the first example.
        !          1497: 
        !          1498: @node Rpcalc Gen, Rpcalc Compile, Rpcalc Error, RPN Calc
        !          1499: @subsection Running Bison to Make the Parser
        !          1500: @cindex running Bison (introduction)
        !          1501: 
        !          1502: Before running Bison to produce a parser, we need to decide how to arrange
        !          1503: all the source code in one or more source files.  For such a simple example,
        !          1504: the easiest thing is to put everything in one file.  The definitions of
        !          1505: @code{yylex}, @code{yyerror} and @code{main} go at the end, in the
        !          1506: ``additional C code'' section of the file (@pxref{Grammar Layout, ,The Overall Layout of a Bison Grammar}).
        !          1507: 
        !          1508: For a large project, you would probably have several source files, and use
        !          1509: @code{make} to arrange to recompile them.
        !          1510: 
        !          1511: With all the source in a single file, you use the following command to
        !          1512: convert it into a parser file:
        !          1513: 
        !          1514: @example
        !          1515: bison @var{file_name}.y
        !          1516: @end example
        !          1517: 
        !          1518: @noindent
        !          1519: In this example the file was called @file{rpcalc.y} (for ``Reverse Polish
        !          1520: CALCulator'').  Bison produces a file named @file{@var{file_name}.tab.c},
        !          1521: removing the @samp{.y} from the original file name. The file output by
        !          1522: Bison contains the source code for @code{yyparse}.  The additional
        !          1523: functions in the input file (@code{yylex}, @code{yyerror} and @code{main})
        !          1524: are copied verbatim to the output.
        !          1525: 
        !          1526: @node Rpcalc Compile,  , Rpcalc Gen, RPN Calc
        !          1527: @subsection Compiling the Parser File
        !          1528: @cindex compiling the parser
        !          1529: 
        !          1530: Here is how to compile and run the parser file:
        !          1531: 
        !          1532: @example
        !          1533: @group
        !          1534: # @r{List files in current directory.}
        !          1535: % ls
        !          1536: rpcalc.tab.c  rpcalc.y
        !          1537: @end group
        !          1538: 
        !          1539: @group
        !          1540: # @r{Compile the Bison parser.}
        !          1541: # @r{@samp{-lm} tells compiler to search math library for @code{pow}.}
        !          1542: % cc rpcalc.tab.c -lm -o rpcalc
        !          1543: @end group
        !          1544: 
        !          1545: @group
        !          1546: # @r{List files again.}
        !          1547: % ls
        !          1548: rpcalc  rpcalc.tab.c  rpcalc.y
        !          1549: @end group
        !          1550: @end example
        !          1551: 
        !          1552: The file @file{rpcalc} now contains the executable code.  Here is an
        !          1553: example session using @code{rpcalc}.
        !          1554: 
        !          1555: @example
        !          1556: % rpcalc
        !          1557: 4 9 +
        !          1558: 13
        !          1559: 3 7 + 3 4 5 *+-
        !          1560: -13
        !          1561: 3 7 + 3 4 5 * + - n              @r{Note the unary minus, @samp{n}}
        !          1562: 13
        !          1563: 5 6 / 4 n +
        !          1564: -3.166666667
        !          1565: 3 4 ^                            @r{Exponentiation}
        !          1566: 81
        !          1567: ^D                               @r{End-of-file indicator}
        !          1568: %
        !          1569: @end example
        !          1570: 
        !          1571: @node Infix Calc, Simple Error Recovery, RPN Calc, Examples
        !          1572: @section Infix Notation Calculator: @code{calc}
        !          1573: @cindex infix notation calculator
        !          1574: @cindex @code{calc}
        !          1575: @cindex calculator, infix notation
        !          1576: 
        !          1577: We now modify rpcalc to handle infix operators instead of postfix.  Infix
        !          1578: notation involves the concept of operator precedence and the need for
        !          1579: parentheses nested to arbitrary depth.  Here is the Bison code for
        !          1580: @file{calc.y}, an infix desk-top calculator.
        !          1581: 
        !          1582: @example
        !          1583: /* Infix notation calculator--calc */
        !          1584: 
        !          1585: %@{
        !          1586: #define YYSTYPE double
        !          1587: #include <math.h>
        !          1588: %@}
        !          1589: 
        !          1590: /* BISON Declarations */
        !          1591: %token NUM
        !          1592: %left '-' '+'
        !          1593: %left '*' '/'
        !          1594: %left NEG     /* negation--unary minus */
        !          1595: %right '^'    /* exponentiation        */
        !          1596: 
        !          1597: /* Grammar follows */
        !          1598: %%
        !          1599: input:    /* empty string */
        !          1600:         | input line
        !          1601: ;
        !          1602: 
        !          1603: line:     '\n'
        !          1604:         | exp '\n'  @{ printf ("\t%.10g\n", $1); @}
        !          1605: ;
        !          1606: 
        !          1607: exp:      NUM                @{ $$ = $1;         @}
        !          1608:         | exp '+' exp        @{ $$ = $1 + $3;    @}
        !          1609:         | exp '-' exp        @{ $$ = $1 - $3;    @}
        !          1610:         | exp '*' exp        @{ $$ = $1 * $3;    @}
        !          1611:         | exp '/' exp        @{ $$ = $1 / $3;    @}
        !          1612:         | '-' exp  %prec NEG @{ $$ = -$2;        @}
        !          1613:         | exp '^' exp        @{ $$ = pow ($1, $3); @}
        !          1614:         | '(' exp ')'        @{ $$ = $2;         @}
        !          1615: ;
        !          1616: %%
        !          1617: @end example
        !          1618: 
        !          1619: @noindent
        !          1620: The functions @code{yylex}, @code{yyerror} and @code{main} can be the same
        !          1621: as before.
        !          1622: 
        !          1623: There are two important new features shown in this code.
        !          1624: 
        !          1625: In the second section (Bison declarations), @code{%left} declares token
        !          1626: types and says they are left-associative operators.  The declarations
        !          1627: @code{%left} and @code{%right} (right associativity) take the place of
        !          1628: @code{%token} which is used to declare a token type name without
        !          1629: associativity.  (These tokens are single-character literals, which
        !          1630: ordinarily don't need to be declared.  We declare them here to specify
        !          1631: the associativity.)
        !          1632: 
        !          1633: Operator precedence is determined by the line ordering of the
        !          1634: declarations; the higher the line number of the declaration (lower on
        !          1635: the page or screen), the higher the precedence.  Hence, exponentiation
        !          1636: has the highest precedence, unary minus (@code{NEG}) is next, followed
        !          1637: by @samp{*} and @samp{/}, and so on.  @xref{Precedence, ,Operator Precedence}.
        !          1638: 
        !          1639: The other important new feature is the @code{%prec} in the grammar section
        !          1640: for the unary minus operator.  The @code{%prec} simply instructs Bison that
        !          1641: the rule @samp{| '-' exp} has the same precedence as @code{NEG}---in this
        !          1642: case the next-to-highest.  @xref{Contextual Precedence, ,Context-Dependent Precedence}.
        !          1643: 
        !          1644: Here is a sample run of @file{calc.y}:
        !          1645: 
        !          1646: @need 500
        !          1647: @example
        !          1648: % calc
        !          1649: 4 + 4.5 - (34/(8*3+-3))
        !          1650: 6.880952381
        !          1651: -56 + 2
        !          1652: -54
        !          1653: 3 ^ 2
        !          1654: 9
        !          1655: @end example
        !          1656: 
        !          1657: @node Simple Error Recovery, Multi-function Calc, Infix Calc, Examples
        !          1658: @section Simple Error Recovery
        !          1659: @cindex error recovery, simple
        !          1660: 
        !          1661: Up to this point, this manual has not addressed the issue of @dfn{error
        !          1662: recovery}---how to continue parsing after the parser detects a syntax
        !          1663: error.  All we have handled is error reporting with @code{yyerror}.  Recall
        !          1664: that by default @code{yyparse} returns after calling @code{yyerror}.  This
        !          1665: means that an erroneous input line causes the calculator program to exit.
        !          1666: Now we show how to rectify this deficiency.
        !          1667: 
        !          1668: The Bison language itself includes the reserved word @code{error}, which
        !          1669: may be included in the grammar rules.  In the example below it has
        !          1670: been added to one of the alternatives for @code{line}:
        !          1671: 
        !          1672: @example
        !          1673: @group
        !          1674: line:     '\n'
        !          1675:         | exp '\n'   @{ printf ("\t%.10g\n", $1); @}
        !          1676:         | error '\n' @{ yyerrok;                  @}
        !          1677: ;
        !          1678: @end group
        !          1679: @end example
        !          1680: 
        !          1681: This addition to the grammar allows for simple error recovery in the event
        !          1682: of a parse error.  If an expression that cannot be evaluated is read, the
        !          1683: error will be recognized by the third rule for @code{line}, and parsing
        !          1684: will continue.  (The @code{yyerror} function is still called upon to print
        !          1685: its message as well.)  The action executes the statement @code{yyerrok}, a
        !          1686: macro defined automatically by Bison; its meaning is that error recovery is
        !          1687: complete (@pxref{Error Recovery}).  Note the difference between
        !          1688: @code{yyerrok} and @code{yyerror}; neither one is a misprint.@refill
        !          1689: 
        !          1690: This form of error recovery deals with syntax errors.  There are other
        !          1691: kinds of errors; for example, division by zero, which raises an exception
        !          1692: signal that is normally fatal.  A real calculator program must handle this
        !          1693: signal and use @code{longjmp} to return to @code{main} and resume parsing
        !          1694: input lines; it would also have to discard the rest of the current line of
        !          1695: input.  We won't discuss this issue further because it is not specific to
        !          1696: Bison programs.
        !          1697: 
        !          1698: @node Multi-function Calc, Exercises, Simple Error Recovery, Examples
        !          1699: @section Multi-Function Calculator: @code{mfcalc}
        !          1700: @cindex multi-function calculator
        !          1701: @cindex @code{mfcalc}
        !          1702: @cindex calculator, multi-function
        !          1703: 
        !          1704: Now that the basics of Bison have been discussed, it is time to move on to
        !          1705: a more advanced problem.  The above calculators provided only five
        !          1706: functions, @samp{+}, @samp{-}, @samp{*}, @samp{/} and @samp{^}.  It would
        !          1707: be nice to have a calculator that provides other mathematical functions such
        !          1708: as @code{sin}, @code{cos}, etc.
        !          1709: 
        !          1710: It is easy to add new operators to the infix calculator as long as they are
        !          1711: only single-character literals.  The lexical analyzer @code{yylex} passes
        !          1712: back all non-number characters as tokens, so new grammar rules suffice for
        !          1713: adding a new operator.  But we want something more flexible: built-in
        !          1714: functions whose syntax has this form:
        !          1715: 
        !          1716: @example
        !          1717: @var{function_name} (@var{argument})
        !          1718: @end example
        !          1719: 
        !          1720: @noindent
        !          1721: At the same time, we will add memory to the calculator, by allowing you
        !          1722: to create named variables, store values in them, and use them later.
        !          1723: Here is a sample session with the multi-function calculator:
        !          1724: 
        !          1725: @example
        !          1726: % acalc
        !          1727: pi = 3.141592653589
        !          1728: 3.1415926536
        !          1729: sin(pi)
        !          1730: 0.0000000000
        !          1731: alpha = beta1 = 2.3
        !          1732: 2.3000000000
        !          1733: alpha
        !          1734: 2.3000000000
        !          1735: ln(alpha)
        !          1736: 0.8329091229
        !          1737: exp(ln(beta1))
        !          1738: 2.3000000000
        !          1739: %
        !          1740: @end example
        !          1741: 
        !          1742: Note that multiple assignment and nested function calls are permitted.
        !          1743: 
        !          1744: @menu
        !          1745: * Decl: Mfcalc Decl.      Bison declarations for multi-function calculator.
        !          1746: * Rules: Mfcalc Rules.    Grammar rules for the calculator.
        !          1747: * Symtab: Mfcalc Symtab.  Symbol table management subroutines.
        !          1748: @end menu
        !          1749: 
        !          1750: @node Mfcalc Decl, Mfcalc Rules,  , Multi-function Calc
        !          1751: @subsection Declarations for @code{mfcalc}
        !          1752: 
        !          1753: Here are the C and Bison declarations for the multi-function calculator.
        !          1754: 
        !          1755: @smallexample
        !          1756: %@{
        !          1757: #include <math.h>  /* For math functions, cos(), sin(), etc. */
        !          1758: #include "calc.h"  /* Contains definition of `symrec'        */
        !          1759: %@}
        !          1760: %union @{
        !          1761: double     val;  /* For returning numbers.                   */
        !          1762: symrec  *tptr;   /* For returning symbol-table pointers      */
        !          1763: @}
        !          1764: 
        !          1765: %token <val>  NUM        /* Simple double precision number   */
        !          1766: %token <tptr> VAR FNCT   /* Variable and Function            */
        !          1767: %type  <val>  exp
        !          1768: 
        !          1769: %right '='
        !          1770: %left '-' '+'
        !          1771: %left '*' '/'
        !          1772: %left NEG     /* Negation--unary minus */
        !          1773: %right '^'    /* Exponentiation        */
        !          1774: 
        !          1775: /* Grammar follows */
        !          1776: 
        !          1777: %%
        !          1778: @end smallexample
        !          1779: 
        !          1780: The above grammar introduces only two new features of the Bison language.
        !          1781: These features allow semantic values to have various data types
        !          1782: (@pxref{Multiple Types, ,More Than One Value Type}).
        !          1783: 
        !          1784: The @code{%union} declaration specifies the entire list of possible types;
        !          1785: this is instead of defining @code{YYSTYPE}.  The allowable types are now
        !          1786: double-floats (for @code{exp} and @code{NUM}) and pointers to entries in
        !          1787: the symbol table.  @xref{Union Decl, ,The Collection of Value Types}.
        !          1788: 
        !          1789: Since values can now have various types, it is necessary to associate a
        !          1790: type with each grammar symbol whose semantic value is used.  These symbols
        !          1791: are @code{NUM}, @code{VAR}, @code{FNCT}, and @code{exp}.  Their
        !          1792: declarations are augmented with information about their data type (placed
        !          1793: between angle brackets).
        !          1794: 
        !          1795: The Bison construct @code{%type} is used for declaring nonterminal symbols,
        !          1796: just as @code{%token} is used for declaring token types.  We have not used
        !          1797: @code{%type} before because nonterminal symbols are normally declared
        !          1798: implicitly by the rules that define them.  But @code{exp} must be declared
        !          1799: explicitly so we can specify its value type.  @xref{Type Decl, ,Nonterminal Symbols}.
        !          1800: 
        !          1801: @node Mfcalc Rules, Mfcalc Symtab, Mfcalc Decl, Multi-function Calc
        !          1802: @subsection Grammar Rules for @code{mfcalc}
        !          1803: 
        !          1804: Here are the grammar rules for the multi-function calculator.
        !          1805: Most of them are copied directly from @code{calc}; three rules,
        !          1806: those which mention @code{VAR} or @code{FNCT}, are new.
        !          1807: 
        !          1808: @smallexample
        !          1809: input:   /* empty */
        !          1810:         | input line
        !          1811: ;
        !          1812: 
        !          1813: line:
        !          1814:           '\n'
        !          1815:         | exp '\n'   @{ printf ("\t%.10g\n", $1); @}
        !          1816:         | error '\n' @{ yyerrok;                  @}
        !          1817: ;
        !          1818: 
        !          1819: exp:      NUM                @{ $$ = $1;                         @}
        !          1820:         | VAR                @{ $$ = $1->value.var;              @}
        !          1821:         | VAR '=' exp        @{ $$ = $3; $1->value.var = $3;     @}
        !          1822:         | FNCT '(' exp ')'   @{ $$ = (*($1->value.fnctptr))($3); @}
        !          1823:         | exp '+' exp        @{ $$ = $1 + $3;                    @}
        !          1824:         | exp '-' exp        @{ $$ = $1 - $3;                    @}
        !          1825:         | exp '*' exp        @{ $$ = $1 * $3;                    @}
        !          1826:         | exp '/' exp        @{ $$ = $1 / $3;                    @}
        !          1827:         | '-' exp  %prec NEG @{ $$ = -$2;                        @}
        !          1828:         | exp '^' exp        @{ $$ = pow ($1, $3);               @}
        !          1829:         | '(' exp ')'        @{ $$ = $2;                         @}
        !          1830: ;
        !          1831: /* End of grammar */
        !          1832: %%
        !          1833: @end smallexample
        !          1834: 
        !          1835: @node Mfcalc Symtab,  , Mfcalc Rules, Multi-function Calc
        !          1836: @subsection The @code{mfcalc} Symbol Table
        !          1837: @cindex symbol table example
        !          1838: 
        !          1839: The multi-function calculator requires a symbol table to keep track of the
        !          1840: names and meanings of variables and functions.  This doesn't affect the
        !          1841: grammar rules (except for the actions) or the Bison declarations, but it
        !          1842: requires some additional C functions for support.
        !          1843: 
        !          1844: The symbol table itself consists of a linked list of records.  Its
        !          1845: definition, which is kept in the header @file{calc.h}, is as follows.  It
        !          1846: provides for either functions or variables to be placed in the table.
        !          1847: 
        !          1848: @smallexample
        !          1849: @group
        !          1850: /* Data type for links in the chain of symbols.      */
        !          1851: struct symrec
        !          1852: @{
        !          1853:   char *name;  /* name of symbol                     */
        !          1854:   int type;    /* type of symbol: either VAR or FNCT */
        !          1855:   union @{
        !          1856:     double var;           /* value of a VAR          */
        !          1857:     double (*fnctptr)();  /* value of a FNCT         */
        !          1858:   @} value;
        !          1859:   struct symrec *next;    /* link field              */
        !          1860: @};
        !          1861: @end group
        !          1862: 
        !          1863: @group
        !          1864: typedef struct symrec symrec;
        !          1865: 
        !          1866: /* The symbol table: a chain of `struct symrec'.     */
        !          1867: extern symrec *sym_table;
        !          1868: 
        !          1869: symrec *putsym ();
        !          1870: symrec *getsym ();
        !          1871: @end group
        !          1872: @end smallexample
        !          1873: 
        !          1874: The new version of @code{main} includes a call to @code{init_table}, a
        !          1875: function that initializes the symbol table.  Here it is, and
        !          1876: @code{init_table} as well:
        !          1877: 
        !          1878: @smallexample
        !          1879: @group
        !          1880: #include <stdio.h>
        !          1881: 
        !          1882: main ()
        !          1883: @{
        !          1884:   init_table ();
        !          1885:   yyparse ();
        !          1886: @}
        !          1887: @end group
        !          1888: 
        !          1889: @group
        !          1890: yyerror (s)  /* Called by yyparse on error */
        !          1891:      char *s;
        !          1892: @{
        !          1893:   printf ("%s\n", s);
        !          1894: @}
        !          1895: 
        !          1896: struct init
        !          1897: @{
        !          1898:   char *fname;
        !          1899:   double (*fnct)();
        !          1900: @};
        !          1901: @end group
        !          1902: 
        !          1903: @group
        !          1904: struct init arith_fncts[]
        !          1905:   = @{
        !          1906:       "sin", sin,
        !          1907:       "cos", cos,
        !          1908:       "atan", atan,
        !          1909:       "ln", log,
        !          1910:       "exp", exp,
        !          1911:       "sqrt", sqrt,
        !          1912:       0, 0
        !          1913:     @};
        !          1914: 
        !          1915: /* The symbol table: a chain of `struct symrec'.  */
        !          1916: symrec *sym_table = (symrec *)0;
        !          1917: @end group
        !          1918: 
        !          1919: @group
        !          1920: init_table ()  /* puts arithmetic functions in table. */
        !          1921: @{
        !          1922:   int i;
        !          1923:   symrec *ptr;
        !          1924:   for (i = 0; arith_fncts[i].fname != 0; i++)
        !          1925:     @{
        !          1926:       ptr = putsym (arith_fncts[i].fname, FNCT);
        !          1927:       ptr->value.fnctptr = arith_fncts[i].fnct;
        !          1928:     @}
        !          1929: @}
        !          1930: @end group
        !          1931: @end smallexample
        !          1932: 
        !          1933: By simply editing the initialization list and adding the necessary include
        !          1934: files, you can add additional functions to the calculator.
        !          1935: 
        !          1936: Two important functions allow look-up and installation of symbols in the
        !          1937: symbol table.  The function @code{putsym} is passed a name and the type
        !          1938: (@code{VAR} or @code{FNCT}) of the object to be installed.  The object is
        !          1939: linked to the front of the list, and a pointer to the object is returned.
        !          1940: The function @code{getsym} is passed the name of the symbol to look up.  If
        !          1941: found, a pointer to that symbol is returned; otherwise zero is returned.
        !          1942: 
        !          1943: @smallexample
        !          1944: symrec *
        !          1945: putsym (sym_name,sym_type)
        !          1946:      char *sym_name;
        !          1947:      int sym_type;
        !          1948: @{
        !          1949:   symrec *ptr;
        !          1950:   ptr = (symrec *) malloc (sizeof (symrec));
        !          1951:   ptr->name = (char *) malloc (strlen (sym_name) + 1);
        !          1952:   strcpy (ptr->name,sym_name);
        !          1953:   ptr->type = sym_type;
        !          1954:   ptr->value.var = 0; /* set value to 0 even if fctn.  */
        !          1955:   ptr->next = (struct symrec *)sym_table;
        !          1956:   sym_table = ptr;
        !          1957:   return ptr;
        !          1958: @}
        !          1959: 
        !          1960: symrec *
        !          1961: getsym (sym_name)
        !          1962:      char *sym_name;
        !          1963: @{
        !          1964:   symrec *ptr;
        !          1965:   for (ptr = sym_table; ptr != (symrec *) 0;
        !          1966:        ptr = (symrec *)ptr->next)
        !          1967:     if (strcmp (ptr->name,sym_name) == 0)
        !          1968:       return ptr;
        !          1969:   return 0;
        !          1970: @}
        !          1971: @end smallexample
        !          1972: 
        !          1973: The function @code{yylex} must now recognize variables, numeric values, and
        !          1974: the single-character arithmetic operators.  Strings of alphanumeric
        !          1975: characters with a leading nondigit are recognized as either variables or
        !          1976: functions depending on what the symbol table says about them.
        !          1977: 
        !          1978: The string is passed to @code{getsym} for look up in the symbol table.  If
        !          1979: the name appears in the table, a pointer to its location and its type
        !          1980: (@code{VAR} or @code{FNCT}) is returned to @code{yyparse}.  If it is not
        !          1981: already in the table, then it is installed as a @code{VAR} using
        !          1982: @code{putsym}.  Again, a pointer and its type (which must be @code{VAR}) is
        !          1983: returned to @code{yyparse}.@refill
        !          1984: 
        !          1985: No change is needed in the handling of numeric values and arithmetic
        !          1986: operators in @code{yylex}.
        !          1987: 
        !          1988: @smallexample
        !          1989: @group
        !          1990: #include <ctype.h>
        !          1991: yylex ()
        !          1992: @{
        !          1993:   int c;
        !          1994: 
        !          1995:   /* Ignore whitespace, get first nonwhite character.  */
        !          1996:   while ((c = getchar ()) == ' ' || c == '\t');
        !          1997: 
        !          1998:   if (c == EOF)
        !          1999:     return 0;
        !          2000: @end group
        !          2001: 
        !          2002: @group
        !          2003:   /* Char starts a number => parse the number.         */
        !          2004:   if (c == '.' || isdigit (c))
        !          2005:     @{
        !          2006:       ungetc (c, stdin);
        !          2007:       scanf ("%lf", &yylval.val);
        !          2008:       return NUM;
        !          2009:     @}
        !          2010: @end group
        !          2011: 
        !          2012: @group
        !          2013:   /* Char starts an identifier => read the name.       */
        !          2014:   if (isalpha (c))
        !          2015:     @{
        !          2016:       symrec *s;
        !          2017:       static char *symbuf = 0;
        !          2018:       static int length = 0;
        !          2019:       int i;
        !          2020: @end group
        !          2021: 
        !          2022: @group
        !          2023:       /* Initially make the buffer long enough
        !          2024:          for a 40-character symbol name.  */
        !          2025:       if (length == 0)
        !          2026:         length = 40, symbuf = (char *)malloc (length + 1);
        !          2027: 
        !          2028:       i = 0;
        !          2029:       do
        !          2030: @end group
        !          2031: @group
        !          2032:         @{
        !          2033:           /* If buffer is full, make it bigger.        */
        !          2034:           if (i == length)
        !          2035:             @{
        !          2036:               length *= 2;
        !          2037:               symbuf = (char *)realloc (symbuf, length + 1);
        !          2038:             @}
        !          2039:           /* Add this character to the buffer.         */
        !          2040:           symbuf[i++] = c;
        !          2041:           /* Get another character.                    */
        !          2042:           c = getchar ();
        !          2043:         @}
        !          2044: @end group
        !          2045: @group
        !          2046:       while (c != EOF && isalnum (c));
        !          2047: 
        !          2048:       ungetc (c, stdin);
        !          2049:       symbuf[i] = '\0';
        !          2050: @end group
        !          2051: 
        !          2052: @group
        !          2053:       s = getsym (symbuf);
        !          2054:       if (s == 0)
        !          2055:         s = putsym (symbuf, VAR);
        !          2056:       yylval.tptr = s;
        !          2057:       return s->type;
        !          2058:     @}
        !          2059: 
        !          2060:   /* Any other character is a token by itself.        */
        !          2061:   return c;
        !          2062: @}
        !          2063: @end group
        !          2064: @end smallexample
        !          2065: 
        !          2066: This program is both powerful and flexible. You may easily add new
        !          2067: functions, and it is a simple job to modify this code to install predefined
        !          2068: variables such as @code{pi} or @code{e} as well.
        !          2069: 
        !          2070: @node Exercises,  , Multi-function Calc, Examples
        !          2071: @section Exercises
        !          2072: @cindex exercises
        !          2073: 
        !          2074: @enumerate
        !          2075: @item
        !          2076: Add some new functions from @file{math.h} to the initialization list.
        !          2077: 
        !          2078: @item
        !          2079: Add another array that contains constants and their values.  Then
        !          2080: modify @code{init_table} to add these constants to the symbol table.
        !          2081: It will be easiest to give the constants type @code{VAR}.
        !          2082: 
        !          2083: @item
        !          2084: Make the program report an error if the user refers to an
        !          2085: uninitialized variable in any way except to store a value in it.
        !          2086: @end enumerate
        !          2087: 
        !          2088: @node Grammar File, Interface, Examples, Top
        !          2089: @chapter Bison Grammar Files
        !          2090: 
        !          2091: Bison takes as input a context-free grammar specification and produces a
        !          2092: C-language function that recognizes correct instances of the grammar.
        !          2093: 
        !          2094: The Bison grammar input file conventionally has a name ending in @samp{.y}.
        !          2095: 
        !          2096: @menu
        !          2097: * Grammar Outline::   Overall layout of the grammar file.
        !          2098: * Symbols::           Terminal and nonterminal symbols.
        !          2099: * Rules::             How to write grammar rules.
        !          2100: * Recursion::         Writing recursive rules.
        !          2101: * Semantics::         Semantic values and actions.
        !          2102: * Declarations::      All kinds of Bison declarations are described here.
        !          2103: * Multiple Parsers::  Putting more than one Bison parser in one program.
        !          2104: @end menu
        !          2105: 
        !          2106: @node Grammar Outline, Symbols,  , Grammar File
        !          2107: @section Outline of a Bison Grammar
        !          2108: 
        !          2109: A Bison grammar file has four main sections, shown here with the
        !          2110: appropriate delimiters:
        !          2111: 
        !          2112: @example
        !          2113: %@{
        !          2114: @var{C declarations}
        !          2115: %@}
        !          2116: 
        !          2117: @var{Bison declarations}
        !          2118: 
        !          2119: %%
        !          2120: @var{Grammar rules}
        !          2121: %%
        !          2122: 
        !          2123: @var{Additional C code}
        !          2124: @end example
        !          2125: 
        !          2126: Comments enclosed in @samp{/* @dots{} */} may appear in any of the sections.
        !          2127: 
        !          2128: @menu
        !          2129: * C Declarations::    Syntax and usage of the C declarations section.
        !          2130: * Bison Declarations::  Syntax and usage of the Bison declarations section.
        !          2131: * Grammar Rules::     Syntax and usage of the grammar rules section.
        !          2132: * C Code::            Syntax and usage of the additional C code section.
        !          2133: @end menu
        !          2134: 
        !          2135: @node C Declarations, Bison Declarations,  , Grammar Outline
        !          2136: @subsection The C Declarations Section
        !          2137: @cindex C declarations section
        !          2138: @cindex declarations, C
        !          2139: 
        !          2140: The @var{C declarations} section contains macro definitions and
        !          2141: declarations of functions and variables that are used in the actions in the
        !          2142: grammar rules.  These are copied to the beginning of the parser file so
        !          2143: that they precede the definition of @code{yyparse}.  You can use
        !          2144: @samp{#include} to get the declarations from a header file.  If you don't
        !          2145: need any C declarations, you may omit the @samp{%@{} and @samp{%@}}
        !          2146: delimiters that bracket this section.
        !          2147: 
        !          2148: @node Bison Declarations, Grammar Rules, C Declarations, Grammar Outline
        !          2149: @subsection The Bison Declarations Section
        !          2150: @cindex Bison declarations (introduction)
        !          2151: @cindex declarations, Bison (introduction)
        !          2152: 
        !          2153: The @var{Bison declarations} section contains declarations that define
        !          2154: terminal and nonterminal symbols, specify precedence, and so on.
        !          2155: In some simple grammars you may not need any declarations.
        !          2156: @xref{Declarations, ,Bison Declarations}.
        !          2157: 
        !          2158: @node Grammar Rules, C Code, Bison Declarations, Grammar Outline
        !          2159: @subsection The Grammar Rules Section
        !          2160: @cindex grammar rules section
        !          2161: @cindex rules section for grammar
        !          2162: 
        !          2163: The @dfn{grammar rules} section contains one or more Bison grammar
        !          2164: rules, and nothing else.  @xref{Rules, ,Syntax of Grammar Rules}.
        !          2165: 
        !          2166: There must always be at least one grammar rule, and the first
        !          2167: @samp{%%} (which precedes the grammar rules) may never be omitted even
        !          2168: if it is the first thing in the file.
        !          2169: 
        !          2170: @node C Code,  , Grammar Rules, Grammar Outline
        !          2171: @subsection The Additional C Code Section
        !          2172: @cindex additional C code section
        !          2173: @cindex C code, section for additional
        !          2174: 
        !          2175: The @var{additional C code} section is copied verbatim to the end of
        !          2176: the parser file, just as the @var{C declarations} section is copied to
        !          2177: the beginning.  This is the most convenient place to put anything
        !          2178: that you want to have in the parser file but which need not come before
        !          2179: the definition of @code{yyparse}.  For example, the definitions of
        !          2180: @code{yylex} and @code{yyerror} often go here.  @xref{Interface, ,Parser C-Language Interface}.
        !          2181: 
        !          2182: If the last section is empty, you may omit the @samp{%%} that separates it
        !          2183: from the grammar rules.
        !          2184: 
        !          2185: The Bison parser itself contains many static variables whose names start
        !          2186: with @samp{yy} and many macros whose names start with @samp{YY}.  It is a
        !          2187: good idea to avoid using any such names (except those documented in this
        !          2188: manual) in the additional C code section of the grammar file.
        !          2189: 
        !          2190: @node Symbols, Rules, Grammar Outline, Grammar File
        !          2191: @section Symbols, Terminal and Nonterminal
        !          2192: @cindex nonterminal symbol
        !          2193: @cindex terminal symbol
        !          2194: @cindex token type
        !          2195: @cindex symbol
        !          2196: 
        !          2197: @dfn{Symbols} in Bison grammars represent the grammatical classifications
        !          2198: of the language.
        !          2199: 
        !          2200: A @dfn{terminal symbol} (also known as a @dfn{token type}) represents a
        !          2201: class of syntactically equivalent tokens.  You use the symbol in grammar
        !          2202: rules to mean that a token in that class is allowed.  The symbol is
        !          2203: represented in the Bison parser by a numeric code, and the @code{yylex}
        !          2204: function returns a token type code to indicate what kind of token has been
        !          2205: read.  You don't need to know what the code value is; you can use the
        !          2206: symbol to stand for it.
        !          2207: 
        !          2208: A @dfn{nonterminal symbol} stands for a class of syntactically equivalent
        !          2209: groupings.  The symbol name is used in writing grammar rules.  By convention,
        !          2210: it should be all lower case.
        !          2211: 
        !          2212: Symbol names can contain letters, digits (not at the beginning),
        !          2213: underscores and periods.  Periods make sense only in nonterminals.
        !          2214: 
        !          2215: There are two ways of writing terminal symbols in the grammar:
        !          2216: 
        !          2217: @itemize @bullet
        !          2218: @item
        !          2219: A @dfn{named token type} is written with an identifier, like an
        !          2220: identifier in C.  By convention, it should be all upper case.  Each
        !          2221: such name must be defined with a Bison declaration such as
        !          2222: @code{%token}.  @xref{Token Decl, ,Token Type Names}.
        !          2223: 
        !          2224: @item
        !          2225: @cindex character token
        !          2226: @cindex literal token
        !          2227: @cindex single-character literal
        !          2228: A @dfn{character token type} (or @dfn{literal token}) is written in
        !          2229: the grammar using the same syntax used in C for character constants;
        !          2230: for example, @code{'+'} is a character token type.  A character token
        !          2231: type doesn't need to be declared unless you need to specify its
        !          2232: semantic value data type (@pxref{Value Type, ,Data Types of Semantic Values}), associativity, or
        !          2233: precedence (@pxref{Precedence, ,Operator Precedence}).
        !          2234: 
        !          2235: By convention, a character token type is used only to represent a
        !          2236: token that consists of that particular character.  Thus, the token
        !          2237: type @code{'+'} is used to represent the character @samp{+} as a
        !          2238: token.  Nothing enforces this convention, but if you depart from it,
        !          2239: your program will confuse other readers.
        !          2240: 
        !          2241: All the usual escape sequences used in character literals in C can be
        !          2242: used in Bison as well, but you must not use the null character as a
        !          2243: character literal because its ASCII code, zero, is the code
        !          2244: @code{yylex} returns for end-of-input (@pxref{Calling Convention, ,Calling Convention for @code{yylex}}).
        !          2245: @end itemize
        !          2246: 
        !          2247: How you choose to write a terminal symbol has no effect on its
        !          2248: grammatical meaning.  That depends only on where it appears in rules and
        !          2249: on when the parser function returns that symbol.
        !          2250: 
        !          2251: The value returned by @code{yylex} is always one of the terminal symbols
        !          2252: (or 0 for end-of-input).  Whichever way you write the token type in the
        !          2253: grammar rules, you write it the same way in the definition of @code{yylex}.
        !          2254: The numeric code for a character token type is simply the ASCII code for
        !          2255: the character, so @code{yylex} can use the identical character constant to
        !          2256: generate the requisite code.  Each named token type becomes a C macro in
        !          2257: the parser file, so @code{yylex} can use the name to stand for the code.
        !          2258: (This is why periods don't make sense in terminal symbols.)  
        !          2259: @xref{Calling Convention, ,Calling Convention for @code{yylex}}.
        !          2260: 
        !          2261: If @code{yylex} is defined in a separate file, you need to arrange for the
        !          2262: token-type macro definitions to be available there.  Use the @samp{-d}
        !          2263: option when you run Bison, so that it will write these macro definitions
        !          2264: into a separate header file @file{@var{name}.tab.h} which you can include
        !          2265: in the other source files that need it.  @xref{Invocation, ,Invoking Bison}.
        !          2266: 
        !          2267: The symbol @code{error} is a terminal symbol reserved for error recovery
        !          2268: (@pxref{Error Recovery}); you shouldn't use it for any other purpose.
        !          2269: In particular, @code{yylex} should never return this value.
        !          2270: 
        !          2271: @node Rules, Recursion, Symbols, Grammar File
        !          2272: @section Syntax of Grammar Rules
        !          2273: @cindex rule syntax
        !          2274: @cindex grammar rule syntax
        !          2275: @cindex syntax of grammar rules
        !          2276: 
        !          2277: A Bison grammar rule has the following general form:
        !          2278: 
        !          2279: @example
        !          2280: @var{result}: @var{components}@dots{}
        !          2281:         ;
        !          2282: @end example
        !          2283: 
        !          2284: @noindent
        !          2285: where @var{result} is the nonterminal symbol that this rule describes
        !          2286: and @var{components} are various terminal and nonterminal symbols that
        !          2287: are put together by this rule (@pxref{Symbols}).  
        !          2288: 
        !          2289: For example,
        !          2290: 
        !          2291: @example
        !          2292: @group
        !          2293: exp:      exp '+' exp
        !          2294:         ;
        !          2295: @end group
        !          2296: @end example
        !          2297: 
        !          2298: @noindent
        !          2299: says that two groupings of type @code{exp}, with a @samp{+} token in between,
        !          2300: can be combined into a larger grouping of type @code{exp}.
        !          2301: 
        !          2302: Whitespace in rules is significant only to separate symbols.  You can add
        !          2303: extra whitespace as you wish.
        !          2304: 
        !          2305: Scattered among the components can be @var{actions} that determine
        !          2306: the semantics of the rule.  An action looks like this:
        !          2307: 
        !          2308: @example
        !          2309: @{@var{C statements}@}
        !          2310: @end example
        !          2311: 
        !          2312: @noindent
        !          2313: Usually there is only one action and it follows the components.
        !          2314: @xref{Actions}.
        !          2315: 
        !          2316: @findex |
        !          2317: Multiple rules for the same @var{result} can be written separately or can
        !          2318: be joined with the vertical-bar character @samp{|} as follows:
        !          2319: 
        !          2320: @ifinfo
        !          2321: @example
        !          2322: @var{result}:   @var{rule1-components}@dots{}
        !          2323:         | @var{rule2-components}@dots{}
        !          2324:         @dots{}
        !          2325:         ;
        !          2326: @end example
        !          2327: @end ifinfo
        !          2328: @iftex
        !          2329: @example
        !          2330: @group
        !          2331: @var{result}:    @var{rule1-components}@dots{}
        !          2332:         | @var{rule2-components}@dots{}
        !          2333:         @dots{}
        !          2334:         ;
        !          2335: @end group
        !          2336: @end example
        !          2337: @end iftex
        !          2338: 
        !          2339: @noindent
        !          2340: They are still considered distinct rules even when joined in this way.
        !          2341: 
        !          2342: If @var{components} in a rule is empty, it means that @var{result} can
        !          2343: match the empty string.  For example, here is how to define a
        !          2344: comma-separated sequence of zero or more @code{exp} groupings:
        !          2345: 
        !          2346: @example
        !          2347: @group
        !          2348: expseq:   /* empty */
        !          2349:         | expseq1
        !          2350:         ;
        !          2351: @end group
        !          2352: 
        !          2353: @group
        !          2354: expseq1:  exp
        !          2355:         | expseq1 ',' exp
        !          2356:         ;
        !          2357: @end group
        !          2358: @end example
        !          2359: 
        !          2360: @noindent
        !          2361: It is customary to write a comment @samp{/* empty */} in each rule
        !          2362: with no components.
        !          2363: 
        !          2364: @node Recursion, Semantics, Rules, Grammar File
        !          2365: @section Recursive Rules
        !          2366: @cindex recursive rule
        !          2367: 
        !          2368: A rule is called @dfn{recursive} when its @var{result} nonterminal appears
        !          2369: also on its right hand side.  Nearly all Bison grammars need to use
        !          2370: recursion, because that is the only way to define a sequence of any number
        !          2371: of somethings.  Consider this recursive definition of a comma-separated
        !          2372: sequence of one or more expressions:
        !          2373: 
        !          2374: @example
        !          2375: @group
        !          2376: expseq1:  exp
        !          2377:         | expseq1 ',' exp
        !          2378:         ;
        !          2379: @end group
        !          2380: @end example
        !          2381: 
        !          2382: @cindex left recursion
        !          2383: @cindex right recursion
        !          2384: @noindent
        !          2385: Since the recursive use of @code{expseq1} is the leftmost symbol in the
        !          2386: right hand side, we call this @dfn{left recursion}.  By contrast, here
        !          2387: the same construct is defined using @dfn{right recursion}:
        !          2388: 
        !          2389: @example
        !          2390: @group
        !          2391: expseq1:  exp
        !          2392:         | exp ',' expseq1
        !          2393:         ;
        !          2394: @end group
        !          2395: @end example
        !          2396: 
        !          2397: @noindent
        !          2398: Any kind of sequence can be defined using either left recursion or
        !          2399: right recursion, but you should always use left recursion, because it
        !          2400: can parse a sequence of any number of elements with bounded stack
        !          2401: space.  Right recursion uses up space on the Bison stack in proportion
        !          2402: to the number of elements in the sequence, because all the elements
        !          2403: must be shifted onto the stack before the rule can be applied even
        !          2404: once.  @xref{Algorithm, ,The Bison Parser Algorithm }, for
        !          2405: further explanation of this.
        !          2406: 
        !          2407: @cindex mutual recursion
        !          2408: @dfn{Indirect} or @dfn{mutual} recursion occurs when the result of the
        !          2409: rule does not appear directly on its right hand side, but does appear
        !          2410: in rules for other nonterminals which do appear on its right hand
        !          2411: side.  
        !          2412: 
        !          2413: For example:
        !          2414: 
        !          2415: @example
        !          2416: @group
        !          2417: expr:     primary
        !          2418:         | primary '+' primary
        !          2419:         ;
        !          2420: @end group
        !          2421: 
        !          2422: @group
        !          2423: primary:  constant
        !          2424:         | '(' expr ')'
        !          2425:         ;
        !          2426: @end group
        !          2427: @end example
        !          2428: 
        !          2429: @noindent
        !          2430: defines two mutually-recursive nonterminals, since each refers to the
        !          2431: other.
        !          2432: 
        !          2433: @node Semantics, Declarations, Recursion, Grammar File
        !          2434: @section Defining Language Semantics
        !          2435: @cindex defining language semantics
        !          2436: @cindex language semantics, defining 
        !          2437: 
        !          2438: The grammar rules for a language determine only the syntax.  The semantics
        !          2439: are determined by the semantic values associated with various tokens and
        !          2440: groupings, and by the actions taken when various groupings are recognized.
        !          2441: 
        !          2442: For example, the calculator calculates properly because the value
        !          2443: associated with each expression is the proper number; it adds properly
        !          2444: because the action for the grouping @w{@samp{@var{x} + @var{y}}} is to add
        !          2445: the numbers associated with @var{x} and @var{y}.
        !          2446: 
        !          2447: @menu
        !          2448: * Value Type::        Specifying one data type for all semantic values.
        !          2449: * Multiple Types::    Specifying several alternative data types.
        !          2450: * Actions::           An action is the semantic definition of a grammar rule.
        !          2451: * Action Types::      Specifying data types for actions to operate on.
        !          2452: * Mid-Rule Actions::  Most actions go at the end of a rule.
        !          2453:                       This says when, why and how to use the exceptional
        !          2454:                         action in the middle of a rule.
        !          2455: @end menu
        !          2456: 
        !          2457: @node Value Type, Multiple Types,  , Semantics
        !          2458: @subsection Data Types of Semantic Values
        !          2459: @cindex semantic value type
        !          2460: @cindex value type, semantic
        !          2461: @cindex data types of semantic values
        !          2462: @cindex default data type
        !          2463: 
        !          2464: In a simple program it may be sufficient to use the same data type for
        !          2465: the semantic values of all language constructs.  This was true in the
        !          2466: RPN and infix calculator examples (@pxref{RPN Calc, ,Reverse Polish Notation Calculator}).
        !          2467: 
        !          2468: Bison's default is to use type @code{int} for all semantic values.  To
        !          2469: specify some other type, define @code{YYSTYPE} as a macro, like this:
        !          2470: 
        !          2471: @example
        !          2472: #define YYSTYPE double
        !          2473: @end example
        !          2474: 
        !          2475: @noindent
        !          2476: This macro definition must go in the C declarations section of the grammar
        !          2477: file (@pxref{Grammar Outline, ,Outline of a Bison Grammar}).
        !          2478: 
        !          2479: @node Multiple Types, Actions, Value Type, Semantics
        !          2480: @subsection More Than One Value Type
        !          2481: 
        !          2482: In most programs, you will need different data types for different kinds
        !          2483: of tokens and groupings.  For example, a numeric constant may need type
        !          2484: @code{int} or @code{long}, while a string constant needs type @code{char *},
        !          2485: and an identifier might need a pointer to an entry in the symbol table.
        !          2486: 
        !          2487: To use more than one data type for semantic values in one parser, Bison
        !          2488: requires you to do two things:
        !          2489: 
        !          2490: @itemize @bullet
        !          2491: @item
        !          2492: Specify the entire collection of possible data types, with the
        !          2493: @code{%union} Bison declaration (@pxref{Union Decl, ,The Collection of Value Types}).
        !          2494: 
        !          2495: @item
        !          2496: Choose one of those types for each symbol (terminal or nonterminal)
        !          2497: for which semantic values are used.  This is done for tokens with the
        !          2498: @code{%token} Bison declaration (@pxref{Token Decl, ,Token Type Names}) and for groupings
        !          2499: with the @code{%type} Bison declaration (@pxref{Type Decl, ,Nonterminal Symbols}).
        !          2500: @end itemize
        !          2501: 
        !          2502: @node Actions, Action Types, Multiple Types, Semantics
        !          2503: @subsection Actions
        !          2504: @cindex action
        !          2505: @vindex $$
        !          2506: @vindex $@var{n}
        !          2507: 
        !          2508: An action accompanies a syntactic rule and contains C code to be executed
        !          2509: each time an instance of that rule is recognized.  The task of most actions
        !          2510: is to compute a semantic value for the grouping built by the rule from the
        !          2511: semantic values associated with tokens or smaller groupings.
        !          2512: 
        !          2513: An action consists of C statements surrounded by braces, much like a
        !          2514: compound statement in C.  It can be placed at any position in the rule; it
        !          2515: is executed at that position.  Most rules have just one action at the end
        !          2516: of the rule, following all the components.  Actions in the middle of a rule
        !          2517: are tricky and used only for special purposes (@pxref{Mid-Rule Actions, ,Actions in Mid-Rule}).
        !          2518: 
        !          2519: The C code in an action can refer to the semantic values of the components
        !          2520: matched by the rule with the construct @code{$@var{n}}, which stands for
        !          2521: the value of the @var{n}th component.  The semantic value for the grouping
        !          2522: being constructed is @code{$$}.  (Bison translates both of these constructs
        !          2523: into array element references when it copies the actions into the parser
        !          2524: file.)
        !          2525: 
        !          2526: Here is a typical example:
        !          2527: 
        !          2528: @example
        !          2529: @group
        !          2530: exp:    @dots{}
        !          2531:         | exp '+' exp
        !          2532:             @{ $$ = $1 + $3; @}
        !          2533: @end group
        !          2534: @end example
        !          2535: 
        !          2536: @noindent
        !          2537: This rule constructs an @code{exp} from two smaller @code{exp} groupings
        !          2538: connected by a plus-sign token.  In the action, @code{$1} and @code{$3}
        !          2539: refer to the semantic values of the two component @code{exp} groupings,
        !          2540: which are the first and third symbols on the right hand side of the rule.
        !          2541: The sum is stored into @code{$$} so that it becomes the semantic value of
        !          2542: the addition-expression just recognized by the rule.  If there were a
        !          2543: useful semantic value associated with the @samp{+} token, it could be
        !          2544: referred to as @code{$2}.@refill
        !          2545: 
        !          2546: @cindex default action
        !          2547: If you don't specify an action for a rule, Bison supplies a default:
        !          2548: @w{@code{$$ = $1}.}  Thus, the value of the first symbol in the rule becomes
        !          2549: the value of the whole rule.  Of course, the default rule is valid only
        !          2550: if the two data types match.  There is no meaningful default action for
        !          2551: an empty rule; every empty rule must have an explicit action unless the
        !          2552: rule's value does not matter.
        !          2553: 
        !          2554: @code{$@var{n}} with @var{n} zero or negative is allowed for reference
        !          2555: to tokens and groupings on the stack @emph{before} those that match the
        !          2556: current rule.  This is a very risky practice, and to use it reliably
        !          2557: you must be certain of the context in which the rule is applied.  Here
        !          2558: is a case in which you can use this reliably:
        !          2559: 
        !          2560: @example
        !          2561: @group
        !          2562: foo:      expr bar '+' expr  @{ @dots{} @}
        !          2563:         | expr bar '-' expr  @{ @dots{} @}
        !          2564:         ;
        !          2565: @end group
        !          2566: 
        !          2567: @group
        !          2568: bar:      /* empty */
        !          2569:         @{ previous_expr = $0; @}
        !          2570:         ;
        !          2571: @end group
        !          2572: @end example
        !          2573: 
        !          2574: As long as @code{bar} is used only in the fashion shown here, @code{$0}
        !          2575: always refers to the @code{expr} which precedes @code{bar} in the
        !          2576: definition of @code{foo}.
        !          2577: 
        !          2578: @node Action Types, Mid-Rule Actions, Actions, Semantics
        !          2579: @subsection Data Types of Values in Actions
        !          2580: @cindex action data types
        !          2581: @cindex data types in actions
        !          2582: 
        !          2583: If you have chosen a single data type for semantic values, the @code{$$}
        !          2584: and @code{$@var{n}} constructs always have that data type.
        !          2585: 
        !          2586: If you have used @code{%union} to specify a variety of data types, then you
        !          2587: must declare a choice among these types for each terminal or nonterminal
        !          2588: symbol that can have a semantic value.  Then each time you use @code{$$} or
        !          2589: @code{$@var{n}}, its data type is determined by which symbol it refers to
        !          2590: in the rule.  In this example,@refill
        !          2591: 
        !          2592: @example
        !          2593: @group
        !          2594: exp:    @dots{}
        !          2595:         | exp '+' exp
        !          2596:             @{ $$ = $1 + $3; @}
        !          2597: @end group
        !          2598: @end example
        !          2599: 
        !          2600: @noindent
        !          2601: @code{$1} and @code{$3} refer to instances of @code{exp}, so they all
        !          2602: have the data type declared for the nonterminal symbol @code{exp}.  If
        !          2603: @code{$2} were used, it would have the data type declared for the
        !          2604: terminal symbol @code{'+'}, whatever that might be.@refill
        !          2605: 
        !          2606: Alternatively, you can specify the data type when you refer to the value,
        !          2607: by inserting @samp{<@var{type}>} after the @samp{$} at the beginning of the
        !          2608: reference.  For example, if you have defined types as shown here:
        !          2609: 
        !          2610: @example
        !          2611: @group
        !          2612: %union @{
        !          2613:   int itype;
        !          2614:   double dtype;
        !          2615: @}
        !          2616: @end group
        !          2617: @end example
        !          2618: 
        !          2619: @noindent
        !          2620: then you can write @code{$<itype>1} to refer to the first subunit of the
        !          2621: rule as an integer, or @code{$<dtype>1} to refer to it as a double.
        !          2622: 
        !          2623: @node Mid-Rule Actions,  , Action Types, Semantics
        !          2624: @subsection Actions in Mid-Rule
        !          2625: @cindex actions in mid-rule
        !          2626: @cindex mid-rule actions
        !          2627: 
        !          2628: Occasionally it is useful to put an action in the middle of a rule.
        !          2629: These actions are written just like usual end-of-rule actions, but they
        !          2630: are executed before the parser even recognizes the following components.
        !          2631: 
        !          2632: A mid-rule action may refer to the components preceding it using
        !          2633: @code{$@var{n}}, but it may not refer to subsequent components because
        !          2634: it is run before they are parsed.
        !          2635: 
        !          2636: The mid-rule action itself counts as one of the components of the rule.
        !          2637: This makes a difference when there is another action later in the same rule
        !          2638: (and usually there is another at the end): you have to count the actions
        !          2639: along with the symbols when working out which number @var{n} to use in
        !          2640: @code{$@var{n}}.
        !          2641: 
        !          2642: The mid-rule action can also have a semantic value.  The action can set
        !          2643: its value with an assignment to @code{$$}, and actions later in the rule
        !          2644: can refer to the value using @code{$@var{n}}.  Since there is no symbol
        !          2645: to name the action, there is no way to declare a data type for the value
        !          2646: in advance, so you must use the @samp{$<@dots{}>} construct to specify a
        !          2647: data type each time you refer to this value.
        !          2648: 
        !          2649: There is no way to set the value of the entire rule with a mid-rule
        !          2650: action, because assignments to @code{$$} do not have that effect.  The
        !          2651: only way to set the value for the entire rule is with an ordinary action
        !          2652: at the end of the rule.
        !          2653: 
        !          2654: Here is an example from a hypothetical compiler, handling a @code{let}
        !          2655: statement that looks like @samp{let (@var{variable}) @var{statement}} and
        !          2656: serves to create a variable named @var{variable} temporarily for the
        !          2657: duration of @var{statement}.  To parse this construct, we must put
        !          2658: @var{variable} into the symbol table while @var{statement} is parsed, then
        !          2659: remove it afterward.  Here is how it is done:
        !          2660: 
        !          2661: @example
        !          2662: @group
        !          2663: stmt:   LET '(' var ')'
        !          2664:                 @{ $<context>$ = push_context ();
        !          2665:                   declare_variable ($3); @}
        !          2666:         stmt    @{ $$ = $6;
        !          2667:                   pop_context ($<context>5); @}
        !          2668: @end group
        !          2669: @end example
        !          2670: 
        !          2671: @noindent
        !          2672: As soon as @samp{let (@var{variable})} has been recognized, the first
        !          2673: action is run.  It saves a copy of the current semantic context (the
        !          2674: list of accessible variables) as its semantic value, using alternative
        !          2675: @code{context} in the data-type union.  Then it calls
        !          2676: @code{declare_variable} to add the new variable to that list.  Once the
        !          2677: first action is finished, the embedded statement @code{stmt} can be
        !          2678: parsed.  Note that the mid-rule action is component number 5, so the
        !          2679: @samp{stmt} is component number 6.
        !          2680: 
        !          2681: After the embedded statement is parsed, its semantic value becomes the
        !          2682: value of the entire @code{let}-statement.  Then the semantic value from the
        !          2683: earlier action is used to restore the prior list of variables.  This
        !          2684: removes the temporary @code{let}-variable from the list so that it won't
        !          2685: appear to exist while the rest of the program is parsed.
        !          2686: 
        !          2687: Taking action before a rule is completely recognized often leads to
        !          2688: conflicts since the parser must commit to a parse in order to execute the
        !          2689: action.  For example, the following two rules, without mid-rule actions,
        !          2690: can coexist in a working parser because the parser can shift the open-brace
        !          2691: token and look at what follows before deciding whether there is a
        !          2692: declaration or not:
        !          2693: 
        !          2694: @example
        !          2695: @group
        !          2696: compound: '@{' declarations statements '@}'
        !          2697:         | '@{' statements '@}'
        !          2698:         ;
        !          2699: @end group
        !          2700: @end example
        !          2701: 
        !          2702: @noindent
        !          2703: But when we add a mid-rule action as follows, the rules become nonfunctional:
        !          2704: 
        !          2705: @example
        !          2706: @group
        !          2707: compound: @{ prepare_for_local_variables (); @}
        !          2708:           '@{' declarations statements '@}'
        !          2709: @end group
        !          2710: @group
        !          2711:         | '@{' statements '@}'
        !          2712:         ;
        !          2713: @end group
        !          2714: @end example
        !          2715: 
        !          2716: @noindent
        !          2717: Now the parser is forced to decide whether to run the mid-rule action
        !          2718: when it has read no farther than the open-brace.  In other words, it
        !          2719: must commit to using one rule or the other, without sufficient
        !          2720: information to do it correctly.  (The open-brace token is what is called
        !          2721: the @dfn{look-ahead} token at this time, since the parser is still
        !          2722: deciding what to do about it.  @xref{Look-Ahead, ,Look-Ahead Tokens}.)
        !          2723: 
        !          2724: You might think that you could correct the problem by putting identical
        !          2725: actions into the two rules, like this:
        !          2726: 
        !          2727: @example
        !          2728: @group
        !          2729: compound: @{ prepare_for_local_variables (); @}
        !          2730:           '@{' declarations statements '@}'
        !          2731:         | @{ prepare_for_local_variables (); @}
        !          2732:           '@{' statements '@}'
        !          2733:         ;
        !          2734: @end group
        !          2735: @end example
        !          2736: 
        !          2737: @noindent
        !          2738: But this does not help, because Bison does not realize that the two actions
        !          2739: are identical.  (Bison never tries to understand the C code in an action.)
        !          2740: 
        !          2741: If the grammar is such that a declaration can be distinguished from a
        !          2742: statement by the first token (which is true in C), then one solution which
        !          2743: does work is to put the action after the open-brace, like this:
        !          2744: 
        !          2745: @example
        !          2746: @group
        !          2747: compound: '@{' @{ prepare_for_local_variables (); @}
        !          2748:           declarations statements '@}'
        !          2749:         | '@{' statements '@}'
        !          2750:         ;
        !          2751: @end group
        !          2752: @end example
        !          2753: 
        !          2754: @noindent
        !          2755: Now the first token of the following declaration or statement,
        !          2756: which would in any case tell Bison which rule to use, can still do so.
        !          2757: 
        !          2758: Another solution is to bury the action inside a nonterminal symbol which
        !          2759: serves as a subroutine:
        !          2760: 
        !          2761: @example
        !          2762: @group
        !          2763: subroutine: /* empty */
        !          2764:           @{ prepare_for_local_variables (); @}
        !          2765:         ;
        !          2766: 
        !          2767: @end group
        !          2768: 
        !          2769: @group
        !          2770: compound: subroutine
        !          2771:           '@{' declarations statements '@}'
        !          2772:         | subroutine
        !          2773:           '@{' statements '@}'
        !          2774:         ;
        !          2775: @end group
        !          2776: @end example
        !          2777: 
        !          2778: @noindent
        !          2779: Now Bison can execute the action in the rule for @code{subroutine} without
        !          2780: deciding which rule for @code{compound} it will eventually use.  Note that
        !          2781: the action is now at the end of its rule.  Any mid-rule action can be
        !          2782: converted to an end-of-rule action in this way, and this is what Bison
        !          2783: actually does to implement mid-rule actions.
        !          2784: 
        !          2785: @node Declarations, Multiple Parsers, Semantics, Grammar File
        !          2786: @section Bison Declarations
        !          2787: @cindex declarations, Bison
        !          2788: @cindex Bison declarations
        !          2789: 
        !          2790: The @dfn{Bison declarations} section of a Bison grammar defines the symbols
        !          2791: used in formulating the grammar and the data types of semantic values.
        !          2792: @xref{Symbols}.
        !          2793: 
        !          2794: All token type names (but not single-character literal tokens such as
        !          2795: @code{'+'} and @code{'*'}) must be declared.  Nonterminal symbols must be
        !          2796: declared if you need to specify which data type to use for the semantic
        !          2797: value (@pxref{Multiple Types, ,More Than One Value Type}).
        !          2798: 
        !          2799: The first rule in the file also specifies the start symbol, by default.
        !          2800: If you want some other symbol to be the start symbol, you must declare
        !          2801: it explicitly (@pxref{Language and Grammar, ,Languages and Context-Free Grammars}).
        !          2802: 
        !          2803: @menu
        !          2804: * Token Decl::        Declaring terminal symbols.
        !          2805: * Precedence Decl::   Declaring terminals with precedence and associativity.
        !          2806: * Union Decl::        Declaring the set of all semantic value types.
        !          2807: * Type Decl::         Declaring the choice of type for a nonterminal symbol.
        !          2808: * Expect Decl::       Suppressing warnings about shift/reduce conflicts.
        !          2809: * Start Decl::        Specifying the start symbol.
        !          2810: * Pure Decl::         Requesting a reentrant parser.
        !          2811: * Decl Summary::      Table of all Bison declarations.
        !          2812: @end menu
        !          2813: 
        !          2814: @node Token Decl, Precedence Decl,  , Declarations
        !          2815: @subsection Token Type Names
        !          2816: @cindex declaring token type names
        !          2817: @cindex token type names, declaring
        !          2818: @findex %token
        !          2819: 
        !          2820: The basic way to declare a token type name (terminal symbol) is as follows:
        !          2821: 
        !          2822: @example
        !          2823: %token @var{name}
        !          2824: @end example
        !          2825: 
        !          2826: Bison will convert this into a @code{#define} directive in
        !          2827: the parser, so that the function @code{yylex} (if it is in this file)
        !          2828: can use the name @var{name} to stand for this token type's code.
        !          2829: 
        !          2830: Alternatively, you can use @code{%left}, @code{%right}, or @code{%nonassoc}
        !          2831: instead of @code{%token}, if you wish to specify precedence.
        !          2832: @xref{Precedence Decl, ,Operator Precedence}.
        !          2833: 
        !          2834: You can explicitly specify the numeric code for a token type by appending
        !          2835: an integer value in the field immediately following the token name:
        !          2836: 
        !          2837: @example
        !          2838: %token NUM 300
        !          2839: @end example
        !          2840: 
        !          2841: @noindent
        !          2842: It is generally best, however, to let Bison choose the numeric codes for
        !          2843: all token types.  Bison will automatically select codes that don't conflict
        !          2844: with each other or with ASCII characters.
        !          2845: 
        !          2846: In the event that the stack type is a union, you must augment the
        !          2847: @code{%token} or other token declaration to include the data type
        !          2848: alternative delimited by angle-brackets (@pxref{Multiple Types, ,More Than One Value Type}).  
        !          2849: 
        !          2850: For example:
        !          2851: 
        !          2852: @example
        !          2853: @group
        !          2854: %union @{              /* define stack type */
        !          2855:   double val;
        !          2856:   symrec *tptr;
        !          2857: @}
        !          2858: %token <val> NUM      /* define token NUM and its type */
        !          2859: @end group
        !          2860: @end example
        !          2861: 
        !          2862: @node Precedence Decl, Union Decl, Token Decl, Declarations
        !          2863: @subsection Operator Precedence
        !          2864: @cindex precedence declarations
        !          2865: @cindex declaring operator precedence
        !          2866: @cindex operator precedence, declaring
        !          2867: 
        !          2868: Use the @code{%left}, @code{%right} or @code{%nonassoc} declaration to
        !          2869: declare a token and specify its precedence and associativity, all at
        !          2870: once.  These are called @dfn{precedence declarations}.
        !          2871: @xref{Precedence, ,Operator Precedence}, for general information on operator precedence.
        !          2872: 
        !          2873: The syntax of a precedence declaration is the same as that of
        !          2874: @code{%token}: either
        !          2875: 
        !          2876: @example
        !          2877: %left @var{symbols}@dots{}
        !          2878: @end example
        !          2879: 
        !          2880: @noindent
        !          2881: or
        !          2882: 
        !          2883: @example
        !          2884: %left <@var{type}> @var{symbols}@dots{}
        !          2885: @end example
        !          2886: 
        !          2887: And indeed any of these declarations serves the purposes of @code{%token}.
        !          2888: But in addition, they specify the associativity and relative precedence for
        !          2889: all the @var{symbols}:
        !          2890: 
        !          2891: @itemize @bullet
        !          2892: @item
        !          2893: The associativity of an operator @var{op} determines how repeated uses
        !          2894: of the operator nest: whether @samp{@var{x} @var{op} @var{y} @var{op}
        !          2895: @var{z}} is parsed by grouping @var{x} with @var{y} first or by
        !          2896: grouping @var{y} with @var{z} first.  @code{%left} specifies
        !          2897: left-associativity (grouping @var{x} with @var{y} first) and
        !          2898: @code{%right} specifies right-associativity (grouping @var{y} with
        !          2899: @var{z} first).  @code{%nonassoc} specifies no associativity, which
        !          2900: means that @samp{@var{x} @var{op} @var{y} @var{op} @var{z}} is
        !          2901: considered a syntax error.
        !          2902: 
        !          2903: @item
        !          2904: The precedence of an operator determines how it nests with other operators.
        !          2905: All the tokens declared in a single precedence declaration have equal
        !          2906: precedence and nest together according to their associativity.
        !          2907: When two tokens declared in different precedence declarations associate,
        !          2908: the one declared later has the higher precedence and is grouped first.
        !          2909: @end itemize
        !          2910: 
        !          2911: @node Union Decl, Type Decl, Precedence Decl, Declarations
        !          2912: @subsection The Collection of Value Types
        !          2913: @cindex declaring value types
        !          2914: @cindex value types, declaring
        !          2915: @findex %union
        !          2916: 
        !          2917: The @code{%union} declaration specifies the entire collection of possible
        !          2918: data types for semantic values.  The keyword @code{%union} is followed by a
        !          2919: pair of braces containing the same thing that goes inside a @code{union} in
        !          2920: C.  
        !          2921: 
        !          2922: For example:
        !          2923: 
        !          2924: @example
        !          2925: @group
        !          2926: %union @{
        !          2927:   double val;
        !          2928:   symrec *tptr;
        !          2929: @}
        !          2930: @end group
        !          2931: @end example
        !          2932: 
        !          2933: @noindent
        !          2934: This says that the two alternative types are @code{double} and @code{symrec
        !          2935: *}.  They are given names @code{val} and @code{tptr}; these names are used
        !          2936: in the @code{%token} and @code{%type} declarations to pick one of the types
        !          2937: for a terminal or nonterminal symbol (@pxref{Type Decl, ,Nonterminal Symbols}).
        !          2938: 
        !          2939: Note that, unlike making a @code{union} declaration in C, you do not write
        !          2940: a semicolon after the closing brace.
        !          2941: 
        !          2942: @node Type Decl, Expect Decl, Union Decl, Declarations
        !          2943: @subsection Nonterminal Symbols
        !          2944: @cindex declaring value types, nonterminals
        !          2945: @cindex value types, nonterminals, declaring
        !          2946: @findex %type
        !          2947: 
        !          2948: @noindent
        !          2949: When you use @code{%union} to specify multiple value types, you must
        !          2950: declare the value type of each nonterminal symbol for which values are
        !          2951: used.  This is done with a @code{%type} declaration, like this:
        !          2952: 
        !          2953: @example
        !          2954: %type <@var{type}> @var{nonterminal}@dots{}
        !          2955: @end example
        !          2956: 
        !          2957: @noindent
        !          2958: Here @var{nonterminal} is the name of a nonterminal symbol, and @var{type}
        !          2959: is the name given in the @code{%union} to the alternative that you want
        !          2960: (@pxref{Union Decl, ,The Collection of Value Types}).  You can give any number of nonterminal symbols in
        !          2961: the same @code{%type} declaration, if they have the same value type.  Use
        !          2962: spaces to separate the symbol names.
        !          2963: 
        !          2964: @node Expect Decl, Start Decl, Type Decl, Declarations
        !          2965: @subsection Suppressing Conflict Warnings
        !          2966: @cindex suppressing conflict warnings
        !          2967: @cindex preventing warnings about conflicts
        !          2968: @cindex warnings, preventing
        !          2969: @cindex conflicts, suppressing warnings of
        !          2970: @findex %expect
        !          2971: 
        !          2972: Bison normally warns if there are any conflicts in the grammar
        !          2973: (@pxref{Shift/Reduce, ,Shift/Reduce Conflicts}), but most real grammars have harmless shift/reduce
        !          2974: conflicts which are resolved in a predictable way and would be difficult to
        !          2975: eliminate.  It is desirable to suppress the warning about these conflicts
        !          2976: unless the number of conflicts changes.  You can do this with the
        !          2977: @code{%expect} declaration.
        !          2978: 
        !          2979: The declaration looks like this:
        !          2980: 
        !          2981: @example
        !          2982: %expect @var{n}
        !          2983: @end example
        !          2984: 
        !          2985: Here @var{n} is a decimal integer.  The declaration says there should be no
        !          2986: warning if there are @var{n} shift/reduce conflicts and no reduce/reduce
        !          2987: conflicts.  The usual warning is given if there are either more or fewer
        !          2988: conflicts, or if there are any reduce/reduce conflicts.
        !          2989: 
        !          2990: In general, using @code{%expect} involves these steps:
        !          2991: 
        !          2992: @itemize @bullet
        !          2993: @item
        !          2994: Compile your grammar without @code{%expect}.  Use the @samp{-v} option
        !          2995: to get a verbose list of where the conflicts occur.  Bison will also
        !          2996: print the number of conflicts.
        !          2997: 
        !          2998: @item
        !          2999: Check each of the conflicts to make sure that Bison's default
        !          3000: resolution is what you really want.  If not, rewrite the grammar and
        !          3001: go back to the beginning.
        !          3002: 
        !          3003: @item
        !          3004: Add an @code{%expect} declaration, copying the number @var{n} from the
        !          3005: number which Bison printed.
        !          3006: @end itemize
        !          3007: 
        !          3008: Now Bison will stop annoying you about the conflicts you have checked, but
        !          3009: it will warn you again if changes in the grammar result in additional
        !          3010: conflicts.
        !          3011: 
        !          3012: @node Start Decl, Pure Decl, Expect Decl, Declarations
        !          3013: @subsection The Start-Symbol
        !          3014: @cindex declaring the start symbol
        !          3015: @cindex start symbol, declaring
        !          3016: @cindex default start symbol
        !          3017: @findex %start
        !          3018: 
        !          3019: Bison assumes by default that the start symbol for the grammar is the first
        !          3020: nonterminal specified in the grammar specification section.  The programmer
        !          3021: may override this restriction with the @code{%start} declaration as follows:
        !          3022: 
        !          3023: @example
        !          3024: %start @var{symbol}
        !          3025: @end example
        !          3026: 
        !          3027: @node Pure Decl, Decl Summary, Start Decl, Declarations
        !          3028: @subsection A Pure (Reentrant) Parser
        !          3029: @cindex reentrant parser
        !          3030: @cindex pure parser
        !          3031: @findex %pure_parser
        !          3032: 
        !          3033: A @dfn{reentrant} program is one which does not alter in the course of
        !          3034: execution; in other words, it consists entirely of @dfn{pure} (read-only)
        !          3035: code.  Reentrancy is important whenever asynchronous execution is possible;
        !          3036: for example, a nonreentrant program may not be safe to call from a signal
        !          3037: handler.  In systems with multiple threads of control, a nonreentrant
        !          3038: program must be called only within interlocks.
        !          3039: 
        !          3040: The Bison parser is not normally a reentrant program, because it uses
        !          3041: statically allocated variables for communication with @code{yylex}.  These
        !          3042: variables include @code{yylval} and @code{yylloc}.
        !          3043: 
        !          3044: The Bison declaration @code{%pure_parser} says that you want the parser
        !          3045: to be reentrant.  It looks like this:
        !          3046: 
        !          3047: @example
        !          3048: %pure_parser
        !          3049: @end example
        !          3050: 
        !          3051: The effect is that the two communication variables become local
        !          3052: variables in @code{yyparse}, and a different calling convention is used for
        !          3053: the lexical analyzer function @code{yylex}.  @xref{Pure Calling, ,Calling for Pure Parsers}, for the
        !          3054: details of this.  The variable @code{yynerrs} also becomes local in
        !          3055: @code{yyparse} (@pxref{Error Reporting, ,The Error Reporting Function @code{yyerror}}).  The convention for calling
        !          3056: @code{yyparse} itself is unchanged.
        !          3057: 
        !          3058: @node Decl Summary,  , Pure Decl, Declarations
        !          3059: @subsection Bison Declaration Summary
        !          3060: @cindex Bison declaration summary
        !          3061: @cindex declaration summary
        !          3062: @cindex summary, Bison declaration
        !          3063: 
        !          3064: Here is a summary of all Bison declarations:
        !          3065: 
        !          3066: @table @code
        !          3067: @item %union
        !          3068: Declare the collection of data types that semantic values may have
        !          3069: (@pxref{Union Decl, ,The Collection of Value Types}).
        !          3070: 
        !          3071: @item %token
        !          3072: Declare a terminal symbol (token type name) with no precedence
        !          3073: or associativity specified (@pxref{Token Decl, ,Token Type Names}).
        !          3074: 
        !          3075: @item %right
        !          3076: Declare a terminal symbol (token type name) that is right-associative
        !          3077: (@pxref{Precedence Decl, ,Operator Precedence}).
        !          3078: 
        !          3079: @item %left
        !          3080: Declare a terminal symbol (token type name) that is left-associative
        !          3081: (@pxref{Precedence Decl, ,Operator Precedence}).
        !          3082: 
        !          3083: @item %nonassoc
        !          3084: Declare a terminal symbol (token type name) that is nonassociative
        !          3085: (using it in a way that would be associative is a syntax error)
        !          3086: (@pxref{Precedence Decl, ,Operator Precedence}).
        !          3087: 
        !          3088: @item %type
        !          3089: Declare the type of semantic values for a nonterminal symbol
        !          3090: (@pxref{Type Decl, ,Nonterminal Symbols}).
        !          3091: 
        !          3092: @item %start
        !          3093: Specify the grammar's start symbol (@pxref{Start Decl, ,The Start-Symbol}).
        !          3094: 
        !          3095: @item %expect
        !          3096: Declare the expected number of shift-reduce conflicts
        !          3097: (@pxref{Expect Decl, ,Suppressing Conflict Warnings}).
        !          3098: 
        !          3099: @item %pure_parser
        !          3100: Request a pure (reentrant) parser program (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
        !          3101: @end table
        !          3102: 
        !          3103: @node Multiple Parsers,  , Declarations, Grammar File
        !          3104: @section Multiple Parsers in the Same Program
        !          3105: 
        !          3106: Most programs that use Bison parse only one language and therefore contain
        !          3107: only one Bison parser.  But what if you want to parse more than one
        !          3108: language with the same program?  Then you need to avoid a name conflict
        !          3109: between different definitions of @code{yyparse}, @code{yylval}, and so on.
        !          3110: 
        !          3111: The easy way to do this is to use the option @samp{-p @var{prefix}}
        !          3112: (@pxref{Invocation, ,Invoking Bison}).  This renames the interface functions and
        !          3113: variables of the Bison parser to start with @var{prefix} instead of
        !          3114: @samp{yy}.  You can use this to give each parser distinct names that do
        !          3115: not conflict.
        !          3116: 
        !          3117: The precise list of symbols renamed is @code{yyparse}, @code{yylex},
        !          3118: @code{yyerror}, @code{yylval}, @code{yychar} and @code{yydebug}.  For
        !          3119: example, if you use @samp{-p c}, the names become @code{cparse},
        !          3120: @code{clex}, and so on.
        !          3121: 
        !          3122: @strong{All the other variables and macros associated with Bison are not
        !          3123: renamed.} These others are not global; there is no conflict if the same
        !          3124: name is used in different parsers.  For example, @code{YYSTYPE} is not
        !          3125: renamed, but defining this in different ways in different parsers causes
        !          3126: no trouble (@pxref{Value Type, ,Data Types of Semantic Values}).
        !          3127: 
        !          3128: The @samp{-p} option works by adding macro definitions to the beginning
        !          3129: of the parser source file, defining @code{yyparse} as
        !          3130: @code{@var{prefix}parse}, and so on.  This effectively substitutes one
        !          3131: name for the other in the entire parser file.
        !          3132: 
        !          3133: @node Interface, Algorithm, Grammar File, Top
        !          3134: @chapter Parser C-Language Interface
        !          3135: @cindex C-language interface
        !          3136: @cindex interface
        !          3137: 
        !          3138: The Bison parser is actually a C function named @code{yyparse}.  Here we
        !          3139: describe the interface conventions of @code{yyparse} and the other
        !          3140: functions that it needs to use.
        !          3141: 
        !          3142: Keep in mind that the parser uses many C identifiers starting with
        !          3143: @samp{yy} and @samp{YY} for internal purposes.  If you use such an
        !          3144: identifier (aside from those in this manual) in an action or in additional
        !          3145: C code in the grammar file, you are likely to run into trouble.
        !          3146: 
        !          3147: @menu
        !          3148: * Parser Function::   How to call @code{yyparse} and what it returns.
        !          3149: * Lexical::           You must supply a function @code{yylex} 
        !          3150:                         which reads tokens.
        !          3151: * Error Reporting::   You must supply a function @code{yyerror}.
        !          3152: * Action Features::   Special features for use in actions.
        !          3153: @end menu
        !          3154: 
        !          3155: @node Parser Function, Lexical,  , Interface
        !          3156: @section The Parser Function @code{yyparse}
        !          3157: @findex yyparse
        !          3158: 
        !          3159: You call the function @code{yyparse} to cause parsing to occur.  This
        !          3160: function reads tokens, executes actions, and ultimately returns when it
        !          3161: encounters end-of-input or an unrecoverable syntax error.  You can also
        !          3162: write an action which directs @code{yyparse} to return immediately without
        !          3163: reading further.
        !          3164: 
        !          3165: The value returned by @code{yyparse} is 0 if parsing was successful (return
        !          3166: is due to end-of-input).
        !          3167: 
        !          3168: The value is 1 if parsing failed (return is due to a syntax error).
        !          3169: 
        !          3170: In an action, you can cause immediate return from @code{yyparse} by using
        !          3171: these macros:
        !          3172: 
        !          3173: @table @code
        !          3174: @item YYACCEPT
        !          3175: @findex YYACCEPT
        !          3176: Return immediately with value 0 (to report success).
        !          3177: 
        !          3178: @item YYABORT
        !          3179: @findex YYABORT
        !          3180: Return immediately with value 1 (to report failure).
        !          3181: @end table
        !          3182: 
        !          3183: @node Lexical, Error Reporting, Parser Function, Interface
        !          3184: @section The Lexical Analyzer Function @code{yylex}
        !          3185: @findex yylex
        !          3186: @cindex lexical analyzer
        !          3187: 
        !          3188: The @dfn{lexical analyzer} function, @code{yylex}, recognizes tokens from
        !          3189: the input stream and returns them to the parser.  Bison does not create
        !          3190: this function automatically; you must write it so that @code{yyparse} can
        !          3191: call it.  The function is sometimes referred to as a lexical scanner.
        !          3192: 
        !          3193: In simple programs, @code{yylex} is often defined at the end of the Bison
        !          3194: grammar file.  If @code{yylex} is defined in a separate source file, you
        !          3195: need to arrange for the token-type macro definitions to be available there.
        !          3196: To do this, use the @samp{-d} option when you run Bison, so that it will
        !          3197: write these macro definitions into a separate header file
        !          3198: @file{@var{name}.tab.h} which you can include in the other source files
        !          3199: that need it.  @xref{Invocation, ,Invoking Bison}.@refill
        !          3200: 
        !          3201: @menu
        !          3202: * Calling Convention::  How @code{yyparse} calls @code{yylex}.
        !          3203: * Token Values::      How @code{yylex} must return the semantic value
        !          3204:                         of the token it has read.
        !          3205: * Token Positions::   How @code{yylex} must return the text position
        !          3206:                         (line number, etc.) of the token, if the
        !          3207:                         actions want that.
        !          3208: * Pure Calling::      How the calling convention differs
        !          3209:                         in a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
        !          3210: @end menu
        !          3211: 
        !          3212: @node Calling Convention, Token Values,  , Lexical
        !          3213: @subsection Calling Convention for @code{yylex}
        !          3214: 
        !          3215: The value that @code{yylex} returns must be the numeric code for the type
        !          3216: of token it has just found, or 0 for end-of-input.
        !          3217: 
        !          3218: When a token is referred to in the grammar rules by a name, that name
        !          3219: in the parser file becomes a C macro whose definition is the proper
        !          3220: numeric code for that token type.  So @code{yylex} can use the name
        !          3221: to indicate that type.  @xref{Symbols}.
        !          3222: 
        !          3223: When a token is referred to in the grammar rules by a character literal,
        !          3224: the numeric code for that character is also the code for the token type.
        !          3225: So @code{yylex} can simply return that character code.  The null character
        !          3226: must not be used this way, because its code is zero and that is what
        !          3227: signifies end-of-input.
        !          3228: 
        !          3229: Here is an example showing these things:
        !          3230: 
        !          3231: @example
        !          3232: yylex ()
        !          3233: @{
        !          3234:   @dots{}
        !          3235:   if (c == EOF)     /* Detect end of file. */
        !          3236:     return 0;
        !          3237:   @dots{}
        !          3238:   if (c == '+' || c == '-')
        !          3239:     return c;      /* Assume token type for `+' is '+'. */
        !          3240:   @dots{}
        !          3241:   return INT;      /* Return the type of the token. */
        !          3242:   @dots{}
        !          3243: @}
        !          3244: @end example
        !          3245: 
        !          3246: @noindent
        !          3247: This interface has been designed so that the output from the @code{lex}
        !          3248: utility can be used without change as the definition of @code{yylex}.
        !          3249: 
        !          3250: @node Token Values, Token Positions, Calling Convention, Lexical
        !          3251: @subsection Semantic Values of Tokens
        !          3252: 
        !          3253: @vindex yylval
        !          3254: In an ordinary (nonreentrant) parser, the semantic value of the token must
        !          3255: be stored into the global variable @code{yylval}.  When you are using
        !          3256: just one data type for semantic values, @code{yylval} has that type.
        !          3257: Thus, if the type is @code{int} (the default), you might write this in
        !          3258: @code{yylex}:
        !          3259: 
        !          3260: @example
        !          3261: @group
        !          3262:   @dots{}
        !          3263:   yylval = value;  /* Put value onto Bison stack. */
        !          3264:   return INT;      /* Return the type of the token. */
        !          3265:   @dots{}
        !          3266: @end group
        !          3267: @end example
        !          3268: 
        !          3269: When you are using multiple data types, @code{yylval}'s type is a union
        !          3270: made from the @code{%union} declaration (@pxref{Union Decl, ,The Collection of Value Types}).  So when
        !          3271: you store a token's value, you must use the proper member of the union.
        !          3272: If the @code{%union} declaration looks like this:
        !          3273: 
        !          3274: @example
        !          3275: @group
        !          3276: %union @{
        !          3277:   int intval;
        !          3278:   double val;
        !          3279:   symrec *tptr;
        !          3280: @}
        !          3281: @end group
        !          3282: @end example
        !          3283: 
        !          3284: @noindent
        !          3285: then the code in @code{yylex} might look like this:
        !          3286: 
        !          3287: @example
        !          3288: @group
        !          3289:   @dots{}
        !          3290:   yylval.intval = value; /* Put value onto Bison stack. */
        !          3291:   return INT;          /* Return the type of the token. */
        !          3292:   @dots{}
        !          3293: @end group
        !          3294: @end example
        !          3295: 
        !          3296: @node Token Positions, Pure Calling, Token Values, Lexical
        !          3297: @subsection Textual Positions of Tokens
        !          3298: 
        !          3299: @vindex yylloc
        !          3300: If you are using the @samp{@@@var{n}}-feature (@pxref{Action Features, ,Special Features for Use in Actions}) in
        !          3301: actions to keep track of the textual locations of tokens and groupings,
        !          3302: then you must provide this information in @code{yylex}.  The function
        !          3303: @code{yyparse} expects to find the textual location of a token just parsed
        !          3304: in the global variable @code{yylloc}.  So @code{yylex} must store the
        !          3305: proper data in that variable.  The value of @code{yylloc} is a structure
        !          3306: and you need only initialize the members that are going to be used by the
        !          3307: actions.  The four members are called @code{first_line},
        !          3308: @code{first_column}, @code{last_line} and @code{last_column}.  Note that
        !          3309: the use of this feature makes the parser noticeably slower.
        !          3310: 
        !          3311: @tindex YYLTYPE
        !          3312: The data type of @code{yylloc} has the name @code{YYLTYPE}.
        !          3313: 
        !          3314: @node Pure Calling,  , Token Positions, Lexical
        !          3315: @subsection Calling for Pure Parsers
        !          3316: 
        !          3317: When you use the Bison declaration @code{%pure_parser} to request a pure,
        !          3318: reentrant parser, the global communication variables @code{yylval} and
        !          3319: @code{yylloc} cannot be used.  (@xref{Pure Decl, ,A Pure (Reentrant) Parser}.)  In such parsers the
        !          3320: two global variables are replaced by pointers passed as arguments to
        !          3321: @code{yylex}.  You must declare them as shown here, and pass the
        !          3322: information back by storing it through those pointers.
        !          3323: 
        !          3324: @example
        !          3325: yylex (lvalp, llocp)
        !          3326:      YYSTYPE *lvalp;
        !          3327:      YYLTYPE *llocp;
        !          3328: @{
        !          3329:   @dots{}
        !          3330:   *lvalp = value;  /* Put value onto Bison stack.  */
        !          3331:   return INT;      /* Return the type of the token.  */
        !          3332:   @dots{}
        !          3333: @}
        !          3334: @end example
        !          3335: 
        !          3336: If the grammar file does not use the @samp{@@} constructs to refer to
        !          3337: textual positions, then the type @code{YYLTYPE} will not be defined.  In
        !          3338: this case, omit the second argument; @code{yylex} will be called with
        !          3339: only one argument.
        !          3340: 
        !          3341: @node Error Reporting, Action Features, Lexical, Interface
        !          3342: @section The Error Reporting Function @code{yyerror}
        !          3343: @cindex error reporting function
        !          3344: @findex yyerror
        !          3345: @cindex parse error
        !          3346: @cindex syntax error
        !          3347: 
        !          3348: The Bison parser detects a @dfn{parse error} or @dfn{syntax error}
        !          3349: whenever it reads a token which cannot satisfy any syntax rule.  A
        !          3350: action in the grammar can also explicitly proclaim an error, using the
        !          3351: macro @code{YYERROR} (@pxref{Action Features, ,Special Features for Use in Actions}).
        !          3352: 
        !          3353: The Bison parser expects to report the error by calling an error
        !          3354: reporting function named @code{yyerror}, which you must supply.  It is
        !          3355: called by @code{yyparse} whenever a syntax error is found, and it
        !          3356: receives one argument.  For a parse error, the string is normally
        !          3357: @w{@code{"parse error"}}.
        !          3358: 
        !          3359: @findex YYERROR_VERBOSE
        !          3360: If you define the macro @code{YYERROR_VERBOSE} in the Bison declarations
        !          3361: section (@pxref{Bison Declarations, ,The Bison Declarations Section}), then Bison provides a more verbose
        !          3362: and specific error message string instead of just plain @w{@code{"parse
        !          3363: error"}}.  It doesn't matter what definition you use for
        !          3364: @code{YYERROR_VERBOSE}, just whether you define it.
        !          3365: 
        !          3366: The parser can detect one other kind of error: stack overflow.  This
        !          3367: happens when the input contains constructions that are very deeply
        !          3368: nested.  It isn't likely you will encounter this, since the Bison
        !          3369: parser extends its stack automatically up to a very large limit.  But
        !          3370: if overflow happens, @code{yyparse} calls @code{yyerror} in the usual
        !          3371: fashion, except that the argument string is @w{@code{"parser stack
        !          3372: overflow"}}.
        !          3373: 
        !          3374: The following definition suffices in simple programs:
        !          3375: 
        !          3376: @example
        !          3377: @group
        !          3378: yyerror (s)
        !          3379:      char *s;
        !          3380: @{
        !          3381: @end group
        !          3382: @group
        !          3383:   fprintf (stderr, "%s\n", s);
        !          3384: @}
        !          3385: @end group
        !          3386: @end example
        !          3387: 
        !          3388: After @code{yyerror} returns to @code{yyparse}, the latter will attempt
        !          3389: error recovery if you have written suitable error recovery grammar rules
        !          3390: (@pxref{Error Recovery}).  If recovery is impossible, @code{yyparse} will
        !          3391: immediately return 1.
        !          3392: 
        !          3393: @vindex yynerrs
        !          3394: The variable @code{yynerrs} contains the number of syntax errors
        !          3395: encountered so far.  Normally this variable is global; but if you
        !          3396: request a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}) then it is a local variable
        !          3397: which only the actions can access.
        !          3398: 
        !          3399: @node Action Features,  , Error Reporting, Interface
        !          3400: @section Special Features for Use in Actions
        !          3401: @cindex summary, action features
        !          3402: @cindex action features summary
        !          3403: 
        !          3404: Here is a table of Bison constructs, variables and macros that
        !          3405: are useful in actions.
        !          3406: 
        !          3407: @table @samp
        !          3408: @item $$
        !          3409: Acts like a variable that contains the semantic value for the
        !          3410: grouping made by the current rule.  @xref{Actions}.
        !          3411: 
        !          3412: @item $@var{n}
        !          3413: Acts like a variable that contains the semantic value for the
        !          3414: @var{n}th component of the current rule.  @xref{Actions}.
        !          3415: 
        !          3416: @item $<@var{typealt}>$
        !          3417: Like @code{$$} but specifies alternative @var{typealt} in the union
        !          3418: specified by the @code{%union} declaration.  @xref{Action Types, ,Data Types of Values in Actions}.
        !          3419: 
        !          3420: @item $<@var{typealt}>@var{n}
        !          3421: Like @code{$@var{n}} but specifies alternative @var{typealt} in the
        !          3422: union specified by the @code{%union} declaration.  
        !          3423: @xref{Action Types, ,Data Types of Values in Actions}.@refill
        !          3424: 
        !          3425: @item YYABORT;
        !          3426: Return immediately from @code{yyparse}, indicating failure.
        !          3427: @xref{Parser Function, ,The Parser Function @code{yyparse}}.
        !          3428: 
        !          3429: @item YYACCEPT;
        !          3430: Return immediately from @code{yyparse}, indicating success.
        !          3431: @xref{Parser Function, ,The Parser Function @code{yyparse}}.
        !          3432: 
        !          3433: @item YYBACKUP (@var{token}, @var{value});
        !          3434: @findex YYBACKUP
        !          3435: Unshift a token.  This macro is allowed only for rules that reduce
        !          3436: a single value, and only when there is no look-ahead token.
        !          3437: It installs a look-ahead token with token type @var{token} and
        !          3438: semantic value @var{value}; then it discards the value that was
        !          3439: going to be reduced by this rule.
        !          3440: 
        !          3441: If the macro is used when it is not valid, such as when there is
        !          3442: a look-ahead token already, then it reports a syntax error with
        !          3443: a message @samp{cannot back up} and performs ordinary error
        !          3444: recovery.
        !          3445: 
        !          3446: In either case, the rest of the action is not executed.
        !          3447: 
        !          3448: @item YYEMPTY
        !          3449: @vindex YYEMPTY
        !          3450: Value stored in @code{yychar} when there is no look-ahead token.
        !          3451: 
        !          3452: @item YYERROR;
        !          3453: @findex YYERROR
        !          3454: Cause an immediate syntax error.  This statement initiates error
        !          3455: recovery just as if the parser itself had detected an error; however, it
        !          3456: does not call @code{yyerror}, and does not print any message.  If you
        !          3457: want to print an error message, call @code{yyerror} explicitly before
        !          3458: the @samp{YYERROR;} statement.  @xref{Error Recovery}.
        !          3459: 
        !          3460: @item YYRECOVERING
        !          3461: This macro stands for an expression that has the value 1 when the parser
        !          3462: is recovering from a syntax error, and 0 the rest of the time.
        !          3463: @xref{Error Recovery}.
        !          3464: 
        !          3465: @item yychar
        !          3466: Variable containing the current look-ahead token.  (In a pure parser,
        !          3467: this is actually a local variable within @code{yyparse}.)  When there is
        !          3468: no look-ahead token, the value @code{YYEMPTY} is stored in the variable.
        !          3469: @xref{Look-Ahead, ,Look-Ahead Tokens}.
        !          3470: 
        !          3471: @item yyclearin;
        !          3472: Discard the current look-ahead token.  This is useful primarily in
        !          3473: error rules.  @xref{Error Recovery}.
        !          3474: 
        !          3475: @item yyerrok;
        !          3476: Resume generating error messages immediately for subsequent syntax
        !          3477: errors.  This is useful primarily in error rules.  
        !          3478: @xref{Error Recovery}.
        !          3479: 
        !          3480: @item @@@var{n}
        !          3481: @findex @@@var{n}
        !          3482: Acts like a structure variable containing information on the line
        !          3483: numbers and column numbers of the @var{n}th component of the current
        !          3484: rule.  The structure has four members, like this:
        !          3485: 
        !          3486: @example
        !          3487: struct @{
        !          3488:   int first_line, last_line;
        !          3489:   int first_column, last_column;
        !          3490: @};
        !          3491: @end example
        !          3492: 
        !          3493: Thus, to get the starting line number of the third component, use
        !          3494: @samp{@@3.first_line}.
        !          3495: 
        !          3496: In order for the members of this structure to contain valid information,
        !          3497: you must make @code{yylex} supply this information about each token.
        !          3498: If you need only certain members, then @code{yylex} need only fill in
        !          3499: those members.
        !          3500: 
        !          3501: The use of this feature makes the parser noticeably slower.
        !          3502: @end table
        !          3503: 
        !          3504: @node Algorithm, Error Recovery, Interface, Top
        !          3505: @chapter The Bison Parser Algorithm 
        !          3506: @cindex Bison parser algorithm 
        !          3507: @cindex algorithm of parser
        !          3508: @cindex shifting
        !          3509: @cindex reduction
        !          3510: @cindex parser stack
        !          3511: @cindex stack, parser
        !          3512: 
        !          3513: As Bison reads tokens, it pushes them onto a stack along with their
        !          3514: semantic values.  The stack is called the @dfn{parser stack}.  Pushing a
        !          3515: token is traditionally called @dfn{shifting}.
        !          3516: 
        !          3517: For example, suppose the infix calculator has read @samp{1 + 5 *}, with a
        !          3518: @samp{3} to come.  The stack will have four elements, one for each token
        !          3519: that was shifted.
        !          3520: 
        !          3521: But the stack does not always have an element for each token read.  When
        !          3522: the last @var{n} tokens and groupings shifted match the components of a
        !          3523: grammar rule, they can be combined according to that rule.  This is called
        !          3524: @dfn{reduction}.  Those tokens and groupings are replaced on the stack by a
        !          3525: single grouping whose symbol is the result (left hand side) of that rule.
        !          3526: Running the rule's action is part of the process of reduction, because this
        !          3527: is what computes the semantic value of the resulting grouping.
        !          3528: 
        !          3529: For example, if the infix calculator's parser stack contains this:
        !          3530: 
        !          3531: @example
        !          3532: 1 + 5 * 3
        !          3533: @end example
        !          3534: 
        !          3535: @noindent
        !          3536: and the next input token is a newline character, then the last three
        !          3537: elements can be reduced to 15 via the rule:
        !          3538: 
        !          3539: @example
        !          3540: expr: expr '*' expr;
        !          3541: @end example
        !          3542: 
        !          3543: @noindent
        !          3544: Then the stack contains just these three elements:
        !          3545: 
        !          3546: @example
        !          3547: 1 + 15
        !          3548: @end example
        !          3549: 
        !          3550: @noindent
        !          3551: At this point, another reduction can be made, resulting in the single value
        !          3552: 16.  Then the newline token can be shifted.
        !          3553: 
        !          3554: The parser tries, by shifts and reductions, to reduce the entire input down
        !          3555: to a single grouping whose symbol is the grammar's start-symbol
        !          3556: (@pxref{Language and Grammar, ,Languages and Context-Free Grammars}).
        !          3557: 
        !          3558: This kind of parser is known in the literature as a bottom-up parser.
        !          3559: 
        !          3560: @menu
        !          3561: * Look-Ahead::        Parser looks one token ahead when deciding what to do.
        !          3562: * Shift/Reduce::      Conflicts: when either shifting or reduction is valid.
        !          3563: * Precedence::        Operator precedence works by resolving conflicts.
        !          3564: * Contextual Precedence::  When an operator's precedence depends on context.
        !          3565: * Parser States::     The parser is a finite-state-machine with stack.
        !          3566: * Reduce/Reduce::     When two rules are applicable in the same situation.
        !          3567: * Mystery Conflicts::  Reduce/reduce conflicts that look unjustified.
        !          3568: * Stack Overflow::    What happens when stack gets full.  How to avoid it.
        !          3569: @end menu
        !          3570: 
        !          3571: @node Look-Ahead, Shift/Reduce,  , Algorithm
        !          3572: @section Look-Ahead Tokens
        !          3573: @cindex look-ahead token
        !          3574: 
        !          3575: The Bison parser does @emph{not} always reduce immediately as soon as the
        !          3576: last @var{n} tokens and groupings match a rule.  This is because such a
        !          3577: simple strategy is inadequate to handle most languages.  Instead, when a
        !          3578: reduction is possible, the parser sometimes ``looks ahead'' at the next
        !          3579: token in order to decide what to do.
        !          3580: 
        !          3581: When a token is read, it is not immediately shifted; first it becomes the
        !          3582: @dfn{look-ahead token}, which is not on the stack.  Now the parser can
        !          3583: perform one or more reductions of tokens and groupings on the stack, while
        !          3584: the look-ahead token remains off to the side.  When no more reductions
        !          3585: should take place, the look-ahead token is shifted onto the stack.  This
        !          3586: does not mean that all possible reductions have been done; depending on the
        !          3587: token type of the look-ahead token, some rules may choose to delay their
        !          3588: application.
        !          3589: 
        !          3590: Here is a simple case where look-ahead is needed.  These three rules define
        !          3591: expressions which contain binary addition operators and postfix unary
        !          3592: factorial operators (@samp{!}), and allow parentheses for grouping.
        !          3593: 
        !          3594: @example
        !          3595: @group
        !          3596: expr:     term '+' expr
        !          3597:         | term
        !          3598:         ;
        !          3599: @end group
        !          3600: 
        !          3601: @group
        !          3602: term:     '(' expr ')'
        !          3603:         | term '!'
        !          3604:         | NUMBER
        !          3605:         ;
        !          3606: @end group
        !          3607: @end example
        !          3608: 
        !          3609: Suppose that the tokens @w{@samp{1 + 2}} have been read and shifted; what
        !          3610: should be done?  If the following token is @samp{)}, then the first three
        !          3611: tokens must be reduced to form an @code{expr}.  This is the only valid
        !          3612: course, because shifting the @samp{)} would produce a sequence of symbols
        !          3613: @w{@code{term ')'}}, and no rule allows this.
        !          3614: 
        !          3615: If the following token is @samp{!}, then it must be shifted immediately so
        !          3616: that @w{@samp{2 !}} can be reduced to make a @code{term}.  If instead the
        !          3617: parser were to reduce before shifting, @w{@samp{1 + 2}} would become an
        !          3618: @code{expr}.  It would then be impossible to shift the @samp{!} because
        !          3619: doing so would produce on the stack the sequence of symbols @code{expr
        !          3620: '!'}.  No rule allows that sequence.
        !          3621: 
        !          3622: @vindex yychar
        !          3623: The current look-ahead token is stored in the variable @code{yychar}.
        !          3624: @xref{Action Features, ,Special Features for Use in Actions}.
        !          3625: 
        !          3626: @node Shift/Reduce, Precedence, Look-Ahead, Algorithm
        !          3627: @section Shift/Reduce Conflicts
        !          3628: @cindex conflicts
        !          3629: @cindex shift/reduce conflicts
        !          3630: @cindex dangling @code{else}
        !          3631: @cindex @code{else}, dangling
        !          3632: 
        !          3633: Suppose we are parsing a language which has if-then and if-then-else
        !          3634: statements, with a pair of rules like this:
        !          3635: 
        !          3636: @example
        !          3637: @group
        !          3638: if_stmt:
        !          3639:           IF expr THEN stmt
        !          3640:         | IF expr THEN stmt ELSE stmt
        !          3641:         ;
        !          3642: @end group
        !          3643: @end example
        !          3644: 
        !          3645: @noindent
        !          3646: Here we assume that @code{IF}, @code{THEN} and @code{ELSE} are
        !          3647: terminal symbols for specific keyword tokens.
        !          3648: 
        !          3649: When the @code{ELSE} token is read and becomes the look-ahead token, the
        !          3650: contents of the stack (assuming the input is valid) are just right for
        !          3651: reduction by the first rule.  But it is also legitimate to shift the
        !          3652: @code{ELSE}, because that would lead to eventual reduction by the second
        !          3653: rule.
        !          3654: 
        !          3655: This situation, where either a shift or a reduction would be valid, is
        !          3656: called a @dfn{shift/reduce conflict}.  Bison is designed to resolve
        !          3657: these conflicts by choosing to shift, unless otherwise directed by
        !          3658: operator precedence declarations.  To see the reason for this, let's
        !          3659: contrast it with the other alternative.
        !          3660: 
        !          3661: Since the parser prefers to shift the @code{ELSE}, the result is to attach
        !          3662: the else-clause to the innermost if-statement, making these two inputs
        !          3663: equivalent:
        !          3664: 
        !          3665: @example
        !          3666: if x then if y then win (); else lose;
        !          3667: 
        !          3668: if x then do; if y then win (); else lose; end;
        !          3669: @end example
        !          3670: 
        !          3671: But if the parser chose to reduce when possible rather than shift, the
        !          3672: result would be to attach the else-clause to the outermost if-statement,
        !          3673: making these two inputs equivalent:
        !          3674: 
        !          3675: @example
        !          3676: if x then if y then win (); else lose;
        !          3677: 
        !          3678: if x then do; if y then win (); end; else lose;
        !          3679: @end example
        !          3680: 
        !          3681: The conflict exists because the grammar as written is ambiguous: either
        !          3682: parsing of the simple nested if-statement is legitimate.  The established
        !          3683: convention is that these ambiguities are resolved by attaching the
        !          3684: else-clause to the innermost if-statement; this is what Bison accomplishes
        !          3685: by choosing to shift rather than reduce.  (It would ideally be cleaner to
        !          3686: write an unambiguous grammar, but that is very hard to do in this case.)
        !          3687: This particular ambiguity was first encountered in the specifications of
        !          3688: Algol 60 and is called the ``dangling @code{else}'' ambiguity.
        !          3689: 
        !          3690: To avoid warnings from Bison about predictable, legitimate shift/reduce
        !          3691: conflicts, use the @code{%expect @var{n}} declaration.  There will be no
        !          3692: warning as long as the number of shift/reduce conflicts is exactly @var{n}.
        !          3693: @xref{Expect Decl, ,Suppressing Conflict Warnings}.
        !          3694: 
        !          3695: The definition of @code{if_stmt} above is solely to blame for the
        !          3696: conflict, but the conflict does not actually appear without additional
        !          3697: rules.  Here is a complete Bison input file that actually manifests the
        !          3698: conflict:
        !          3699: 
        !          3700: @example
        !          3701: @group
        !          3702: %token IF THEN ELSE variable
        !          3703: %%
        !          3704: @end group
        !          3705: @group
        !          3706: stmt:     expr
        !          3707:         | if_stmt
        !          3708:         ;
        !          3709: @end group
        !          3710: 
        !          3711: @group
        !          3712: if_stmt:
        !          3713:           IF expr THEN stmt
        !          3714:         | IF expr THEN stmt ELSE stmt
        !          3715:         ;
        !          3716: @end group
        !          3717: 
        !          3718: expr:     variable
        !          3719:         ;
        !          3720: @end example
        !          3721: 
        !          3722: @node Precedence, Contextual Precedence, Shift/Reduce, Algorithm
        !          3723: @section Operator Precedence
        !          3724: @cindex operator precedence
        !          3725: @cindex precedence of operators
        !          3726: 
        !          3727: Another situation where shift/reduce conflicts appear is in arithmetic
        !          3728: expressions.  Here shifting is not always the preferred resolution; the
        !          3729: Bison declarations for operator precedence allow you to specify when to
        !          3730: shift and when to reduce.
        !          3731: 
        !          3732: @menu
        !          3733: * Why Precedence::    An example showing why precedence is needed.
        !          3734: * Using Precedence::  How to specify precedence in Bison grammars.
        !          3735: * Precedence Examples::  How these features are used in the previous example.
        !          3736: * How Precedence::    How they work.
        !          3737: @end menu
        !          3738: 
        !          3739: @node Why Precedence, Using Precedence,  , Precedence
        !          3740: @subsection When Precedence is Needed
        !          3741: 
        !          3742: Consider the following ambiguous grammar fragment (ambiguous because the
        !          3743: input @w{@samp{1 - 2 * 3}} can be parsed in two different ways):
        !          3744: 
        !          3745: @example
        !          3746: @group
        !          3747: expr:     expr '-' expr
        !          3748:         | expr '*' expr
        !          3749:         | expr '<' expr
        !          3750:         | '(' expr ')'
        !          3751:         @dots{}
        !          3752:         ;
        !          3753: @end group
        !          3754: @end example
        !          3755: 
        !          3756: @noindent
        !          3757: Suppose the parser has seen the tokens @samp{1}, @samp{-} and @samp{2};
        !          3758: should it reduce them via the rule for the addition operator?  It depends
        !          3759: on the next token.  Of course, if the next token is @samp{)}, we must
        !          3760: reduce; shifting is invalid because no single rule can reduce the token
        !          3761: sequence @w{@samp{- 2 )}} or anything starting with that.  But if the next
        !          3762: token is @samp{*} or @samp{<}, we have a choice: either shifting or
        !          3763: reduction would allow the parse to complete, but with different
        !          3764: results.
        !          3765: 
        !          3766: To decide which one Bison should do, we must consider the
        !          3767: results.  If the next operator token @var{op} is shifted, then it
        !          3768: must be reduced first in order to permit another opportunity to
        !          3769: reduce the sum.  The result is (in effect) @w{@samp{1 - (2
        !          3770: @var{op} 3)}}.  On the other hand, if the subtraction is reduced
        !          3771: before shifting @var{op}, the result is @w{@samp{(1 - 2) @var{op}
        !          3772: 3}}.  Clearly, then, the choice of shift or reduce should depend
        !          3773: on the relative precedence of the operators @samp{-} and
        !          3774: @var{op}: @samp{*} should be shifted first, but not @samp{<}.
        !          3775: 
        !          3776: @cindex associativity
        !          3777: What about input such as @w{@samp{1 - 2 - 5}}; should this be
        !          3778: @w{@samp{(1 - 2) - 5}} or should it be @w{@samp{1 - (2 - 5)}}?  For
        !          3779: most operators we prefer the former, which is called @dfn{left
        !          3780: association}.  The latter alternative, @dfn{right association}, is
        !          3781: desirable for assignment operators.  The choice of left or right
        !          3782: association is a matter of whether the parser chooses to shift or
        !          3783: reduce when the stack contains @w{@samp{1 - 2}} and the look-ahead
        !          3784: token is @samp{-}: shifting makes right-associativity.
        !          3785: 
        !          3786: @node Using Precedence, Precedence Examples, Why Precedence, Precedence
        !          3787: @subsection Specifying Operator Precedence
        !          3788: @findex %left
        !          3789: @findex %right
        !          3790: @findex %nonassoc
        !          3791: 
        !          3792: Bison allows you to specify these choices with the operator precedence
        !          3793: declarations @code{%left} and @code{%right}.  Each such declaration
        !          3794: contains a list of tokens, which are operators whose precedence and
        !          3795: associativity is being declared.  The @code{%left} declaration makes all
        !          3796: those operators left-associative and the @code{%right} declaration makes
        !          3797: them right-associative.  A third alternative is @code{%nonassoc}, which
        !          3798: declares that it is a syntax error to find the same operator twice ``in a
        !          3799: row''.
        !          3800: 
        !          3801: The relative precedence of different operators is controlled by the
        !          3802: order in which they are declared.  The first @code{%left} or
        !          3803: @code{%right} declaration in the file declares the operators whose
        !          3804: precedence is lowest, the next such declaration declares the operators
        !          3805: whose precedence is a little higher, and so on.
        !          3806: 
        !          3807: @node Precedence Examples, How Precedence, Using Precedence, Precedence
        !          3808: @subsection Precedence Examples
        !          3809: 
        !          3810: In our example, we would want the following declarations:
        !          3811: 
        !          3812: @example
        !          3813: %left '<'
        !          3814: %left '-'
        !          3815: %left '*'
        !          3816: @end example
        !          3817: 
        !          3818: In a more complete example, which supports other operators as well, we
        !          3819: would declare them in groups of equal precedence.  For example, @code{'+'} is
        !          3820: declared with @code{'-'}:
        !          3821: 
        !          3822: @example
        !          3823: %left '<' '>' '=' NE LE GE
        !          3824: %left '+' '-'
        !          3825: %left '*' '/'
        !          3826: @end example
        !          3827: 
        !          3828: @noindent
        !          3829: (Here @code{NE} and so on stand for the operators for ``not equal''
        !          3830: and so on.  We assume that these tokens are more than one character long
        !          3831: and therefore are represented by names, not character literals.)
        !          3832: 
        !          3833: @node How Precedence,  , Precedence Examples, Precedence
        !          3834: @subsection How Precedence Works
        !          3835: 
        !          3836: The first effect of the precedence declarations is to assign precedence
        !          3837: levels to the terminal symbols declared.  The second effect is to assign
        !          3838: precedence levels to certain rules: each rule gets its precedence from the
        !          3839: last terminal symbol mentioned in the components.  (You can also specify
        !          3840: explicitly the precedence of a rule.  @xref{Contextual Precedence, ,Context-Dependent Precedence}.)
        !          3841: 
        !          3842: Finally, the resolution of conflicts works by comparing the
        !          3843: precedence of the rule being considered with that of the
        !          3844: look-ahead token.  If the token's precedence is higher, the
        !          3845: choice is to shift.  If the rule's precedence is higher, the
        !          3846: choice is to reduce.  If they have equal precedence, the choice
        !          3847: is made based on the associativity of that precedence level.  The
        !          3848: verbose output file made by @samp{-v} (@pxref{Invocation, ,Invoking Bison}) says
        !          3849: how each conflict was resolved.
        !          3850: 
        !          3851: Not all rules and not all tokens have precedence.  If either the rule or
        !          3852: the look-ahead token has no precedence, then the default is to shift.
        !          3853: 
        !          3854: @node Contextual Precedence, Parser States, Precedence, Algorithm
        !          3855: @section Context-Dependent Precedence
        !          3856: @cindex context-dependent precedence
        !          3857: @cindex unary operator precedence
        !          3858: @cindex precedence, context-dependent
        !          3859: @cindex precedence, unary operator
        !          3860: @findex %prec
        !          3861: 
        !          3862: Often the precedence of an operator depends on the context.  This sounds
        !          3863: outlandish at first, but it is really very common.  For example, a minus
        !          3864: sign typically has a very high precedence as a unary operator, and a
        !          3865: somewhat lower precedence (lower than multiplication) as a binary operator.
        !          3866: 
        !          3867: The Bison precedence declarations, @code{%left}, @code{%right} and
        !          3868: @code{%nonassoc}, can only be used once for a given token; so a token has
        !          3869: only one precedence declared in this way.  For context-dependent
        !          3870: precedence, you need to use an additional mechanism: the @code{%prec}
        !          3871: modifier for rules.@refill
        !          3872: 
        !          3873: The @code{%prec} modifier declares the precedence of a particular rule by
        !          3874: specifying a terminal symbol whose precedence should be used for that rule.
        !          3875: It's not necessary for that symbol to appear otherwise in the rule.  The
        !          3876: modifier's syntax is:
        !          3877: 
        !          3878: @example
        !          3879: %prec @var{terminal-symbol}
        !          3880: @end example
        !          3881: 
        !          3882: @noindent
        !          3883: and it is written after the components of the rule.  Its effect is to
        !          3884: assign the rule the precedence of @var{terminal-symbol}, overriding
        !          3885: the precedence that would be deduced for it in the ordinary way.  The
        !          3886: altered rule precedence then affects how conflicts involving that rule
        !          3887: are resolved (@pxref{Precedence, ,Operator Precedence}).
        !          3888: 
        !          3889: Here is how @code{%prec} solves the problem of unary minus.  First, declare
        !          3890: a precedence for a fictitious terminal symbol named @code{UMINUS}.  There
        !          3891: are no tokens of this type, but the symbol serves to stand for its
        !          3892: precedence:
        !          3893: 
        !          3894: @example
        !          3895: @dots{}
        !          3896: %left '+' '-'
        !          3897: %left '*'
        !          3898: %left UMINUS
        !          3899: @end example
        !          3900: 
        !          3901: Now the precedence of @code{UMINUS} can be used in specific rules:
        !          3902: 
        !          3903: @example
        !          3904: @group
        !          3905: exp:    @dots{}
        !          3906:         | exp '-' exp
        !          3907:         @dots{}
        !          3908:         | '-' exp %prec UMINUS
        !          3909: @end group
        !          3910: @end example
        !          3911: 
        !          3912: @node Parser States, Reduce/Reduce, Contextual Precedence, Algorithm
        !          3913: @section Parser States
        !          3914: @cindex finite-state machine
        !          3915: @cindex parser state
        !          3916: @cindex state (of parser)
        !          3917: 
        !          3918: The function @code{yyparse} is implemented using a finite-state machine.
        !          3919: The values pushed on the parser stack are not simply token type codes; they
        !          3920: represent the entire sequence of terminal and nonterminal symbols at or
        !          3921: near the top of the stack.  The current state collects all the information
        !          3922: about previous input which is relevant to deciding what to do next.
        !          3923: 
        !          3924: Each time a look-ahead token is read, the current parser state together
        !          3925: with the type of look-ahead token are looked up in a table.  This table
        !          3926: entry can say, ``Shift the look-ahead token.''  In this case, it also
        !          3927: specifies the new parser state, which is pushed onto the top of the
        !          3928: parser stack.  Or it can say, ``Reduce using rule number @var{n}.''
        !          3929: This means that a certain number of tokens or groupings are taken off
        !          3930: the top of the stack, and replaced by one grouping.  In other words,
        !          3931: that number of states are popped from the stack, and one new state is
        !          3932: pushed.
        !          3933: 
        !          3934: There is one other alternative: the table can say that the look-ahead token
        !          3935: is erroneous in the current state.  This causes error processing to begin
        !          3936: (@pxref{Error Recovery}).
        !          3937: 
        !          3938: @node Reduce/Reduce, Mystery Conflicts, Parser States, Algorithm
        !          3939: @section Reduce/Reduce Conflicts
        !          3940: @cindex reduce/reduce conflict
        !          3941: @cindex conflicts, reduce/reduce
        !          3942: 
        !          3943: A reduce/reduce conflict occurs if there are two or more rules that apply
        !          3944: to the same sequence of input.  This usually indicates a serious error
        !          3945: in the grammar.
        !          3946: 
        !          3947: For example, here is an erroneous attempt to define a sequence
        !          3948: of zero or more @code{word} groupings.
        !          3949: 
        !          3950: @example
        !          3951: sequence: /* empty */
        !          3952:                 @{ printf ("empty sequence\n"); @}
        !          3953:         | maybeword
        !          3954:         | sequence word
        !          3955:                 @{ printf ("added word %s\n", $2); @}
        !          3956:         ;
        !          3957: 
        !          3958: maybeword: /* empty */
        !          3959:                 @{ printf ("empty maybeword\n"); @}
        !          3960:         | word
        !          3961:                 @{ printf ("single word %s\n", $1); @}
        !          3962:         ;
        !          3963: @end example
        !          3964: 
        !          3965: @noindent
        !          3966: The error is an ambiguity: there is more than one way to parse a single
        !          3967: @code{word} into a @code{sequence}.  It could be reduced to a
        !          3968: @code{maybeword} and then into a @code{sequence} via the second rule.
        !          3969: Alternatively, nothing-at-all could be reduced into a @code{sequence}
        !          3970: via the first rule, and this could be combined with the @code{word}
        !          3971: using the third rule for @code{sequence}.
        !          3972: 
        !          3973: There is also more than one way to reduce nothing-at-all into a
        !          3974: @code{sequence}.  This can be done directly via the first rule,
        !          3975: or indirectly via @code{maybeword} and then the second rule.
        !          3976: 
        !          3977: You might think that this is a distinction without a difference, because it
        !          3978: does not change whether any particular input is valid or not.  But it does
        !          3979: affect which actions are run.  One parsing order runs the second rule's
        !          3980: action; the other runs the first rule's action and the third rule's action.
        !          3981: In this example, the output of the program changes.
        !          3982: 
        !          3983: Bison resolves a reduce/reduce conflict by choosing to use the rule that
        !          3984: appears first in the grammar, but it is very risky to rely on this.  Every
        !          3985: reduce/reduce conflict must be studied and usually eliminated.  Here is the
        !          3986: proper way to define @code{sequence}:
        !          3987: 
        !          3988: @example
        !          3989: sequence: /* empty */
        !          3990:                 @{ printf ("empty sequence\n"); @}
        !          3991:         | sequence word
        !          3992:                 @{ printf ("added word %s\n", $2); @}
        !          3993:         ;
        !          3994: @end example
        !          3995: 
        !          3996: Here is another common error that yields a reduce/reduce conflict:
        !          3997: 
        !          3998: @example
        !          3999: sequence: /* empty */
        !          4000:         | sequence words
        !          4001:         | sequence redirects
        !          4002:         ;
        !          4003: 
        !          4004: words:    /* empty */
        !          4005:         | words word
        !          4006:         ;
        !          4007: 
        !          4008: redirects:/* empty */
        !          4009:         | redirects redirect
        !          4010:         ;
        !          4011: @end example
        !          4012: 
        !          4013: @noindent
        !          4014: The intention here is to define a sequence which can contain either
        !          4015: @code{word} or @code{redirect} groupings.  The individual definitions of
        !          4016: @code{sequence}, @code{words} and @code{redirects} are error-free, but the
        !          4017: three together make a subtle ambiguity: even an empty input can be parsed
        !          4018: in infinitely many ways!
        !          4019: 
        !          4020: Consider: nothing-at-all could be a @code{words}.  Or it could be two
        !          4021: @code{words} in a row, or three, or any number.  It could equally well be a
        !          4022: @code{redirects}, or two, or any number.  Or it could be a @code{words}
        !          4023: followed by three @code{redirects} and another @code{words}.  And so on.
        !          4024: 
        !          4025: Here are two ways to correct these rules.  First, to make it a single level
        !          4026: of sequence:
        !          4027: 
        !          4028: @example
        !          4029: sequence: /* empty */
        !          4030:         | sequence word
        !          4031:         | sequence redirect
        !          4032:         ;
        !          4033: @end example
        !          4034: 
        !          4035: Second, to prevent either a @code{words} or a @code{redirects}
        !          4036: from being empty:
        !          4037: 
        !          4038: @example
        !          4039: sequence: /* empty */
        !          4040:         | sequence words
        !          4041:         | sequence redirects
        !          4042:         ;
        !          4043: 
        !          4044: words:    word
        !          4045:         | words word
        !          4046:         ;
        !          4047: 
        !          4048: redirects:redirect
        !          4049:         | redirects redirect
        !          4050:         ;
        !          4051: @end example
        !          4052: 
        !          4053: @node Mystery Conflicts, Stack Overflow, Reduce/Reduce, Algorithm
        !          4054: @section Mysterious Reduce/Reduce Conflicts
        !          4055: 
        !          4056: Sometimes reduce/reduce conflicts can occur that don't look warranted.
        !          4057: Here is an example:
        !          4058: 
        !          4059: @example
        !          4060: @group
        !          4061: %token ID
        !          4062: 
        !          4063: %%
        !          4064: def:    param_spec return_spec ','
        !          4065:         ;
        !          4066: param_spec:
        !          4067:              type
        !          4068:         |    name_list ':' type
        !          4069:         ;
        !          4070: @end group
        !          4071: @group
        !          4072: return_spec:
        !          4073:              type
        !          4074:         |    name ':' type
        !          4075:         ;
        !          4076: @end group
        !          4077: @group
        !          4078: type:        ID
        !          4079:         ;
        !          4080: @end group
        !          4081: @group
        !          4082: name:        ID
        !          4083:         ;
        !          4084: name_list:
        !          4085:              name
        !          4086:         |    name ',' name_list
        !          4087:         ;
        !          4088: @end group
        !          4089: @end example
        !          4090: 
        !          4091: It would seem that this grammar can be parsed with only a single token
        !          4092: of look-ahead: when a @code{param_spec} is being read, an @code{ID} is 
        !          4093: a @code{name} if a comma or colon follows, or a @code{type} if another
        !          4094: @code{ID} follows.  In other words, this grammar is LR(1).
        !          4095: 
        !          4096: @cindex LR(1)
        !          4097: @cindex LALR(1)
        !          4098: However, Bison, like most parser generators, cannot actually handle all
        !          4099: LR(1) grammars.  In this grammar, two contexts, that after an @code{ID}
        !          4100: at the beginning of a @code{param_spec} and likewise at the beginning of
        !          4101: a @code{return_spec}, are similar enough that Bison assumes they are the
        !          4102: same.  They appear similar because the same set of rules would be
        !          4103: active---the rule for reducing to a @code{name} and that for reducing to
        !          4104: a @code{type}.  Bison is unable to determine at that stage of processing
        !          4105: that the rules would require different look-ahead tokens in the two
        !          4106: contexts, so it makes a single parser state for them both.  Combining
        !          4107: the two contexts causes a conflict later.  In parser terminology, this
        !          4108: occurrence means that the grammar is not LALR(1).
        !          4109: 
        !          4110: In general, it is better to fix deficiencies than to document them.  But
        !          4111: this particular deficiency is intrinsically hard to fix; parser
        !          4112: generators that can handle LR(1) grammars are hard to write and tend to
        !          4113: produce parsers that are very large.  In practice, Bison is more useful
        !          4114: as it is now.
        !          4115: 
        !          4116: When the problem arises, you can often fix it by identifying the two
        !          4117: parser states that are being confused, and adding something to make them
        !          4118: look distinct.  In the above example, adding one rule to
        !          4119: @code{return_spec} as follows makes the problem go away:
        !          4120: 
        !          4121: @example
        !          4122: @group
        !          4123: %token BOGUS
        !          4124: @dots{}
        !          4125: %%
        !          4126: @dots{}
        !          4127: return_spec:
        !          4128:              type
        !          4129:         |    name ':' type
        !          4130:         /* This rule is never used.  */
        !          4131:         |    ID BOGUS
        !          4132:         ;
        !          4133: @end group
        !          4134: @end example
        !          4135: 
        !          4136: This corrects the problem because it introduces the possibility of an
        !          4137: additional active rule in the context after the @code{ID} at the beginning of
        !          4138: @code{return_spec}.  This rule is not active in the corresponding context
        !          4139: in a @code{param_spec}, so the two contexts receive distinct parser states.
        !          4140: As long as the token @code{BOGUS} is never generated by @code{yylex},
        !          4141: the added rule cannot alter the way actual input is parsed.
        !          4142: 
        !          4143: In this particular example, there is another way to solve the problem:
        !          4144: rewrite the rule for @code{return_spec} to use @code{ID} directly
        !          4145: instead of via @code{name}.  This also causes the two confusing
        !          4146: contexts to have different sets of active rules, because the one for
        !          4147: @code{return_spec} activates the altered rule for @code{return_spec}
        !          4148: rather than the one for @code{name}.
        !          4149: 
        !          4150: @example
        !          4151: param_spec:
        !          4152:              type
        !          4153:         |    name_list ':' type
        !          4154:         ;
        !          4155: return_spec:
        !          4156:              type
        !          4157:         |    ID ':' type
        !          4158:         ;
        !          4159: @end example
        !          4160: 
        !          4161: @node Stack Overflow,  , Mystery Conflicts, Algorithm
        !          4162: @section Stack Overflow, and How to Avoid It
        !          4163: @cindex stack overflow
        !          4164: @cindex parser stack overflow
        !          4165: @cindex overflow of parser stack
        !          4166: 
        !          4167: The Bison parser stack can overflow if too many tokens are shifted and
        !          4168: not reduced.  When this happens, the parser function @code{yyparse}
        !          4169: returns a nonzero value, pausing only to call @code{yyerror} to report
        !          4170: the overflow.
        !          4171: 
        !          4172: @vindex YYMAXDEPTH
        !          4173: By defining the macro @code{YYMAXDEPTH}, you can control how deep the
        !          4174: parser stack can become before a stack overflow occurs.  Define the
        !          4175: macro with a value that is an integer.  This value is the maximum number
        !          4176: of tokens that can be shifted (and not reduced) before overflow.
        !          4177: It must be a constant expression whose value is known at compile time.
        !          4178: 
        !          4179: The stack space allowed is not necessarily allocated.  If you specify a
        !          4180: large value for @code{YYMAXDEPTH}, the parser actually allocates a small
        !          4181: stack at first, and then makes it bigger by stages as needed.  This
        !          4182: increasing allocation happens automatically and silently.  Therefore,
        !          4183: you do not need to make @code{YYMAXDEPTH} painfully small merely to save
        !          4184: space for ordinary inputs that do not need much stack.
        !          4185: 
        !          4186: @cindex default stack limit
        !          4187: The default value of @code{YYMAXDEPTH}, if you do not define it, is
        !          4188: 10000.
        !          4189: 
        !          4190: @vindex YYINITDEPTH
        !          4191: You can control how much stack is allocated initially by defining the
        !          4192: macro @code{YYINITDEPTH}.  This value too must be a compile-time
        !          4193: constant integer.  The default is 200.
        !          4194: 
        !          4195: @node Error Recovery, Context Dependency, Algorithm, Top
        !          4196: @chapter Error Recovery
        !          4197: @cindex error recovery
        !          4198: @cindex recovery from errors
        !          4199: 
        !          4200: It is not usually acceptable to have a program terminate on a parse
        !          4201: error.  For example, a compiler should recover sufficiently to parse the
        !          4202: rest of the input file and check it for errors; a calculator should accept
        !          4203: another expression.
        !          4204: 
        !          4205: In a simple interactive command parser where each input is one line, it may
        !          4206: be sufficient to allow @code{yyparse} to return 1 on error and have the
        !          4207: caller ignore the rest of the input line when that happens (and then call
        !          4208: @code{yyparse} again).  But this is inadequate for a compiler, because it
        !          4209: forgets all the syntactic context leading up to the error.  A syntax error
        !          4210: deep within a function in the compiler input should not cause the compiler
        !          4211: to treat the following line like the beginning of a source file.
        !          4212: 
        !          4213: @findex error
        !          4214: You can define how to recover from a syntax error by writing rules to
        !          4215: recognize the special token @code{error}.  This is a terminal symbol that
        !          4216: is always defined (you need not declare it) and reserved for error
        !          4217: handling.  The Bison parser generates an @code{error} token whenever a
        !          4218: syntax error happens; if you have provided a rule to recognize this token
        !          4219: in the current context, the parse can continue.  
        !          4220: 
        !          4221: For example:
        !          4222: 
        !          4223: @example
        !          4224: stmnts:  /* empty string */
        !          4225:         | stmnts '\n'
        !          4226:         | stmnts exp '\n'
        !          4227:         | stmnts error '\n'
        !          4228: @end example
        !          4229: 
        !          4230: The fourth rule in this example says that an error followed by a newline
        !          4231: makes a valid addition to any @code{stmnts}.
        !          4232: 
        !          4233: What happens if a syntax error occurs in the middle of an @code{exp}?  The
        !          4234: error recovery rule, interpreted strictly, applies to the precise sequence
        !          4235: of a @code{stmnts}, an @code{error} and a newline.  If an error occurs in
        !          4236: the middle of an @code{exp}, there will probably be some additional tokens
        !          4237: and subexpressions on the stack after the last @code{stmnts}, and there
        !          4238: will be tokens to read before the next newline.  So the rule is not
        !          4239: applicable in the ordinary way.
        !          4240: 
        !          4241: But Bison can force the situation to fit the rule, by discarding part of
        !          4242: the semantic context and part of the input.  First it discards states and
        !          4243: objects from the stack until it gets back to a state in which the
        !          4244: @code{error} token is acceptable.  (This means that the subexpressions
        !          4245: already parsed are discarded, back to the last complete @code{stmnts}.)  At
        !          4246: this point the @code{error} token can be shifted.  Then, if the old
        !          4247: look-ahead token is not acceptable to be shifted next, the parser reads
        !          4248: tokens and discards them until it finds a token which is acceptable.  In
        !          4249: this example, Bison reads and discards input until the next newline
        !          4250: so that the fourth rule can apply.
        !          4251: 
        !          4252: The choice of error rules in the grammar is a choice of strategies for
        !          4253: error recovery.  A simple and useful strategy is simply to skip the rest of
        !          4254: the current input line or current statement if an error is detected:
        !          4255: 
        !          4256: @example
        !          4257: stmnt: error ';'  /* on error, skip until ';' is read */
        !          4258: @end example
        !          4259: 
        !          4260: It is also useful to recover to the matching close-delimiter of an
        !          4261: opening-delimiter that has already been parsed.  Otherwise the
        !          4262: close-delimiter will probably appear to be unmatched, and generate another,
        !          4263: spurious error message:
        !          4264: 
        !          4265: @example
        !          4266: primary:  '(' expr ')'
        !          4267:         | '(' error ')'
        !          4268:         @dots{}
        !          4269:         ;
        !          4270: @end example
        !          4271: 
        !          4272: Error recovery strategies are necessarily guesses.  When they guess wrong,
        !          4273: one syntax error often leads to another.  In the above example, the error
        !          4274: recovery rule guesses that an error is due to bad input within one
        !          4275: @code{stmnt}.  Suppose that instead a spurious semicolon is inserted in the
        !          4276: middle of a valid @code{stmnt}.  After the error recovery rule recovers
        !          4277: from the first error, another syntax error will be found straightaway,
        !          4278: since the text following the spurious semicolon is also an invalid
        !          4279: @code{stmnt}.
        !          4280: 
        !          4281: To prevent an outpouring of error messages, the parser will output no error
        !          4282: message for another syntax error that happens shortly after the first; only
        !          4283: after three consecutive input tokens have been successfully shifted will
        !          4284: error messages resume.
        !          4285: 
        !          4286: Note that rules which accept the @code{error} token may have actions, just
        !          4287: as any other rules can.
        !          4288: 
        !          4289: @findex yyerrok
        !          4290: You can make error messages resume immediately by using the macro
        !          4291: @code{yyerrok} in an action.  If you do this in the error rule's action, no
        !          4292: error messages will be suppressed.  This macro requires no arguments;
        !          4293: @samp{yyerrok;} is a valid C statement.
        !          4294: 
        !          4295: @findex yyclearin
        !          4296: The previous look-ahead token is reanalyzed immediately after an error.  If
        !          4297: this is unacceptable, then the macro @code{yyclearin} may be used to clear
        !          4298: this token.  Write the statement @samp{yyclearin;} in the error rule's
        !          4299: action.
        !          4300: 
        !          4301: For example, suppose that on a parse error, an error handling routine is
        !          4302: called that advances the input stream to some point where parsing should
        !          4303: once again commence.  The next symbol returned by the lexical scanner is
        !          4304: probably correct.  The previous look-ahead token ought to be discarded
        !          4305: with @samp{yyclearin;}.
        !          4306: 
        !          4307: @vindex YYRECOVERING
        !          4308: The macro @code{YYRECOVERING} stands for an expression that has the
        !          4309: value 1 when the parser is recovering from a syntax error, and 0 the
        !          4310: rest of the time.  A value of 1 indicates that error messages are
        !          4311: currently suppressed for new syntax errors.
        !          4312: 
        !          4313: @node Context Dependency, Debugging, Error Recovery, Top
        !          4314: @chapter Handling Context Dependencies
        !          4315: 
        !          4316: The Bison paradigm is to parse tokens first, then group them into larger
        !          4317: syntactic units.  In many languages, the meaning of a token is affected by
        !          4318: its context.  Although this violates the Bison paradigm, certain techniques
        !          4319: (known as @dfn{kludges}) may enable you to write Bison parsers for such
        !          4320: languages.
        !          4321: 
        !          4322: @menu
        !          4323: * Semantic Tokens::   Token parsing can depend on the semantic context.
        !          4324: * Lexical Tie-ins::   Token parsing can depend on the syntactic context.
        !          4325: * Tie-in Recovery::   Lexical tie-ins have implications for how
        !          4326:                         error recovery rules must be written.
        !          4327: @end menu
        !          4328: 
        !          4329: (Actually, ``kludge'' means any technique that gets its job done but is
        !          4330: neither clean nor robust.)
        !          4331: 
        !          4332: @node Semantic Tokens, Lexical Tie-ins,  , Context Dependency
        !          4333: @section Semantic Info in Token Types
        !          4334: 
        !          4335: The C language has a context dependency: the way an identifier is used
        !          4336: depends on what its current meaning is.  For example, consider this:
        !          4337: 
        !          4338: @example
        !          4339: foo (x);
        !          4340: @end example
        !          4341: 
        !          4342: This looks like a function call statement, but if @code{foo} is a typedef
        !          4343: name, then this is actually a declaration of @code{x}.  How can a Bison
        !          4344: parser for C decide how to parse this input?
        !          4345: 
        !          4346: The method used in GNU C is to have two different token types,
        !          4347: @code{IDENTIFIER} and @code{TYPENAME}.  When @code{yylex} finds an
        !          4348: identifier, it looks up the current declaration of the identifier in order
        !          4349: to decide which token type to return: @code{TYPENAME} if the identifier is
        !          4350: declared as a typedef, @code{IDENTIFIER} otherwise.
        !          4351: 
        !          4352: The grammar rules can then express the context dependency by the choice of
        !          4353: token type to recognize.  @code{IDENTIFIER} is accepted as an expression,
        !          4354: but @code{TYPENAME} is not.  @code{TYPENAME} can start a declaration, but
        !          4355: @code{IDENTIFIER} cannot.  In contexts where the meaning of the identifier
        !          4356: is @emph{not} significant, such as in declarations that can shadow a
        !          4357: typedef name, either @code{TYPENAME} or @code{IDENTIFIER} is
        !          4358: accepted---there is one rule for each of the two token types.
        !          4359: 
        !          4360: This technique is simple to use if the decision of which kinds of
        !          4361: identifiers to allow is made at a place close to where the identifier is
        !          4362: parsed.  But in C this is not always so: C allows a declaration to
        !          4363: redeclare a typedef name provided an explicit type has been specified
        !          4364: earlier:
        !          4365: 
        !          4366: @example
        !          4367: typedef int foo, bar, lose;
        !          4368: static foo (bar);        /* @r{redeclare @code{bar} as static variable} */
        !          4369: static int foo (lose);   /* @r{redeclare @code{foo} as function} */
        !          4370: @end example
        !          4371: 
        !          4372: Unfortunately, the name being declared is separated from the declaration
        !          4373: construct itself by a complicated syntactic structure---the ``declarator''.
        !          4374: 
        !          4375: As a result, the part of Bison parser for C needs to be duplicated, with
        !          4376: all the nonterminal names changed: once for parsing a declaration in which
        !          4377: a typedef name can be redefined, and once for parsing a declaration in
        !          4378: which that can't be done.  Here is a part of the duplication, with actions
        !          4379: omitted for brevity:
        !          4380: 
        !          4381: @example
        !          4382: initdcl:
        !          4383:           declarator maybeasm '='
        !          4384:           init
        !          4385:         | declarator maybeasm
        !          4386:         ;
        !          4387: 
        !          4388: notype_initdcl:
        !          4389:           notype_declarator maybeasm '='
        !          4390:           init
        !          4391:         | notype_declarator maybeasm
        !          4392:         ;
        !          4393: @end example
        !          4394: 
        !          4395: @noindent
        !          4396: Here @code{initdcl} can redeclare a typedef name, but @code{notype_initdcl}
        !          4397: cannot.  The distinction between @code{declarator} and
        !          4398: @code{notype_declarator} is the same sort of thing.
        !          4399: 
        !          4400: There is some similarity between this technique and a lexical tie-in
        !          4401: (described next), in that information which alters the lexical analysis is
        !          4402: changed during parsing by other parts of the program.  The difference is
        !          4403: here the information is global, and is used for other purposes in the
        !          4404: program.  A true lexical tie-in has a special-purpose flag controlled by
        !          4405: the syntactic context.
        !          4406: 
        !          4407: @node Lexical Tie-ins, Tie-in Recovery, Semantic Tokens, Context Dependency
        !          4408: @section Lexical Tie-ins
        !          4409: @cindex lexical tie-in
        !          4410: 
        !          4411: One way to handle context-dependency is the @dfn{lexical tie-in}: a flag
        !          4412: which is set by Bison actions, whose purpose is to alter the way tokens are
        !          4413: parsed.
        !          4414: 
        !          4415: For example, suppose we have a language vaguely like C, but with a special
        !          4416: construct @samp{hex (@var{hex-expr})}.  After the keyword @code{hex} comes
        !          4417: an expression in parentheses in which all integers are hexadecimal.  In
        !          4418: particular, the token @samp{a1b} must be treated as an integer rather than
        !          4419: as an identifier if it appears in that context.  Here is how you can do it:
        !          4420: 
        !          4421: @example
        !          4422: @group
        !          4423: %@{
        !          4424: int hexflag;
        !          4425: %@}
        !          4426: %%
        !          4427: @dots{}
        !          4428: @end group
        !          4429: @group
        !          4430: expr:   IDENTIFIER
        !          4431:         | constant
        !          4432:         | HEX '('
        !          4433:                 @{ hexflag = 1; @}
        !          4434:           expr ')'
        !          4435:                 @{ hexflag = 0;
        !          4436:                    $$ = $4; @}
        !          4437:         | expr '+' expr
        !          4438:                 @{ $$ = make_sum ($1, $3); @}
        !          4439:         @dots{}
        !          4440:         ;
        !          4441: @end group
        !          4442: 
        !          4443: @group
        !          4444: constant:
        !          4445:           INTEGER
        !          4446:         | STRING
        !          4447:         ;
        !          4448: @end group
        !          4449: @end example
        !          4450: 
        !          4451: @noindent
        !          4452: Here we assume that @code{yylex} looks at the value of @code{hexflag}; when
        !          4453: it is nonzero, all integers are parsed in hexadecimal, and tokens starting
        !          4454: with letters are parsed as integers if possible.
        !          4455: 
        !          4456: The declaration of @code{hexflag} shown in the C declarations section of
        !          4457: the parser file is needed to make it accessible to the actions 
        !          4458: (@pxref{C Declarations, ,The C Declarations Section}).  You must also write the code in @code{yylex}
        !          4459: to obey the flag.
        !          4460: 
        !          4461: @node Tie-in Recovery,  , Lexical Tie-ins, Context Dependency
        !          4462: @section Lexical Tie-ins and Error Recovery
        !          4463: 
        !          4464: Lexical tie-ins make strict demands on any error recovery rules you have.
        !          4465: @xref{Error Recovery}.
        !          4466: 
        !          4467: The reason for this is that the purpose of an error recovery rule is to
        !          4468: abort the parsing of one construct and resume in some larger construct.
        !          4469: For example, in C-like languages, a typical error recovery rule is to skip
        !          4470: tokens until the next semicolon, and then start a new statement, like this:
        !          4471: 
        !          4472: @example
        !          4473: stmt:   expr ';'
        !          4474:         | IF '(' expr ')' stmt @{ @dots{} @}
        !          4475:         @dots{}
        !          4476:         error ';'
        !          4477:                 @{ hexflag = 0; @}
        !          4478:         ;
        !          4479: @end example
        !          4480: 
        !          4481: If there is a syntax error in the middle of a @samp{hex (@var{expr})}
        !          4482: construct, this error rule will apply, and then the action for the
        !          4483: completed @samp{hex (@var{expr})} will never run.  So @code{hexflag} would
        !          4484: remain set for the entire rest of the input, or until the next @code{hex}
        !          4485: keyword, causing identifiers to be misinterpreted as integers.
        !          4486: 
        !          4487: To avoid this problem the error recovery rule itself clears @code{hexflag}.
        !          4488: 
        !          4489: There may also be an error recovery rule that works within expressions.
        !          4490: For example, there could be a rule which applies within parentheses
        !          4491: and skips to the close-parenthesis:
        !          4492: 
        !          4493: @example
        !          4494: @group
        !          4495: expr:   @dots{}
        !          4496:         | '(' expr ')'
        !          4497:                 @{ $$ = $2; @}
        !          4498:         | '(' error ')'
        !          4499:         @dots{}
        !          4500: @end group
        !          4501: @end example
        !          4502: 
        !          4503: If this rule acts within the @code{hex} construct, it is not going to abort
        !          4504: that construct (since it applies to an inner level of parentheses within
        !          4505: the construct).  Therefore, it should not clear the flag: the rest of
        !          4506: the @code{hex} construct should be parsed with the flag still in effect.
        !          4507: 
        !          4508: What if there is an error recovery rule which might abort out of the
        !          4509: @code{hex} construct or might not, depending on circumstances?  There is no
        !          4510: way you can write the action to determine whether a @code{hex} construct is
        !          4511: being aborted or not.  So if you are using a lexical tie-in, you had better
        !          4512: make sure your error recovery rules are not of this kind.  Each rule must
        !          4513: be such that you can be sure that it always will, or always won't, have to
        !          4514: clear the flag.
        !          4515: 
        !          4516: @node Debugging, Invocation, Context Dependency, Top
        !          4517: @chapter Debugging Your Parser
        !          4518: @findex YYDEBUG
        !          4519: @findex yydebug
        !          4520: @cindex debugging
        !          4521: @cindex tracing the parser
        !          4522: 
        !          4523: If a Bison grammar compiles properly but doesn't do what you want when it
        !          4524: runs, the @code{yydebug} parser-trace feature can help you figure out why.
        !          4525: 
        !          4526: To enable compilation of trace facilities, you must define the macro
        !          4527: @code{YYDEBUG} when you compile the parser.  You could use
        !          4528: @samp{-DYYDEBUG=1} as a compiler option or you could put @samp{#define
        !          4529: YYDEBUG 1} in the C declarations section of the grammar file 
        !          4530: (@pxref{C Declarations, ,The C Declarations Section}).  Alternatively, use the @samp{-t} option when
        !          4531: you run Bison (@pxref{Invocation, ,Invoking Bison}).  We always define @code{YYDEBUG} so that
        !          4532: debugging is always possible.
        !          4533: 
        !          4534: The trace facility uses @code{stderr}, so you must add @w{@code{#include
        !          4535: <stdio.h>}} to the C declarations section unless it is already there.
        !          4536: 
        !          4537: Once you have compiled the program with trace facilities, the way to
        !          4538: request a trace is to store a nonzero value in the variable @code{yydebug}.
        !          4539: You can do this by making the C code do it (in @code{main}, perhaps), or
        !          4540: you can alter the value with a C debugger.
        !          4541: 
        !          4542: Each step taken by the parser when @code{yydebug} is nonzero produces a
        !          4543: line or two of trace information, written on @code{stderr}.  The trace
        !          4544: messages tell you these things:
        !          4545: 
        !          4546: @itemize @bullet
        !          4547: @item
        !          4548: Each time the parser calls @code{yylex}, what kind of token was read.
        !          4549: 
        !          4550: @item
        !          4551: Each time a token is shifted, the depth and complete contents of the
        !          4552: state stack (@pxref{Parser States}).
        !          4553: 
        !          4554: @item
        !          4555: Each time a rule is reduced, which rule it is, and the complete contents
        !          4556: of the state stack afterward.
        !          4557: @end itemize
        !          4558: 
        !          4559: To make sense of this information, it helps to refer to the listing file
        !          4560: produced by the Bison @samp{-v} option (@pxref{Invocation, ,Invoking Bison}).  This file
        !          4561: shows the meaning of each state in terms of positions in various rules, and
        !          4562: also what each state will do with each possible input token.  As you read
        !          4563: the successive trace messages, you can see that the parser is functioning
        !          4564: according to its specification in the listing file.  Eventually you will
        !          4565: arrive at the place where something undesirable happens, and you will see
        !          4566: which parts of the grammar are to blame.
        !          4567: 
        !          4568: The parser file is a C program and you can use C debuggers on it, but it's
        !          4569: not easy to interpret what it is doing.  The parser function is a
        !          4570: finite-state machine interpreter, and aside from the actions it executes
        !          4571: the same code over and over.  Only the values of variables show where in
        !          4572: the grammar it is working.
        !          4573: 
        !          4574: @findex YYPRINT
        !          4575: The debugging information normally gives the token type of each token
        !          4576: read, but not its semantic value.  You can optionally define a macro
        !          4577: named @code{YYPRINT} to provide a way to print the value.  If you define
        !          4578: @code{YYPRINT}, it should take three arguments.  The parser will pass a
        !          4579: standard I/O stream, the numeric code for the token type, and the token
        !          4580: value (from @code{yylval}).
        !          4581: 
        !          4582: Here is an example of @code{YYPRINT} suitable for the multi-function
        !          4583: calculator (@pxref{Mfcalc Decl, ,Declarations for @code{mfcalc}}):
        !          4584: 
        !          4585: @smallexample
        !          4586: #define YYPRINT(file, type, value)   yyprint (file, type, value)
        !          4587: 
        !          4588: static void
        !          4589: yyprint (file, type, value)
        !          4590:      FILE *file;
        !          4591:      int type;
        !          4592:      YYSTYPE value;
        !          4593: @{
        !          4594:   if (type == VAR)
        !          4595:     fprintf (file, " %s", value.tptr->name);
        !          4596:   else if (type == NUM)
        !          4597:     fprintf (file, " %d", value.val);
        !          4598: @}
        !          4599: @end smallexample
        !          4600: 
        !          4601: @node Invocation, Table of Symbols, Debugging, Top
        !          4602: @chapter Invoking Bison
        !          4603: @cindex invoking Bison
        !          4604: @cindex Bison invocation
        !          4605: @cindex options for invoking Bison
        !          4606: 
        !          4607: The usual way to invoke Bison is as follows:
        !          4608: 
        !          4609: @example
        !          4610: bison @var{infile}
        !          4611: @end example
        !          4612: 
        !          4613: Here @var{infile} is the grammar file name, which usually ends in
        !          4614: @samp{.y}.  The parser file's name is made by replacing the @samp{.y}
        !          4615: with @samp{.tab.c}.  Thus, the @samp{bison foo.y} filename yields
        !          4616: @file{foo.tab.c}, and the @samp{bison hack/foo.y} filename yields
        !          4617: @file{hack/foo.tab.c}.@refill
        !          4618: 
        !          4619: @menu
        !          4620: * Bison Options::     All the options described in detail, 
        !          4621:                        in alphabetical order by short options.
        !          4622: * Option Cross Key::  Alphabetical list of long options.
        !          4623: * VMS Invocation::    Bison command syntax on VMS.
        !          4624: @end menu
        !          4625: 
        !          4626: @node Bison Options, Option Cross Key,  , Invocation
        !          4627: @section Bison Options
        !          4628: 
        !          4629: Bison supports both traditional single-letter options and mnemonic long
        !          4630: option names.  Long option names are indicated with @samp{--} instead of
        !          4631: @samp{-}.  Abbreviations for option names are allowed as long as they
        !          4632: are unique.  When a long option takes an argument, like
        !          4633: @samp{--file-prefix}, connect the option name and the argument with
        !          4634: @samp{=}.
        !          4635: 
        !          4636: Here is a list of options that can be used with Bison, alphabetized by
        !          4637: short option.  It is followed by a cross key alphabetized by long
        !          4638: option.
        !          4639: 
        !          4640: @table @samp
        !          4641: @item -b @var{file-prefix}
        !          4642: @itemx --file-prefix=@var{prefix}
        !          4643: Specify a prefix to use for all Bison output file names.  The names are
        !          4644: chosen as if the input file were named @file{@var{prefix}.c}.
        !          4645: 
        !          4646: @item -d
        !          4647: @itemx --defines
        !          4648: Write an extra output file containing macro definitions for the token
        !          4649: type names defined in the grammar and the semantic value type
        !          4650: @code{YYSTYPE}, as well as a few @code{extern} variable declarations.
        !          4651: 
        !          4652: If the parser output file is named @file{@var{name}.c} then this file
        !          4653: is named @file{@var{name}.h}.@refill
        !          4654: 
        !          4655: This output file is essential if you wish to put the definition of
        !          4656: @code{yylex} in a separate source file, because @code{yylex} needs to
        !          4657: be able to refer to token type codes and the variable
        !          4658: @code{yylval}.  @xref{Token Values, ,Semantic Values of Tokens}.@refill
        !          4659: 
        !          4660: @item -l
        !          4661: @itemx --no-lines
        !          4662: Don't put any @code{#line} preprocessor commands in the parser file.
        !          4663: Ordinarily Bison puts them in the parser file so that the C compiler
        !          4664: and debuggers will associate errors with your source file, the
        !          4665: grammar file.  This option causes them to associate errors with the
        !          4666: parser file, treating it an independent source file in its own right.
        !          4667: 
        !          4668: @item -o @var{outfile}
        !          4669: @itemx --output-file=@var{outfile}
        !          4670: Specify the name @var{outfile} for the parser file.
        !          4671: 
        !          4672: The other output files' names are constructed from @var{outfile}
        !          4673: as described under the @samp{-v} and @samp{-d} switches.
        !          4674: 
        !          4675: @item -p @var{prefix}
        !          4676: @itemx --name-prefix=@var{prefix}
        !          4677: Rename the external symbols used in the parser so that they start with
        !          4678: @var{prefix} instead of @samp{yy}.  The precise list of symbols renamed
        !          4679: is @code{yyparse}, @code{yylex}, @code{yyerror}, @code{yylval},
        !          4680: @code{yychar} and @code{yydebug}.
        !          4681: 
        !          4682: For example, if you use @samp{-p c}, the names become @code{cparse},
        !          4683: @code{clex}, and so on.
        !          4684: 
        !          4685: @xref{Multiple Parsers, ,Multiple Parsers in the Same Program}.
        !          4686: 
        !          4687: @item -t
        !          4688: @itemx --debug
        !          4689: Output a definition of the macro @code{YYDEBUG} into the parser file,
        !          4690: so that the debugging facilities are compiled.  @xref{Debugging, ,Debugging Your Parser}.
        !          4691: 
        !          4692: @item -v
        !          4693: @itemx --verbose
        !          4694: Write an extra output file containing verbose descriptions of the
        !          4695: parser states and what is done for each type of look-ahead token in
        !          4696: that state.
        !          4697: 
        !          4698: This file also describes all the conflicts, both those resolved by
        !          4699: operator precedence and the unresolved ones.
        !          4700: 
        !          4701: The file's name is made by removing @samp{.tab.c} or @samp{.c} from
        !          4702: the parser output file name, and adding @samp{.output} instead.@refill
        !          4703: 
        !          4704: Therefore, if the input file is @file{foo.y}, then the parser file is
        !          4705: called @file{foo.tab.c} by default.  As a consequence, the verbose
        !          4706: output file is called @file{foo.output}.@refill
        !          4707: 
        !          4708: @item -V
        !          4709: @itemx --version
        !          4710: Print the version number of Bison and exit.
        !          4711: 
        !          4712: @item -h
        !          4713: @itemx --help
        !          4714: Print a summary of the command-line options to Bison and exit.
        !          4715: 
        !          4716: @need 1750
        !          4717: @item -y
        !          4718: @itemx --yacc
        !          4719: @itemx --fixed-output-files
        !          4720: Equivalent to @samp{-o y.tab.c}; the parser output file is called
        !          4721: @file{y.tab.c}, and the other outputs are called @file{y.output} and
        !          4722: @file{y.tab.h}.  The purpose of this switch is to imitate Yacc's output
        !          4723: file name conventions.  Thus, the following shell script can substitute
        !          4724: for Yacc:@refill
        !          4725: 
        !          4726: @example
        !          4727: bison -y $*
        !          4728: @end example
        !          4729: @end table
        !          4730: 
        !          4731: @node Option Cross Key, VMS Invocation, Bison Options, Invocation
        !          4732: @section Option Cross Key
        !          4733: 
        !          4734: Here is a list of options, alphabetized by long option, to help you find
        !          4735: the corresponding short option.
        !          4736: 
        !          4737: @tex
        !          4738: \def\leaderfill{\leaders\hbox to 1em{\hss.\hss}\hfill}
        !          4739: 
        !          4740: {\tt
        !          4741: \line{ --debug \leaderfill -t}
        !          4742: \line{ --defines \leaderfill -d}
        !          4743: \line{ --file-prefix \leaderfill -b}
        !          4744: \line{ --fixed-output-files \leaderfill -y}
        !          4745: \line{ --help \leaderfill -h}
        !          4746: \line{ --name-prefix \leaderfill -p}
        !          4747: \line{ --no-lines \leaderfill -l}
        !          4748: \line{ --output-file \leaderfill -o}
        !          4749: \line{ --verbose \leaderfill -v}
        !          4750: \line{ --version \leaderfill -V}
        !          4751: \line{ --yacc \leaderfill -y}
        !          4752: }
        !          4753: @end tex
        !          4754: 
        !          4755: @ifinfo
        !          4756: @example
        !          4757: --debug                               -t
        !          4758: --defines                             -d
        !          4759: --file-prefix=@var{prefix}                  -b @var{file-prefix}
        !          4760: --fixed-output-files --yacc           -y
        !          4761: --help                                -h
        !          4762: --name-prefix                         -p
        !          4763: --no-lines                            -l
        !          4764: --output-file=@var{outfile}                 -o @var{outfile}
        !          4765: --verbose                             -v
        !          4766: --version                             -V
        !          4767: @end example
        !          4768: @end ifinfo
        !          4769: 
        !          4770: @node VMS Invocation,  , Option Cross Key, Invocation
        !          4771: @section Invoking Bison under VMS
        !          4772: @cindex invoking Bison under VMS
        !          4773: @cindex VMS
        !          4774: 
        !          4775: The command line syntax for Bison on VMS is a variant of the usual
        !          4776: Bison command syntax---adapted to fit VMS conventions.
        !          4777: 
        !          4778: To find the VMS equivalent for any Bison option, start with the long
        !          4779: option, and substitute a @samp{/} for the leading @samp{--}, and
        !          4780: substitute a @samp{_} for each @samp{-} in the name of the long option.
        !          4781: For example, the following invocation under VMS:
        !          4782: 
        !          4783: @example
        !          4784: bison /debug/name_prefix=bar foo.y
        !          4785: @end example
        !          4786: 
        !          4787: @noindent
        !          4788: is equivalent to the following command under POSIX.
        !          4789: 
        !          4790: @example
        !          4791: bison --debug --name-prefix=bar foo.y
        !          4792: @end example
        !          4793: 
        !          4794: The VMS file system does not permit filenames such as
        !          4795: @file{foo.tab.c}.  In the above example, the output file
        !          4796: would instead be named @file{foo_tab.c}.
        !          4797: 
        !          4798: @node Table of Symbols, Glossary, Invocation, Top
        !          4799: @appendix Bison Symbols
        !          4800: @cindex Bison symbols, table of
        !          4801: @cindex symbols in Bison, table of
        !          4802: 
        !          4803: @table @code
        !          4804: @item error
        !          4805: A token name reserved for error recovery.  This token may be used in
        !          4806: grammar rules so as to allow the Bison parser to recognize an error in
        !          4807: the grammar without halting the process.  In effect, a sentence
        !          4808: containing an error may be recognized as valid.  On a parse error, the
        !          4809: token @code{error} becomes the current look-ahead token.  Actions
        !          4810: corresponding to @code{error} are then executed, and the look-ahead
        !          4811: token is reset to the token that originally caused the violation.
        !          4812: @xref{Error Recovery}.
        !          4813: 
        !          4814: @item YYABORT
        !          4815: Macro to pretend that an unrecoverable syntax error has occurred, by
        !          4816: making @code{yyparse} return 1 immediately.  The error reporting
        !          4817: function @code{yyerror} is not called.  @xref{Parser Function, ,The Parser Function @code{yyparse}}.
        !          4818: 
        !          4819: @item YYACCEPT
        !          4820: Macro to pretend that a complete utterance of the language has been
        !          4821: read, by making @code{yyparse} return 0 immediately.  
        !          4822: @xref{Parser Function, ,The Parser Function @code{yyparse}}.
        !          4823: 
        !          4824: @item YYBACKUP
        !          4825: Macro to discard a value from the parser stack and fake a look-ahead
        !          4826: token.  @xref{Action Features, ,Special Features for Use in Actions}.
        !          4827: 
        !          4828: @item YYERROR
        !          4829: Macro to pretend that a syntax error has just been detected: call
        !          4830: @code{yyerror} and then perform normal error recovery if possible
        !          4831: (@pxref{Error Recovery}), or (if recovery is impossible) make
        !          4832: @code{yyparse} return 1.  @xref{Error Recovery}.
        !          4833: 
        !          4834: @item YYERROR_VERBOSE
        !          4835: Macro that you define with @code{#define} in the Bison declarations
        !          4836: section to request verbose, specific error message strings when
        !          4837: @code{yyerror} is called.
        !          4838: 
        !          4839: @item YYINITDEPTH
        !          4840: Macro for specifying the initial size of the parser stack.
        !          4841: @xref{Stack Overflow}.
        !          4842: 
        !          4843: @item YYLTYPE
        !          4844: Macro for the data type of @code{yylloc}; a structure with four
        !          4845: members.  @xref{Token Positions, ,Textual Positions of Tokens}.
        !          4846: 
        !          4847: @item YYMAXDEPTH
        !          4848: Macro for specifying the maximum size of the parser stack.
        !          4849: @xref{Stack Overflow}.
        !          4850: 
        !          4851: @item YYRECOVERING
        !          4852: Macro whose value indicates whether the parser is recovering from a
        !          4853: syntax error.  @xref{Action Features, ,Special Features for Use in Actions}.
        !          4854: 
        !          4855: @item YYSTYPE
        !          4856: Macro for the data type of semantic values; @code{int} by default.
        !          4857: @xref{Value Type, ,Data Types of Semantic Values}.
        !          4858: 
        !          4859: @item yychar
        !          4860: External integer variable that contains the integer value of the
        !          4861: current look-ahead token.  (In a pure parser, it is a local variable
        !          4862: within @code{yyparse}.)  Error-recovery rule actions may examine this
        !          4863: variable.  @xref{Action Features, ,Special Features for Use in Actions}.
        !          4864: 
        !          4865: @item yyclearin
        !          4866: Macro used in error-recovery rule actions.  It clears the previous
        !          4867: look-ahead token.  @xref{Error Recovery}.
        !          4868: 
        !          4869: @item yydebug
        !          4870: External integer variable set to zero by default.  If @code{yydebug}
        !          4871: is given a nonzero value, the parser will output information on input
        !          4872: symbols and parser action.  @xref{Debugging, ,Debugging Your Parser}.
        !          4873: 
        !          4874: @item yyerrok
        !          4875: Macro to cause parser to recover immediately to its normal mode
        !          4876: after a parse error.  @xref{Error Recovery}.
        !          4877: 
        !          4878: @item yyerror
        !          4879: User-supplied function to be called by @code{yyparse} on error.  The
        !          4880: function receives one argument, a pointer to a character string
        !          4881: containing an error message.  @xref{Error Reporting, ,The Error Reporting Function @code{yyerror}}.
        !          4882: 
        !          4883: @item yylex
        !          4884: User-supplied lexical analyzer function, called with no arguments
        !          4885: to get the next token.  @xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
        !          4886: 
        !          4887: @item yylval
        !          4888: External variable in which @code{yylex} should place the semantic
        !          4889: value associated with a token.  (In a pure parser, it is a local
        !          4890: variable within @code{yyparse}, and its address is passed to
        !          4891: @code{yylex}.)  @xref{Token Values, ,Semantic Values of Tokens}.
        !          4892: 
        !          4893: @item yylloc
        !          4894: External variable in which @code{yylex} should place the line and
        !          4895: column numbers associated with a token.  (In a pure parser, it is a
        !          4896: local variable within @code{yyparse}, and its address is passed to
        !          4897: @code{yylex}.)  You can ignore this variable if you don't use the
        !          4898: @samp{@@} feature in the grammar actions.  @xref{Token Positions, ,Textual Positions of Tokens}.
        !          4899: 
        !          4900: @item yynerrs
        !          4901: Global variable which Bison increments each time there is a parse
        !          4902: error.  (In a pure parser, it is a local variable within
        !          4903: @code{yyparse}.)  @xref{Error Reporting, ,The Error Reporting Function @code{yyerror}}.
        !          4904: 
        !          4905: @item yyparse
        !          4906: The parser function produced by Bison; call this function to start
        !          4907: parsing.  @xref{Parser Function, ,The Parser Function @code{yyparse}}.
        !          4908: 
        !          4909: @item %left
        !          4910: Bison declaration to assign left associativity to token(s).
        !          4911: @xref{Precedence Decl, ,Operator Precedence}.
        !          4912: 
        !          4913: @item %nonassoc
        !          4914: Bison declaration to assign nonassociativity to token(s).
        !          4915: @xref{Precedence Decl, ,Operator Precedence}.
        !          4916: 
        !          4917: @item %prec
        !          4918: Bison declaration to assign a precedence to a specific rule.
        !          4919: @xref{Contextual Precedence, ,Context-Dependent Precedence}.
        !          4920: 
        !          4921: @item %pure_parser
        !          4922: Bison declaration to request a pure (reentrant) parser.
        !          4923: @xref{Pure Decl, ,A Pure (Reentrant) Parser}.
        !          4924: 
        !          4925: @item %right
        !          4926: Bison declaration to assign right associativity to token(s).
        !          4927: @xref{Precedence Decl, ,Operator Precedence}.
        !          4928: 
        !          4929: @item %start
        !          4930: Bison declaration to specify the start symbol.  @xref{Start Decl, ,The Start-Symbol}.
        !          4931: 
        !          4932: @item %token
        !          4933: Bison declaration to declare token(s) without specifying precedence.
        !          4934: @xref{Token Decl, ,Token Type Names}.
        !          4935: 
        !          4936: @item %type
        !          4937: Bison declaration to declare nonterminals.  @xref{Type Decl, ,Nonterminal Symbols}.
        !          4938: 
        !          4939: @item %union
        !          4940: Bison declaration to specify several possible data types for semantic
        !          4941: values.  @xref{Union Decl, ,The Collection of Value Types}.
        !          4942: @end table
        !          4943: 
        !          4944: These are the punctuation and delimiters used in Bison input:
        !          4945: 
        !          4946: @table @samp
        !          4947: @item %%
        !          4948: Delimiter used to separate the grammar rule section from the
        !          4949: Bison declarations section or the additional C code section.
        !          4950: @xref{Grammar Layout, ,The Overall Layout of a Bison Grammar}.
        !          4951: 
        !          4952: @item %@{ %@}
        !          4953: All code listed between @samp{%@{} and @samp{%@}} is copied directly
        !          4954: to the output file uninterpreted.  Such code forms the ``C
        !          4955: declarations'' section of the input file.  @xref{Grammar Outline, ,Outline of a Bison Grammar}.
        !          4956: 
        !          4957: @item /*@dots{}*/
        !          4958: Comment delimiters, as in C.
        !          4959: 
        !          4960: @item :
        !          4961: Separates a rule's result from its components.  @xref{Rules, ,Syntax of Grammar Rules}.
        !          4962: 
        !          4963: @item ;
        !          4964: Terminates a rule.  @xref{Rules, ,Syntax of Grammar Rules}.
        !          4965: 
        !          4966: @item |
        !          4967: Separates alternate rules for the same result nonterminal.
        !          4968: @xref{Rules, ,Syntax of Grammar Rules}.
        !          4969: @end table
        !          4970: 
        !          4971: @node Glossary, Index, Table of Symbols, Top
        !          4972: @appendix Glossary
        !          4973: @cindex glossary
        !          4974: 
        !          4975: @table @asis
        !          4976: @item Backus-Naur Form (BNF)
        !          4977: Formal method of specifying context-free grammars.  BNF was first used
        !          4978: in the @cite{ALGOL-60} report, 1963.  @xref{Language and Grammar, ,Languages and Context-Free Grammars}.
        !          4979: 
        !          4980: @item Context-free grammars
        !          4981: Grammars specified as rules that can be applied regardless of context.
        !          4982: Thus, if there is a rule which says that an integer can be used as an
        !          4983: expression, integers are allowed @emph{anywhere} an expression is
        !          4984: permitted.  @xref{Language and Grammar, ,Languages and Context-Free Grammars}.
        !          4985: 
        !          4986: @item Dynamic allocation
        !          4987: Allocation of memory that occurs during execution, rather than at
        !          4988: compile time or on entry to a function.
        !          4989: 
        !          4990: @item Empty string
        !          4991: Analogous to the empty set in set theory, the empty string is a
        !          4992: character string of length zero.
        !          4993: 
        !          4994: @item Finite-state stack machine
        !          4995: A ``machine'' that has discrete states in which it is said to exist at
        !          4996: each instant in time.  As input to the machine is processed, the
        !          4997: machine moves from state to state as specified by the logic of the
        !          4998: machine.  In the case of the parser, the input is the language being
        !          4999: parsed, and the states correspond to various stages in the grammar
        !          5000: rules.  @xref{Algorithm, ,The Bison Parser Algorithm }.
        !          5001: 
        !          5002: @item Grouping
        !          5003: A language construct that is (in general) grammatically divisible;
        !          5004: for example, `expression' or `declaration' in C.  
        !          5005: @xref{Language and Grammar, ,Languages and Context-Free Grammars}.
        !          5006: 
        !          5007: @item Infix operator
        !          5008: An arithmetic operator that is placed between the operands on which it
        !          5009: performs some operation.
        !          5010: 
        !          5011: @item Input stream
        !          5012: A continuous flow of data between devices or programs.
        !          5013: 
        !          5014: @item Language construct
        !          5015: One of the typical usage schemas of the language.  For example, one of
        !          5016: the constructs of the C language is the @code{if} statement.
        !          5017: @xref{Language and Grammar, ,Languages and Context-Free Grammars}.
        !          5018: 
        !          5019: @item Left associativity
        !          5020: Operators having left associativity are analyzed from left to right:
        !          5021: @samp{a+b+c} first computes @samp{a+b} and then combines with
        !          5022: @samp{c}.  @xref{Precedence, ,Operator Precedence}.
        !          5023: 
        !          5024: @item Left recursion
        !          5025: A rule whose result symbol is also its first component symbol;
        !          5026: for example, @samp{expseq1 : expseq1 ',' exp;}.  @xref{Recursion, ,Recursive Rules}.
        !          5027: 
        !          5028: @item Left-to-right parsing
        !          5029: Parsing a sentence of a language by analyzing it token by token from
        !          5030: left to right.  @xref{Algorithm, ,The Bison Parser Algorithm }.
        !          5031: 
        !          5032: @item Lexical analyzer (scanner)
        !          5033: A function that reads an input stream and returns tokens one by one.
        !          5034: @xref{Lexical, ,The Lexical Analyzer Function @code{yylex}}.
        !          5035: 
        !          5036: @item Lexical tie-in
        !          5037: A flag, set by actions in the grammar rules, which alters the way
        !          5038: tokens are parsed.  @xref{Lexical Tie-ins}.
        !          5039: 
        !          5040: @item Look-ahead token
        !          5041: A token already read but not yet shifted.  @xref{Look-Ahead, ,Look-Ahead Tokens}.
        !          5042: 
        !          5043: @item LALR(1)
        !          5044: The class of context-free grammars that Bison (like most other parser
        !          5045: generators) can handle; a subset of LR(1).  @xref{Mystery Conflicts, ,
        !          5046: Mysterious Reduce/Reduce Conflicts}.
        !          5047: 
        !          5048: @item LR(1)
        !          5049: The class of context-free grammars in which at most one token of
        !          5050: look-ahead is needed to disambiguate the parsing of any piece of input.
        !          5051: 
        !          5052: @item Nonterminal symbol
        !          5053: A grammar symbol standing for a grammatical construct that can
        !          5054: be expressed through rules in terms of smaller constructs; in other
        !          5055: words, a construct that is not a token.  @xref{Symbols}.
        !          5056: 
        !          5057: @item Parse error
        !          5058: An error encountered during parsing of an input stream due to invalid
        !          5059: syntax.  @xref{Error Recovery}.
        !          5060: 
        !          5061: @item Parser
        !          5062: A function that recognizes valid sentences of a language by analyzing
        !          5063: the syntax structure of a set of tokens passed to it from a lexical
        !          5064: analyzer.
        !          5065: 
        !          5066: @item Postfix operator
        !          5067: An arithmetic operator that is placed after the operands upon which it
        !          5068: performs some operation.
        !          5069: 
        !          5070: @item Reduction
        !          5071: Replacing a string of nonterminals and/or terminals with a single
        !          5072: nonterminal, according to a grammar rule.  @xref{Algorithm, ,The Bison Parser Algorithm }.
        !          5073: 
        !          5074: @item Reentrant
        !          5075: A reentrant subprogram is a subprogram which can be in invoked any
        !          5076: number of times in parallel, without interference between the various
        !          5077: invocations.  @xref{Pure Decl, ,A Pure (Reentrant) Parser}.
        !          5078: 
        !          5079: @item Reverse polish notation
        !          5080: A language in which all operators are postfix operators.
        !          5081: 
        !          5082: @item Right recursion
        !          5083: A rule whose result symbol is also its last component symbol;
        !          5084: for example, @samp{expseq1: exp ',' expseq1;}.  @xref{Recursion, ,Recursive Rules}.
        !          5085: 
        !          5086: @item Semantics
        !          5087: In computer languages, the semantics are specified by the actions
        !          5088: taken for each instance of the language, i.e., the meaning of
        !          5089: each statement.  @xref{Semantics, ,Defining Language Semantics}.
        !          5090: 
        !          5091: @item Shift
        !          5092: A parser is said to shift when it makes the choice of analyzing
        !          5093: further input from the stream rather than reducing immediately some
        !          5094: already-recognized rule.  @xref{Algorithm, ,The Bison Parser Algorithm }.
        !          5095: 
        !          5096: @item Single-character literal
        !          5097: A single character that is recognized and interpreted as is.
        !          5098: @xref{Grammar in Bison, ,From Formal Rules to Bison Input}.
        !          5099: 
        !          5100: @item Start symbol
        !          5101: The nonterminal symbol that stands for a complete valid utterance in
        !          5102: the language being parsed.  The start symbol is usually listed as the
        !          5103: first nonterminal symbol in a language specification.  
        !          5104: @xref{Start Decl, ,The Start-Symbol}.
        !          5105: 
        !          5106: @item Symbol table
        !          5107: A data structure where symbol names and associated data are stored
        !          5108: during parsing to allow for recognition and use of existing
        !          5109: information in repeated uses of a symbol.  @xref{Multi-function Calc}.
        !          5110: 
        !          5111: @item Token
        !          5112: A basic, grammatically indivisible unit of a language.  The symbol
        !          5113: that describes a token in the grammar is a terminal symbol.
        !          5114: The input of the Bison parser is a stream of tokens which comes from
        !          5115: the lexical analyzer.  @xref{Symbols}.
        !          5116: 
        !          5117: @item Terminal symbol
        !          5118: A grammar symbol that has no rules in the grammar and therefore
        !          5119: is grammatically indivisible.  The piece of text it represents
        !          5120: is a token.  @xref{Language and Grammar, ,Languages and Context-Free Grammars}.
        !          5121: @end table
        !          5122: 
        !          5123: @node Index,  , Glossary, Top
        !          5124: @unnumbered Index
        !          5125: 
        !          5126: @printindex cp
        !          5127: 
        !          5128: @contents
        !          5129: 
        !          5130: @bye
        !          5131: 
        !          5132: 
        !          5133: 
        !          5134: 
        !          5135: @c old menu
        !          5136: 
        !          5137: * Introduction::
        !          5138: * Conditions::
        !          5139: * Copying::           The GNU General Public License says
        !          5140:                         how you can copy and share Bison
        !          5141: 
        !          5142: Tutorial sections:
        !          5143: * Concepts::          Basic concepts for understanding Bison.
        !          5144: * Examples::          Three simple explained examples of using Bison.
        !          5145: 
        !          5146: Reference sections:
        !          5147: * Grammar File::      Writing Bison declarations and rules.
        !          5148: * Interface::         C-language interface to the parser function @code{yyparse}.
        !          5149: * Algorithm::         How the Bison parser works at run-time.
        !          5150: * Error Recovery::    Writing rules for error recovery.
        !          5151: * Context Dependency::What to do if your language syntax is too
        !          5152:                         messy for Bison to handle straightforwardly.
        !          5153: * Debugging::         Debugging Bison parsers that parse wrong.
        !          5154: * Invocation::        How to run Bison (to produce the parser source file).
        !          5155: * Table of Symbols::  All the keywords of the Bison language are explained.
        !          5156: * Glossary::          Basic concepts are explained.
        !          5157: * Index::             Cross-references to the text.
        !          5158: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.