General Information

Instructor: Prof. Ronghui Gu
Lectures: Lerner Cinema, Mon & Wed, 4:10pm ~ 5:25pm


Name Email Office hours Location
Prof. Ronghui Gu Thu (3:00-4:00pm) zoom
Hao Zhou Mon (1:00-3:00pm) (occasionally starts 30 mins late) zoom
Weicheng Zhao Fri (9:30-11:30am) zoom
Gregory Schare Wed (12:00-2:00pm) Milstein 502 (on Barnard campus)
Zixuan Zhang Tue (13:30-15:30pm) zoom

Note: For any general questions related to assignments and projects, please send emails to the following TA mailing list using your Columbia email address:


The goal of PLT is to teach you both about the structure of computer programming languages and the basics of implementing compilers for such languages.

The course will focus mostly on traditional imperative and object-oriented languages, but will also cover functional and logic programming, concurrency issues, and some aspects of scripting languages. Homework and tests will cover language issues. You will design and implement a compiler in a semester-long team project.

While few of you will ever implement a full commercial compiler professionally, the concepts, techniques, and tools you will learn have broad application.


COMS W3157 Advanced Programming: You will be dividing into teams to build a compiler, so you need to have some idea how to keep this under control. Quick test: you need to know about Makefiles and source code control systems.

COMS W3261 Computability and Models of Computation: You will need an understanding of formal languages and grammar to build the parser and lexical analyzer. Quick test: you must know about regular expressions, context-free grammars, and NFAs.

Suggested Text

You don’t need to buy textbooks since all the materials will be covered by the lecture notes.


TENTATIVE Syllabus (Subject to change!)

Date Session Lecture Due
Wed Sept 7 1 Intro  
Mon Sept 12 2 Translators  
Wed Sept 14 3 Basic Elements of PL  
Mon Sept 19 4 Lambda Calculus  
Wed Sept 21 5 Programming in OCaml I  
Mon Sept 26 6 Programming in OCaml II  
Wed Sept 28 7 Scanning Language Proposal
Mon Oct 3 8 NanoC Scanner  
Wed Oct 5 9 Parsing I HW1
Mon Oct 10 10 Parsing II  
Wed Oct 12   Final Project and OCaml Review Session  
Mon Oct 17 11 Parsing III  
Wed Oct 19 12 NanoC Parser  
Mon Oct 24 13 Types and Static Semantics I HW2
Wed Oct 26 14 Types and Static Semantics II LRM
Mon Oct 31   Midterm  
Wed Nov 2 15 MicroC Semantics Checker I  
Mon Nov 7   Holiday  
Wed Nov 9 16 MicroC Semantics Checker II  
Mon Nov 14 17 IR Generation  
Wed Nov 16 18 MicroC I  
Mon Nov 21 20 MicroC II Hello World Front-end
Wed Nov 23   Holiday  
Mon Nov 28 21 Runtime Environments I  
Wed Nov 30 22 Runtime Environments II  
Mon Dec 5 23 IR Optimization HW3
Wed Dec 7 24 Code Generation  
Mon Dec 12   Final Exam  
Tues Dec 20     Final Project