We will study the algorithms and data structures employed throughout the various phases of a compiler, from syntax analysis to instruction selection. We will examine how a language's syntax and semantics guide the compilation process, and the trade-offs which exist between the efficiency, performance, safety and complexity of a compiler. In addition to studying the compilation process, this course offers a good exercise in software engineering.
Compilers are often large and complex systems, constituting numerous phases and analyses.
In order to reinforce the mathematical theory of compiler design and to gain experience in compiler construction, we will spend considerable time implementing topics covered. Both through homeworks and a required semester programming project , you may expect a considerable programming effort for this course. Modern Compiler Implementation , Appel, Cambridge University Press, 1998. You cannot use the C version. Project You will be required to complete a semester programming project which will constitute much of your grade in the course.