[Top] | [Contents] | [Index] | [ ? ] |
This manual documents version 2.21.5 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 Analyzer | The 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 for rpcalc
| ||
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 Table | Symbol 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 Function yylex
| ||
4.2.1 Calling Convention for yylex | How yyparse calls yylex . | |
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 | |
(line number, etc.) of the token, if the | ||
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. |