University of Arizona, Department of Computer Science

CSc 453: Syllabus

References are to the text Basics of Compiler Design by Mogensen:

Overview Chapter 1: Introduction
Lexical Analysis
(Scanning)
Chapter 2:
  1. Sec. 2.1: Introduction
  2. Sec. 2.2: Regular expressions
  3. Sec. 2.3 – 2.8: Finite automata; converting regular expressions to finite automata
  4. Sec. 2.9: Lexers and lexer generators
Syntax Analysis
(Parsing)
Chapter 3:
  1. Sec. 3.1: Introduction
  2. Sec. 3.2: Context-free grammars
  3. Sec. 3.3: Derivation
  4. Sec. 3.4: Operator precedence
  5. Sec. 3.5: Other sources of ambiguity
  6. Sec. 3.6: Syntax analysis
  7. Sec. 3.8: Nullable and FIRST
  8. Sec. 3.10: FOLLOW
  9. Sec. 3.14: SLR Parsing
  10. Sec. 3.15: Constructing SLR parse tables
  11. Sec. 3.17: Using LR-parser generators
Semantic Analysis
  Chapter 4: Scopes and Symbol Tables
  1. Sec. 4.1: Introduction
  2. Sec. 4.2: Symbol tables
  3. Sec. 6.3: The symbol table
  4. Sec. 6.4: Type checking
  Chapter 6: Type Checking
  1. Sec. 6.1: Introduction
  2. Sec. 6.2: The design space of types
  3. Sec. 6.3: Attributes
  4. Sec. 6.4: Environments for type checking
  5. Sec. 6.5: Type checking expressions
  6. Sec. 6.6: Type checking of function declarations
  7. Sec. 6.7: Type checking a program
  8. Sec. 6.8: Advanced type checking
Intermediate Code
Generation
Chapter 7:
  1. Sec. 7.1: Introduction
  2. Sec. 7.2: Choosing an intermediate language
  3. Sec. 7.4: Syntax-directed translation
  4. Sec. 7.5: Generating code from expressions
  5. Sec. 7.6: Translating statements
  6. Sec. 7.7: Logical operators
  7. Sec. 7.8: Advanced control statements
  8. Sec. 7.9: Translating structured data
  9. Sec. 7.10: Translating declarations
Machine-Code Generation
  Chapter 8
  1. Sec. 8.1: Intoduction
  2. Sec. 8.2: Conditional jumps
  3. Sec. 8.5: Opimisations
  Chapter 10:
  1. Sec. 10.1: Introduction
  2. Sec. 10.2: Activation records
  3. Sec. 10.3: Prologues, epilogues and call-sequences
  4. Sec. 10.4: Caller-saves versus callee-saves
Interpreters
  1. Types of Interpreters: Byte Code, Direct Threaded Code, Indirect Threaded Code.
  2. Register machines and Stack machines; JVM and Dalvik VMs
  3. Just-in-Time Compilers
The following topics will be covered as time permits:
Systems Software Linkers, loaders; static and dynamic linking; debuggers.