Home

Knowing how to design and implement programming languages not only fosters a deeper understanding of the programming process itself, but it adds a new and powerful tool to the programmer’s toolbox: in some application domains, programming tasks amount to developing small languages that solve a specific class of problems, such as creating animations, optimizing complex matrix computations, or querying databases.                                                                      
                                                                                
The goal of this class is to introduce students to the design and implementation of programming languages, either via interpreters or via compilers. Design principles range over the different programming models available, including imperative, functional, dataflow, object-oriented, logical. Implementation techniques include abstract syntax representations, parsing, control structures, data abstraction mechanisms, types, environments and closures, optimization, code generation.             

Recent Announcements

Mar 28: Homework 5 is out. Due April 8, at the beginning of class. Homework 5 is to be done in teams, preferably the teams you have assembled for your project.

Mar 11: The page about the final project is up. I will be adding project suggestions in case you need some.

Feb 27: Homework 4 is out. Due March 11, at the beginning of class. Homework 4 is to be done in teams, preferably the teams you will be working with for your project.

Feb 13: Homework 3 is out. Due next Friday at the beginning of class. It looks long, but it really isn't, especially if you understand the parsers I described in class. (We'll see if the vigorous "yes" nods I got in answer to my "is this clear" were on the mark, I guess.)

Feb 4: Slides for this morning's lecture on lexical analysis are up, including sample code. I've tried to comment the code since there are a few interesting things going on there.
 
Feb 1: Small change to the write-up of homework 2 to clarify a thing or two about simultaneous bindings in Question 2.

Jan 31: Homework 2 is out. Due next Friday at the beginning of class. Note that I ditched some of what I said in class this morning: after digesting the feedback on homework 1, I decided to not ask you to implement call-by-name evaluation, and instead focused on more straightforward things. 

Jan 31: Slides for this morning's lecture on functions are up, including sample code. Homework 2 to follow soon.

Jan 28: Lecture notes for this morning are up, with corrections. I've also added the code from lecture, for you to play with.

Jan 24: Homework 1 is out. Due next Friday at the beginning of class. Submission instructions in a few days.

Jan 24: Lecture notes for this morning are up, complete with corrections. Homework 1 will go out sometimes this evening.