Introduction to Compiling / 1: |
Compilers |
Analysis of the Source Program |
The Phases of a Compiler |
Cousins of the Compiler |
The Grouping of Phases |
Compiler-Construction Tools |
Bibliographic Notes |
A Simple One-Pass Compiler / 2: |
Overview Syntax Definition |
Syntax-Directed Translation |
Parsing |
A Translator for Simple Expressions |
Lexical Analysis |
Incorporating a Symbol Table |
Abstract Stack Machines |
Putting the Techniques Together |
Exercises |
The Role of the Lexical Analyzer / 3: |
Input Buffering |
Specification of Tokens |
Recognition of Tokens |
A Language for Specifying Lexical Analyzers |
Finite Automata |
From a Regular Expression to an NFA |
Design of a Lexical Analyzer Generator |
Optimization of DFA-Based Pattern Matchers |
Syntax Analysis / 4: |
The Role of the Parser |
Context-Free Grammars |
Writing a Grammar |
Top-Down Parsing |
Bottom-Up Parsing |
Operator-Precedence Parsing |
LR Parsers |
Using Ambiguous Grammars |
Parser Generators |
Syntax-Directed Definitions / 5: |
Construction of Syntax Trees |
Bottom-Up Evaluation of S-Attributed Definitions |
L-Attributed Definitions |
Top Down Translation |
Bottom-Up Evaluation of Inherited Attributes |
Recursive Evaluators |
Space for Attribute Values at Compile Time |
Assigning Spaces at Compiler-Construction Time |
Analysis of Syntax-Directed Definitions |
Type Checking / 6: |
Type Systems |
Specification of a Simple Type Checker |
Equivalence of Type Expressions |
Type Conversions |
Overloading of Functions and Operators |
Polymorphic Functions |
An algorithm for Unification |
Run-Time Environments / 7: |
Source Language Issues |
Storage Organization |
Storage-Allocation Strategies |
Access to Nonlocal Names |
Parameter Passing |
Symbol Tables |
Language Facilities for Dynamic Storage Allocation |
Dynamic Storage Allocation Techniques |
Storage Allocation in Fortran |
Intermediate Code Generation / 8: |
Intermediate Languages |
Declarations |
Assignment Statements |
Boolean Expressions |
Case Statements |
Backpatching |
Procedure Calls |
Code Generation / 9: |
Issues in the Design of a Code Generator |
The Target Machine |
Run-Time Storage Management |
Basic Blocks and Flow Graphs |
Next-Use Information |
A Simple Code Generator |
Register Allocation and Assignment |
The Dag Representation of Basic Blocks |
Peephole Optimization |
Generating Code from Dags |
Dynamic Programming Code-Generation Algorithm |
Code-Generator Generators |
Code Optimization / 10: |
Introduction |
The Principal Sources of Optimization |
Optimization of Basic Blocks |
Loops in Flow Graphs |
Introduction to Global Data-Flow Analysis |
Iterative Solution of Data-Flow Equations |
Code-Improving Transformations |
Dealing with Aliases |
Data-Flow Analysis of Structured Flow Graphs |
Efficient Data-Flow Algorithms |
A Tool for Data-Flow Analysis |
Estimation of Types |
Symbolic Debugging of Optimized Code |
Want to Write a Comp / 11: |
Introduction to Compiling / 1: |
Compilers |
Analysis of the Source Program |