Overview of compilers: purpose, examples, phases of compilation, and intermediate representations.
Formal language theory: Chomsky hierarchy, regular expressions, BNF grammars, and left factoring.
Lexical analysis and parsing: bottom-up, top-down (recursive descent), look-ahead, parser generators including ANTLR.
Tree representations and algorithms: parse tree, abstract syntax tree, homogeneous vs. heterogeneous node representation, traversals, visitor and listener patterns, pattern matching, and rewriting.
Semantic analysis: type checking, type inference, type promotion, symbol tables, scopes, forward references, mutual and open recursion, strongly-connected components, and topological sort.
Optimization of intermediate representation: three address code, SSA form, common sub-expression elimination, constant propagation, dead code elimination.