Compiler · C++
Tiger
A compiler does not just reject a wrong program: it has to say where, and why.
What I did
- The full chain, from source to output. Lexical and syntactic analysis, building the abstract syntax tree, then the passes that walk and rewrite it.
- Semantic analysis. Binding identifiers to their declaration under the scoping rules, type checking, and escape analysis — the variables a nested function captures, which therefore cannot stay on the stack.
- Tree transformations. Desugaring surface constructs down to a simpler core, tree cloning, and handling the language's object constructs.
Stack
C++FlexBisonAutomakeVisitors