Principles and design techniques for compilers. Compiler organization, compiler writing tools, scanning, parsing, semantic analysis, run-time storage organization, memory management, code generation and optimization. Students implement a substantial portion of a compiler in a project. Prerequisites CP213, CP216. Exclusions CP400k.