In this course, students learn about the phases of a modern programming language compiler, with an emphasis on techniques widely used in practice. Students will learn about implementing compiler passes in a real compiler framework. The course project will require students to implement a complete compiler from scratch for a simple programming language, targeting a real machine assembly.