C.22 O1: Compiler Introduction (Syntax Analysis, Static Semantics)
Synopsis
- Program is just a stream of characters
- Lexer forms “words” (called tokens) from characters and can already detect lexical errors.
- Parser checks if token stream adheres to concrete syntax. If yes, it builds the AST, if not, it reports errors.
- However, not all syntactically correct programs are valid C programs.
- They can violate static semantics: types don’t match.
- Analyzing static semantics (“semantic analysis”) can detect such errors and discard erroneous programs.
- As a side effect, it elaborates types which we need later on for code generation.
- Language is statically type-safe if well-typed programs don’t get stuck.
- Discuss examples of C programs that are well-typed but get stuck and discuss how Java solves these problems.
- Introduce type system for C0 (Section 6.6): relation of a type environment, an expression, and its type.
- Define typing rules inductively over the syntax.
Sections Covered
Section 9.1, Section 6.6