This course studies the compiling process for high-level languages. Topics include lexical analysis, syntax analysis, semantic analysis, symbol tables, intermediate languages, optimization, code generation, and run-time systems. Students will be expected to use compiler tools to implement the front end — and to write a program to implement the back end — of a compiler for a recursive programming language. Undergraduate credit may not be earned for both this course and for CS 544. This course will be offered in 2022-23, and in alternating years thereafter.