General Information

Instructor: Prof. Ronghui Gu
Lectures: Schermerhorn Hall Room 501, Mon & Wed, 5:40pm ~ 6:55pm

Staff

Name Email Office hours Location
Prof. Ronghui Gu ronghui.gu@columbia.edu Fri (2:00-3:00pm) zoom
Hao Zhou (lead) hz2754@columbia.edu Mon (1:00-3:00pm) zoom
Sheel Pethe sp3922@columbia.edu Thu (10:00am-12:00pm) zoom
Zixuan Zhang zz2888@columbia.edu Tue (13:30-15:30pm) zoom
Hu Zheng hu.zheng@columbia.edu Wed (15:00-17:00pm) zoom
Yiming Fang yf2484@columbia.edu Mon (10:30am-12:30pm) zoom
Yunlan Li yl4387@columbia.edu Tue (6:00pm-8:00pm) 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:

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 19 1 Intro  
Mon Jan 24 2 Translators  
Wed Jan 26 3 Basic Elements of PL  
Mon Jan 31 4 Lambda Calculus  
Wed Feb 2 5 Scanning  
Mon Feb 7 6 Programming in OCaml I  
Wed Feb 9 7 Programming in OCaml II  
Mon Feb 14 8 NanoC Scanner Language Proposal
Wed Feb 16 9 Parsing I  
Mon Feb 21 10 Parsing II  
Wed Feb 23 11 Parsing III  
Fri Feb 25   OCaml Review Session 3:00-5:00 PM @ zoom
Wed Feb 28   Final Project Review Session 3:00-5:00 PM @ zoom
Mon Feb 28 12 NanoC Parser HW1
Wed Mar 2 13 Types and Static Semantics I LRM (due Mar 6)
Mon Mar 7 14 Midterm  
Wed Mar 9 15 Types and Static Semantics II  
Mar 14 - 18   Spring Break HW2 (due Mar 18) Q1.zip
Mon Mar 21 16 MicroC Semantics Checker  
Wed Mar 23 17 IR Generation  
Mon Mar 28 18 Runtime Environments I  
Wed Mar 30 19 Runtime Environments II Hello World Front-end
Mon Apr 4 20 MicroC I  
Wed Apr 6 21 MicroC II  
Mon Apr 11 22 IR Optimization I  
Wed Apr 13 23 IR Optimization II  
Mon Apr 18 24 Code Generation I HW3
Wed Apr 20 25 Code Generation II  
Mon Apr 25 26 Compiler Optimization  
Wed Apr 27 27 Compiler Optimization II  
Mon May 2 28 Final Exam  
Thu May 12     Final Project for Graduating Students
Sun May 15     Final Project
Mon May 16     Final Project Presentation