Table of Contents
Introduction
Conditions for Using Bison
GNU GENERAL PUBLIC LICENSE
1 The Concepts of Bison
1.1 Languages and Context-Free Grammars
1.2 From Formal Rules to Bison Input
1.3 Semantic Values
1.4 Semantic Actions
1.5 Writing GLR Parsers
1.5.1 Using GLR on Unambiguous Grammars
1.5.2 Using GLR to Resolve Ambiguities
1.5.3 GLR Semantic Actions
1.5.4 Considerations when Compiling GLR Parsers
1.6 Locations
1.7 Bison Output the Parser File
1.8 Stages in Using Bison
1.9 The Overall Layout of a Bison Grammar
2 Examples
2.1 Reverse Polish Notation Calculator
2.1.1 Declarations for rpcalc
2.1.2 Grammar Rules for rpcalc
2.1.2.1 Explanation of input
2.1.2.2 Explanation of line
2.1.2.3 Explanation of expr
2.1.3 The rpcalc Lexical Analyzer
2.1.4 The Controlling Function
2.1.5 The Error Reporting Routine
2.1.6 Running Bison to Make the Parser
2.1.7 Compiling the Parser File
2.2 Infix Notation Calculator calc
2.3 Simple Error Recovery
2.4 Location Tracking Calculator ltcalc
2.4.1 Declarations for ltcalc
2.4.2 Grammar Rules for ltcalc
2.4.3 The ltcalc Lexical Analyzer.
2.5 Multi-Function Calculator mfcalc
2.5.1 Declarations for mfcalc
2.5.2 Grammar Rules for mfcalc
2.5.3 The mfcalc Symbol Table
2.6 Exercises
3 Bison Grammar Files
3.1 Outline of a Bison Grammar
3.1.1 The prologue
3.1.2 Prologue Alternatives
3.1.3 The Bison Declarations Section
3.1.4 The Grammar Rules Section
3.1.5 The epilogue
3.2 Symbols, Terminal and Nonterminal
3.3 Syntax of Grammar Rules
3.4 Recursive Rules
3.5 Defining Language Semantics
3.5.1 Data Types of Semantic Values
3.5.2 More Than One Value Type
3.5.3 Actions
3.5.4 Data Types of Values in Actions
3.5.5 Actions in Mid-Rule
3.6 Tracking Locations
3.6.1 Data Type of Locations
3.6.2 Actions and Locations
3.6.3 Default Action for Locations
3.7 Bison Declarations
3.7.1 Require a Version of Bison
3.7.2 Token Type Names
3.7.3 Operator Precedence
3.7.4 The Collection of Value Types
3.7.5 Nonterminal Symbols
3.7.6 Performing Actions before Parsing
3.7.7 Freeing Discarded Symbols
3.7.8 Suppressing Conflict Warnings
3.7.9 The Start-Symbol
3.7.10 A Pure (Reentrant) Parser
3.7.11 A Push Parser
3.7.12 Bison Declaration Summary
3.8 Multiple Parsers in the Same Program
4 Parser C-Language Interface
4.1 The Parser Function yyparse
4.2 The Push Parser Function yypush_parse
4.3 The Pull Parser Function yypull_parse
4.4 The Parser Create Function yystate_new
4.5 The Parser Delete Function yystate_delete
4.6 The Lexical Analyzer Function yylex
4.6.1 Calling Convention for yylex
4.6.2 Semantic Values of Tokens
4.6.3 Textual Locations of Tokens
4.6.4 Calling Conventions for Pure Parsers
4.7 The Error Reporting Function yyerror
4.8 Special Features for Use in Actions
4.9 Parser Internationalization
5 The Bison Parser Algorithm
5.1 Lookahead Tokens
5.2 Shift/Reduce Conflicts
5.3 Operator Precedence
5.3.1 When Precedence is Needed
5.3.2 Specifying Operator Precedence
5.3.3 Precedence Examples
5.3.4 How Precedence Works
5.4 Context-Dependent Precedence
5.5 Parser States
5.6 Reduce/Reduce Conflicts
5.7 Mysterious Reduce/Reduce Conflicts
5.8 Generalized LR (GLR) Parsing
5.9 Memory Management, and How to Avoid Memory Exhaustion
6 Error Recovery
7 Handling Context Dependencies
7.1 Semantic Info in Token Types
7.2 Lexical Tie-ins
7.3 Lexical Tie-ins and Error Recovery
8 Debugging Your Parser
8.1 Understanding Your Parser
8.2 Tracing Your Parser
9 Invoking Bison
9.1 Bison Options
9.2 Option Cross Key
9.3 Yacc Library
10 Parsers Written In Other Languages
10.1 C++ Parsers
10.1.1 C++ Bison Interface
10.1.2 C++ Semantic Values
10.1.3 C++ Location Values
10.1.4 C++ Parser Interface
10.1.5 C++ Scanner Interface
10.1.6 A Complete C++ Example
10.1.6.1 Calc++ — C++ Calculator
10.1.6.2 Calc++ Parsing Driver
10.1.6.3 Calc++ Parser
10.1.6.4 Calc++ Scanner
10.1.6.5 Calc++ Top Level
10.2 Java Parsers
10.2.1 Java Bison Interface
10.2.2 Java Semantic Values
10.2.3 Java Location Values
10.2.4 Java Parser Interface
10.2.5 Java Scanner Interface
10.2.6 Special Features for Use in Java Actions
10.2.7 Differences between C/C++ and Java Grammars
10.2.8 Java Declarations Summary
11 Frequently Asked Questions
11.1 Memory Exhausted
11.2 How Can I Reset the Parser
11.3 Strings are Destroyed
11.4 Implementing Gotos/Loops
11.5 Multiple start-symbols
11.6 Secure? Conform?
11.7 I can’t build Bison
11.8 Where can I find help?
11.9 Bug Reports
11.10 More Languages
11.11 Beta Testing
11.12 Mailing Lists
Appendix A Bison Symbols
Appendix B Glossary