The course studies the principles, techniques and tools for compiler design and construction. Topics include lexical analysis, syntax analysis, parsing techniques, error recovery, semantic analysis, intermediate language, code generation, and optimization techniques. Students design and implement the phases of a compiler. Prerequisites: CS 415 - Principles of Programming Languages or CS 435 - Theory of Computation.