Description
Prerequisite: Introduction to Computer Programming (COMP 2010) or equivalent and permission of the instructor. Compilers are often known as translators—and for good reason: Their job is to take programs written in one language and translate them to another language (usually assembly or machine language) that a computer can execute. It is, perhaps, the ideal meeting between the theoretical and practical sides of computer science. Modern compiler implementation offers a synthesis of: 1) language theory: how languages (both natural languages and programming languages) can be represented on, and recognized by, a computer; 2) software design and development: how practical software can be developed in a modular way—for example, how components of one compiler can be connected to components of another compiler to form a new compiler; and 3) computer architecture: understanding how modern computers work. In this course, we will write a program implementing a nontrivial compiler for a novel prog