General Information
Instructor: Prof. Ronghui Gu
Lectures: Schermerhorn Hall Room 501, Mon & Wed, 5:40pm ~ 6:55pm
Staff
Name | 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.
-
Compilers: Principles, Techniques, and Tools by Alfred V. Aho, Monica Lam, Ravi Sethi, and Jeffrey D. Ullman (Second Edition).
-
Modern Compiler Implementation in ML by Andrew W. Appel.
Grades
- 40%: Team Programming Project
- 20%: Three individual homework assignments
- 20%: Midterm Exam
- 20%: Final Exam (cumulative)
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 |