-
3 Regular Languages
-
4 Analysis of Context-free Languages
- 4.1 The method of recursive descent
- 4.2 Table-driven top-down parsing
- 4.3 Bottom-up parsing
- 4.4 Exercises
-
5 Attributed Grammars and Semantics
- 5.1 Type rules
- 5.2 Evaluation rules
- 5.3 Translation rules
- 5.4 Exercises
-
6 The Programming Language Oberon-0
-
7 A Parser for Oberon-0
- 7.1 The scanner
- 7.2 The parser
- 7.3 Coping with syntactic errors
- 7.4 Exercises
-
8 Consideration of Context Specified by Declarations
- 8.1 Declarations
- 8.2 Entries for data types
- 8.3 Data representation at run-time
- 8.4 Exercises
-
9 A RISC Architecture as Target
- 9.1 Registers and resources
- 9.2 Register instructions
- 9.3 Memory instructions
- 9.4 Branch instructions
- 9.5 An emulator
-
10 Expressions and Assignments
- 10.1 Straight code generation according to the stack principle
- 10.2 Delayed code generation
- 10.3 Indexed variables and record fields
- 10.4 Exercises
-
11 Conditional and Repeated Statements and Boolean Expressions
- 11.1 Comparisons and jumps
- 11.2 Conditional and repeated statements
- 11.3 Boolean operations
- 11.4 Assignments to Boolean variables
- 11.5 Exercises
-
12 Procedures and the Concept of Locality
- 12.1 Run-time organization of the store
- 12.2 Addressing of variables
- 12.3 Parameters
- 12.4 Procedure declarations and calls
- 12.5 Standard procedures
- 12.6 Function procedures
- 12.7 Exercises
-
13 Elementary Data Types
- 13.1 The types REAL and LONGREAL
- 13.2 Compatibility between numeric data types
- 13.3 The data type SET
- 13.4 Exercises
-
14 Open Arrays, Pointers and Procedure Types
- 14.1 Open arrays
- 14.2 Dynamic data structures and pointers
- 14.3 Procedure types
- 14.5 Exercises
-
15 Modules and Separate Compilation
- 15.1 The principle of information hiding
- 15.2 Separate compilation
- 15.3 Implementation of symbol files
- 15.4 Addressing external objects
- 15.5 Checking configuration consistency
- 15.6 Exercises
-
16 Code Optimizations and the Frontend/backend Structure
- 16.1 General considerations
- 16.2 Simple optimizations
- 16.3 Avoiding repeated evaluations
- 16.4 Register allocation
- 16.5 The frontend/backend compiler structure
- 16.6 Exercises
-
Appendix
-
Syntax of Oberon-0
-
The ASCII character set