The module will provide a through introduction to the principles of compiler design, with an emphasis on general solutions to common problems as well as techniques for putting the extensive theory into practice.
A successful student will have acquired the skills to understand, develop, and analyze recognizers for programming languages. The student will also be able to deploy efficient and methodical techniques for integrating semantic analysis into the afore-mentioned recognizers, and generate low-level code for most constructs that characterise imperative and functional programming languages.
- Languages and Grammars: regular expressions, context-free grammars, BNF.
- Parsing: top-down and bottom-up techniques.
- Semantic Analysis: attribute grammars, translation schemes, type inference, symbol tables.
- Code Generation: run-time environment, intermediate code, register allocation, optimization.
- Programming Paradigms: issues in the compilation of imperative, functional, and object-oriented languages.