Describing programming languages and other formal languages using regular expressions and grammars.
Methods for lexical and syntax analysis and their relationships to models of computation such as finite automata and pushdown automata. Syntax analysis using LL and LR parsing. Tools such as scanner and parser generators.
Semantic analysis, translation into intermediate code, instruction selection and register allocation.
The student should be able to
- explain the steps involved in the compilation process, from source code to target code,
- understand a given grammar or regular expression and determine which strings belong to the corresponding formal language,
- write regular expressions and grammars for various formal languages, such as programming languages,
- choose an appropriate formal notation to describe a given formal language,
- explain LL-analysis and LR-analysis,
- use scanner and parser generators,
- explain the aspects of the architecture of a computer or a virtual machine relevant to a compiler,
- write programs that perform various steps of the compilation process.