[Top] | [Contents] | [Index] | [ ? ] |
This manual documents version 1.28 of Bison.
Introduction Conditions for Using Bison GNU GENERAL PUBLIC LICENSE The GNU General Public License says how you can copy and share Bison
Tutorial sections:
1. The Concepts of Bison Basic concepts for understanding Bison. 2. Examples Three simple explained examples of using Bison.
Reference sections:
3. Bison Grammar Files Writing Bison declarations and rules. 4. Parser C-Language Interface C-language interface to the parser function yyparse
.5. The Bison Parser Algorithm How the Bison parser works at run-time. 6. Error Recovery Writing rules for error recovery. 7. Handling Context Dependencies What to do if your language syntax is too messy for Bison to handle straightforwardly. 8. Debugging Your Parser Debugging Bison parsers that parse wrong. 9. Invoking Bison How to run Bison (to produce the parser source file). A. Bison Symbols All the keywords of the Bison language are explained. B. Glossary Basic concepts are explained. Index Cross-references to the text.
-- The Detailed Node Listing ---
The Concepts of Bison
1.1 Languages and Context-Free Grammars Languages and context-free grammars, as mathematical ideas. 1.2 From Formal Rules to Bison Input How we represent grammars for Bison's sake. 1.3 Semantic Values Each token or syntactic grouping can have a semantic value (the value of an integer, the name of an identifier, etc.). 1.4 Semantic Actions Each rule can have an action containing C code. 1.5 Bison Output: the Parser File What are Bison's input and output, how is the output used? 1.6 Stages in Using Bison Stages in writing and running Bison grammars. 1.7 The Overall Layout of a Bison Grammar Overall structure of a Bison grammar file.
Examples
2.1 Reverse Polish Notation Calculator Reverse polish notation calculator; a first example with no operator precedence. 2.2 Infix Notation Calculator: calc
Infix (algebraic) notation calculator. Operator precedence is introduced. 2.3 Simple Error Recovery Continuing after syntax errors. 2.4 Multi-Function Calculator: mfcalc
Calculator with memory and trig functions. It uses multiple data-types for semantic values. 2.5 Exercises Ideas for improving the multi-function calculator.
Reverse Polish Notation Calculator
2.1.1 Declarations for rpcalc
Bison and C declarations for rpcalc. 2.1.2 Grammar Rules for rpcalc
Grammar Rules for rpcalc, with explanation. 2.1.3 The rpcalc
Lexical AnalyzerThe lexical analyzer. 2.1.4 The Controlling Function The controlling function. 2.1.5 The Error Reporting Routine The error reporting function. 2.1.6 Running Bison to Make the Parser Running Bison on the grammar file. 2.1.7 Compiling the Parser File Run the C compiler on the output code.
Grammar Rules forrpcalc
2.1.2.1 Explanation of input
2.1.2.2 Explanation of line
2.1.2.3 Explanation of expr
Multi-Function Calculator:mfcalc
2.4.1 Declarations for mfcalc
Bison declarations for multi-function calculator. 2.4.2 Grammar Rules for mfcalc
Grammar rules for the calculator. 2.4.3 The mfcalc
Symbol TableSymbol table management subroutines.
Bison Grammar Files
3.1 Outline of a Bison Grammar Overall layout of the grammar file. 3.2 Symbols, Terminal and Nonterminal Terminal and nonterminal symbols. 3.3 Syntax of Grammar Rules How to write grammar rules. 3.4 Recursive Rules Writing recursive rules. 3.5 Defining Language Semantics Semantic values and actions. 3.6 Bison Declarations All kinds of Bison declarations are described here. 3.7 Multiple Parsers in the Same Program Putting more than one Bison parser in one program.
Outline of a Bison Grammar
3.1.1 The C Declarations Section Syntax and usage of the C declarations section. 3.1.2 The Bison Declarations Section Syntax and usage of the Bison declarations section. 3.1.3 The Grammar Rules Section Syntax and usage of the grammar rules section. 3.1.4 The Additional C Code Section Syntax and usage of the additional C code section.
Defining Language Semantics
3.5.1 Data Types of Semantic Values Specifying one data type for all semantic values. 3.5.2 More Than One Value Type Specifying several alternative data types. 3.5.3 Actions An action is the semantic definition of a grammar rule. 3.5.4 Data Types of Values in Actions Specifying data types for actions to operate on. 3.5.5 Actions in Mid-Rule 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.
Bison Declarations
3.6.1 Token Type Names Declaring terminal symbols. 3.6.2 Operator Precedence Declaring terminals with precedence and associativity. 3.6.3 The Collection of Value Types Declaring the set of all semantic value types. 3.6.4 Nonterminal Symbols Declaring the choice of type for a nonterminal symbol. 3.6.5 Suppressing Conflict Warnings Suppressing warnings about shift/reduce conflicts. 3.6.6 The Start-Symbol Specifying the start symbol. 3.6.7 A Pure (Reentrant) Parser Requesting a reentrant parser. 3.6.8 Bison Declaration Summary Table of all Bison declarations.
Parser C-Language Interface
4.1 The Parser Function yyparse
How to call yyparse
and what it returns.4.2 The Lexical Analyzer Function yylex
You must supply a function yylex
which reads tokens.4.3 The Error Reporting Function yyerror
You must supply a function yyerror
.4.4 Special Features for Use in Actions Special features for use in actions.
The Lexical Analyzer Functionyylex
(line number, etc.) of the token, if the
4.2.1 Calling Convention for yylex
How yyparse
callsyylex
.4.2.2 Semantic Values of Tokens How yylex
must return the semantic value of the token it has read.4.2.3 Textual Positions of Tokens How yylex
must return the text position
actions want that.
4.2.4 Calling Conventions for Pure Parsers How the calling convention differs in a pure parser (@pxref{Pure Decl, ,A Pure (Reentrant) Parser}).
The Bison Parser Algorithm
5.1 Look-Ahead Tokens Parser looks one token ahead when deciding what to do. 5.2 Shift/Reduce Conflicts Conflicts: when either shifting or reduction is valid. 5.3 Operator Precedence Operator precedence works by resolving conflicts. 5.4 Context-Dependent Precedence When an operator's precedence depends on context. 5.5 Parser States The parser is a finite-state-machine with stack. 5.6 Reduce/Reduce Conflicts When two rules are applicable in the same situation. 5.7 Mysterious Reduce/Reduce Conflicts Reduce/reduce conflicts that look unjustified. 5.8 Stack Overflow, and How to Avoid It What happens when stack gets full. How to avoid it.
Operator Precedence
5.3.1 When Precedence is Needed An example showing why precedence is needed. 5.3.2 Specifying Operator Precedence How to specify precedence in Bison grammars. 5.3.3 Precedence Examples How these features are used in the previous example. 5.3.4 How Precedence Works How they work.
Handling Context Dependencies
7.1 Semantic Info in Token Types Token parsing can depend on the semantic context. 7.2 Lexical Tie-ins Token parsing can depend on the syntactic context. 7.3 Lexical Tie-ins and Error Recovery Lexical tie-ins have implications for how error recovery rules must be written.
Invoking Bison
9.1 Bison Options All the options described in detail, in alphabetical order by short options. 9.2 Option Cross Key Alphabetical list of long options. 9.3 Invoking Bison under VMS Bison command syntax on VMS.