Compilers / Programming Language Implementation
The goal of this course is to help students gain an understanding of the basic structure of a compiler, develop the capability to design and implement the various pieces of a compiler, and understand more fully how high-level languages are implemented.
Each student will write a complete compiler for a subset of the Scheme programming language, producing as its result assembly code for a real machine.
Compilation will take place via a sequence of transformation passes over the code. The input to the first pass is the Scheme source code; the output from the last pass is assembly code. Each intermediate language in between will be closer to assembly code than the ones before, and more tied to the run-time architecture.
Individuals enrolled the graduate version of the course will be asked to implement more complex versions of certain algorithms.
The prerequisite for this course is a course on programming languages, e.g., C311 or B521, or, as always, permission of the instructor. Knowledge of Scheme and experience with assembly language programming are useful.