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 F (4:00-6:00pm) Milstein 502
Amanda Liu 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 NanoC Parser  
Wed Mar 4 13 Types and Static Semantics  
Mon Mar 9 14 NanoC Semantics Analysis HW2
Wed Mar 11   Midterm Exam  
Mar 16 - 20   Spring Break  
Mon Mar 23 15 IR Generation  
Wed Mar 25 16 NanoC IR Generation  
Wed Mar 25 16 IR Optimization  
Mon Mar 30 17  
Wed Apr 1 18 Runtime Environments  
Mon Apr 6 19  
Wed Apr 8 20 Code Generation  
Mon Apr 13 21 Local Optimization  
Wed Apr 15 22  
Mon Apr 20 23 Global Optimization HW3
Wed Apr 22 24  
Mon Apr 27 25 Compiler Verification  
Mon Apr 29 26  
Mon May 4   Final Exam