Instructor: Prof. Ronghui Gu
Lectures: CSB 451, Mon & Wed, 2:40pm ~ 3:55pm
|Prof. Ronghui Gufirstname.lastname@example.org||Th (1:00-2:00pm)||515 CSB|
|River Dillon Keefer (lead)||email@example.com||F (4:00-6:00pm)||Milstein 502|
|Amanda Liufirstname.lastname@example.org||F (2:00-4:00)pm||Milstein 502|
|Jacob Michael Shiersemail@example.com||T (4:30-6:30pm)||CS TA room|
|Justin Wongfirstname.lastname@example.org||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:
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.
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.
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.
- 40%: Team Programming Project
- 20%: Midterm Exam
- 20%: Final Exam (cumulative, in-class)
- 20%: Three individual homework assignments
TENTATIVE Syllabus (Subject to change!)
|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|