Info Node: (bison.info)Top
bison.info: Top
(dir) Introduction Back to Software Index
Bison
*****
This manual (8 April 2013) is for GNU Bison (version 2.7.12-4996), the
GNU parser generator.
Copyright (C) 1988-1993, 1995, 1998-2013 Free Software Foundation,
Inc.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
Version 1.3 or any later version published by the Free Software
Foundation; with no Invariant Sections, with the Front-Cover texts
being "A GNU Manual," and with the Back-Cover Texts as in (a)
below. A copy of the license is included in the section entitled
"GNU Free Documentation License."
(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
modify this GNU manual. Buying copies from the FSF supports it in
developing GNU and promoting software freedom."
- Introduction
-
- Conditions
-
- Copying
- The GNU General Public License says
how you can copy and share Bison.
Tutorial sections:
- Concepts
- Basic concepts for understanding Bison.
- Examples
- Three simple explained examples of using Bison.
Reference sections:
- Grammar File
- Writing Bison declarations and rules.
- Interface
- C-language interface to the parser function `yyparse'.
- Algorithm
- How the Bison parser works at run-time.
- Error Recovery
- Writing rules for error recovery.
- Context Dependency
- What to do if your language syntax is too
messy for Bison to handle straightforwardly.
- Debugging
- Understanding or debugging Bison parsers.
- Invocation
- How to run Bison (to produce the parser implementation).
- Other Languages
- Creating C++ and Java parsers.
- FAQ
- Frequently Asked Questions
- Table of Symbols
- All the keywords of the Bison language are explained.
- Glossary
- Basic concepts are explained.
- Copying This Manual
- License for copying this manual.
- Bibliography
- Publications cited in this manual.
- Index of Terms
- Cross-references to the text.
--- The Detailed Node Listing ---
The Concepts of Bison
- Language and Grammar
- Languages and context-free grammars,
as mathematical ideas.
- Grammar in Bison
- How we represent grammars for Bison's sake.
- Semantic Values
- Each token or syntactic grouping can have
a semantic value (the value of an integer,
the name of an identifier, etc.).
- Semantic Actions
- Each rule can have an action containing C code.
- GLR Parsers
- Writing parsers for general context-free languages.
- Locations
- Overview of location tracking.
- Bison Parser
- What are Bison's input and output,
how is the output used?
- Stages
- Stages in writing and running Bison grammars.
- Grammar Layout
- Overall structure of a Bison grammar file.
Writing GLR Parsers
- Simple GLR Parsers
- Using GLR parsers on unambiguous grammars.
- Merging GLR Parses
- Using GLR parsers to resolve ambiguities.
- GLR Semantic Actions
- Deferred semantic actions have special concerns.
- Compiler Requirements
- GLR parsers require a modern C compiler.
Examples
- RPN Calc
- Reverse polish notation calculator;
a first example with no operator precedence.
- Infix Calc
- Infix (algebraic) notation calculator.
Operator precedence is introduced.
- Simple Error Recovery
- Continuing after syntax errors.
- Location Tracking Calc
- Demonstrating the use of @N and @$.
- Multi-function Calc
- Calculator with memory and trig functions.
It uses multiple data-types for semantic values.
- Exercises
- Ideas for improving the multi-function calculator.
Reverse Polish Notation Calculator
- Rpcalc Declarations
- Prologue (declarations) for rpcalc.
- Rpcalc Rules
- Grammar Rules for rpcalc, with explanation.
- Rpcalc Lexer
- The lexical analyzer.
- Rpcalc Main
- The controlling function.
- Rpcalc Error
- The error reporting function.
- Rpcalc Generate
- Running Bison on the grammar file.
- Rpcalc Compile
- Run the C compiler on the output code.
Grammar Rules for `rpcalc'
- Rpcalc Input
-
- Rpcalc Line
-
- Rpcalc Expr
-
Location Tracking Calculator: `ltcalc'
- Ltcalc Declarations
- Bison and C declarations for ltcalc.
- Ltcalc Rules
- Grammar rules for ltcalc, with explanations.
- Ltcalc Lexer
- The lexical analyzer.
Multi-Function Calculator: `mfcalc'
- Mfcalc Declarations
- Bison declarations for multi-function calculator.
- Mfcalc Rules
- Grammar rules for the calculator.
- Mfcalc Symbol Table
- Symbol table management subroutines.
Bison Grammar Files
- Grammar Outline
- Overall layout of the grammar file.
- Symbols
- Terminal and nonterminal symbols.
- Rules
- How to write grammar rules.
- Recursion
- Writing recursive rules.
- Semantics
- Semantic values and actions.
- Tracking Locations
- Locations and actions.
- Named References
- Using named references in actions.
- Declarations
- All kinds of Bison declarations are described here.
- Multiple Parsers
- Putting more than one Bison parser in one program.
Outline of a Bison Grammar
- Prologue
- Syntax and usage of the prologue.
- Prologue Alternatives
- Syntax and usage of alternatives to the prologue.
- Bison Declarations
- Syntax and usage of the Bison declarations section.
- Grammar Rules
- Syntax and usage of the grammar rules section.
- Epilogue
- Syntax and usage of the epilogue.
Defining Language Semantics
- Value Type
- Specifying one data type for all semantic values.
- Multiple Types
- Specifying several alternative data types.
- Actions
- An action is the semantic definition of a grammar rule.
- Action Types
- Specifying data types for actions to operate on.
- Mid-Rule Actions
- Most actions go at the end of a rule.
This says when, why and how to use the exceptional
action in the middle of a rule.
Actions in Mid-Rule
- Using Mid-Rule Actions
- Putting an action in the middle of a rule.
- Mid-Rule Action Translation
- How mid-rule actions are actually processed.
- Mid-Rule Conflicts
- Mid-rule actions can cause conflicts.
Tracking Locations
- Location Type
- Specifying a data type for locations.
- Actions and Locations
- Using locations in actions.
- Location Default Action
- Defining a general way to compute locations.
Bison Declarations
- Require Decl
- Requiring a Bison version.
- Token Decl
- Declaring terminal symbols.
- Precedence Decl
- Declaring terminals with precedence and associativity.
- Union Decl
- Declaring the set of all semantic value types.
- Type Decl
- Declaring the choice of type for a nonterminal symbol.
- Initial Action Decl
- Code run before parsing starts.
- Destructor Decl
- Declaring how symbols are freed.
- Printer Decl
- Declaring how symbol values are displayed.
- Expect Decl
- Suppressing warnings about parsing conflicts.
- Start Decl
- Specifying the start symbol.
- Pure Decl
- Requesting a reentrant parser.
- Push Decl
- Requesting a push parser.
- Decl Summary
- Table of all Bison declarations.
- %define Summary
- Defining variables to adjust Bison's behavior.
- %code Summary
- Inserting code into the parser source.
Parser C-Language Interface
- Parser Function
- How to call `yyparse' and what it returns.
- Push Parser Function
- How to call `yypush_parse' and what it returns.
- Pull Parser Function
- How to call `yypull_parse' and what it returns.
- Parser Create Function
- How to call `yypstate_new' and what it returns.
- Parser Delete Function
- How to call `yypstate_delete' and what it returns.
- Lexical
- You must supply a function `yylex'
which reads tokens.
- Error Reporting
- You must supply a function `yyerror'.
- Action Features
- Special features for use in actions.
- Internationalization
- How to let the parser speak in the user's
native language.
The Lexical Analyzer Function `yylex'
- Calling Convention
- How `yyparse' calls `yylex'.
- Token Values
- How `yylex' must return the semantic value
of the token it has read.
- Token Locations
- How `yylex' must return the text location
(line number, etc.) of the token, if the
actions want that.
- Pure Calling
- How the calling convention differs in a pure parser
(Note: A Pure (Reentrant) Parser.).
The Bison Parser Algorithm
- Lookahead
- Parser looks one token ahead when deciding what to do.
- Shift/Reduce
- Conflicts: when either shifting or reduction is valid.
- Precedence
- Operator precedence works by resolving conflicts.
- Contextual Precedence
- When an operator's precedence depends on context.
- Parser States
- The parser is a finite-state-machine with stack.
- Reduce/Reduce
- When two rules are applicable in the same situation.
- Mysterious Conflicts
- Conflicts that look unjustified.
- Tuning LR
- How to tune fundamental aspects of LR-based parsing.
- Generalized LR Parsing
- Parsing arbitrary context-free grammars.
- Memory Management
- What happens when memory is exhausted. How to avoid it.
Operator Precedence
- Why Precedence
- An example showing why precedence is needed.
- Using Precedence
- How to specify precedence in Bison grammars.
- Precedence Examples
- How these features are used in the previous example.
- How Precedence
- How they work.
- Non Operators
- Using precedence for general conflicts.
Tuning LR
- LR Table Construction
- Choose a different construction algorithm.
- Default Reductions
- Disable default reductions.
- LAC
- Correct lookahead sets in the parser states.
- Unreachable States
- Keep unreachable parser states for debugging.
Handling Context Dependencies
- Semantic Tokens
- Token parsing can depend on the semantic context.
- Lexical Tie-ins
- Token parsing can depend on the syntactic context.
- Tie-in Recovery
- Lexical tie-ins have implications for how
error recovery rules must be written.
Debugging Your Parser
- Understanding
- Understanding the structure of your parser.
- Graphviz
- Getting a visual representation of the parser.
- Xml
- Getting a markup representation of the parser.
- Tracing
- Tracing the execution of your parser.
Tracing Your Parser
- Enabling Traces
- Activating run-time trace support
- Mfcalc Traces
- Extending `mfcalc' to support traces
- The YYPRINT Macro
- Obsolete interface for semantic value reports
Invoking Bison
- Bison Options
- All the options described in detail,
in alphabetical order by short options.
- Option Cross Key
- Alphabetical list of long options.
- Yacc Library
- Yacc-compatible `yylex' and `main'.
Parsers Written In Other Languages
- C++ Parsers
- The interface to generate C++ parser classes
- Java Parsers
- The interface to generate Java parser classes
C++ Parsers
- C++ Bison Interface
- Asking for C++ parser generation
- C++ Semantic Values
- %union vs. C++
- C++ Location Values
- The position and location classes
- C++ Parser Interface
- Instantiating and running the parser
- C++ Scanner Interface
- Exchanges between yylex and parse
- A Complete C++ Example
- Demonstrating their use
C++ Location Values
- C++ position
- One point in the source file
- C++ location
- Two points in the source file
- User Defined Location Type
- Required interface for locations
A Complete C++ Example
- Calc++ --- C++ Calculator
- The specifications
- Calc++ Parsing Driver
- An active parsing context
- Calc++ Parser
- A parser class
- Calc++ Scanner
- A pure C++ Flex scanner
- Calc++ Top Level
- Conducting the band
Java Parsers
- Java Bison Interface
- Asking for Java parser generation
- Java Semantic Values
- %type and %token vs. Java
- Java Location Values
- The position and location classes
- Java Parser Interface
- Instantiating and running the parser
- Java Scanner Interface
- Specifying the scanner for the parser
- Java Action Features
- Special features for use in actions
- Java Differences
- Differences between C/C++ and Java Grammars
- Java Declarations Summary
- List of Bison declarations used with Java
Frequently Asked Questions
- Memory Exhausted
- Breaking the Stack Limits
- How Can I Reset the Parser
- `yyparse' Keeps some State
- Strings are Destroyed
- `yylval' Loses Track of Strings
- Implementing Gotos/Loops
- Control Flow in the Calculator
- Multiple start-symbols
- Factoring closely related grammars
- Secure? Conform?
- Is Bison POSIX safe?
- I can't build Bison
- Troubleshooting
- Where can I find help?
- Troubleshouting
- Bug Reports
- Troublereporting
- More Languages
- Parsers in C++, Java, and so on
- Beta Testing
- Experimenting development versions
- Mailing Lists
- Meeting other Bison users
Copying This Manual
- Copying This Manual
- License for copying this manual.
automatically generated by info2www version 1.2