General Information

Instructor: Prof. Ronghui Gu
Lectures: Schermerhorn Hall Room 501, Mon & Wed, 4:10pm ~ 5:25pm

Staff

Name Email Office hours
Prof. Ronghui Gu rg3123@columbia.edu Tue (10:00-11:00am) at zoom
Christopher J Yoon (lead) cjy2129@columbia.edu Tue (5:00-6:00pm) & Thu (4:00-5:00pm) at Mudd 122 & Mon (8:00-9:00pm) at zoom
Seoyoung Kweon sk4865@columbia.edu Wed (1:00-3:00pm) at DSI Lounge
Jennifer Duan jd3794@columbia.edu Tue (3:00-4:00pm) at CS TA room & Thu (10:00-11:00am) at zoom
Runzhou Tao rt2758@columbia.edu Fri (10:00-12:00am) at CS TA room

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

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