General Information

Instructor: Prof. Ronghui Gu
Lectures: CSB 451, Mon & Wed, 2:40pm ~ 3:55pm

Staff

Name Email Office hours Location
Prof. Ronghui Gu ronghui.gu@columbia.edu Th (1:00-2:00pm) 515 CSB
River Dillon Keefer (lead) rdk2123@columbia.edu NA NA
Amanda Liu (lead) al3623@columbia.edu F (2:00-4:00)pm Milstein 502
Jacob Michael Shiers jms2453@columbia.edu T (4:30-6:30pm) CS TA room
Justin Wong justin.wong@columbia.edu W (11:00-1:00pm) Milstein 502

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

4115Spring2019TA@lists.cs.columbia.edu

Overview

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.

Prerequisites

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.

Grades

TENTATIVE Syllabus (Subject to change!)

Date Session Lecture Due
Wed Jan 22 1 Intro  
Mon Jan 27 2 Translators  
Wed Jan 29 3 Basic Elements of PL  
Mon Feb 3 4 Lambda Calculus  
Wed Feb 5 5 Programming in OCaml  
Fri Feb 7 TA Review Session (Final Project) 7-8pm @ Hamilton 602
Mon Feb 10 6  
Wed Feb 12 7 Scanning  
Sat Feb 15 TA Review Session (OCaml) 5-6:30pm @ CSB 451
Mon Feb 17 8 Overview of Final Projects HW1
Wed Feb 19 9 NanoC Scanner MicroC Compiler
Mon Feb 24 10 Parsing  
Wed Feb 26 11 Language Proposal due 2/28
Mon Mar 2 12  
Wed Mar 4 13  
Mon Mar 9   Suspended (COVID-19)  
Wed Mar 11   Midterm Exam  
Mar 16 - 20   Spring Break HW2
Mar 23 - 25   Suspended (COVID-19)  
Mon Mar 30 14 Types and Static Semantics  
Wed Apr 1 15 IR Generation  
Mon Apr 6 16 Runtime Environments  
Wed Apr 8 17  
Mon Apr 13 18 MicroC  
Wed Apr 15 19  
Mon Apr 20 20  
Wed Apr 22 21 IR Optimization  
Mon Apr 27 22 Code Generation HW3
Mon Apr 29 23 Code Generation  
Mon May 4 24 Compiler Optimization  
Mon May 11     Final Exam (optional, make-up HW)
Thu May 14     LRM (optional, make-up HW)
Final Project
Mon May 18     Final Project Presentation