Instructor: Prof. Ronghui Gu
Lectures: CSB 451, Mon & Wed, 2:40pm ~ 3:55pm
|Prof. Ronghui Guemail@example.com||Th (1:00-2:00pm)||515 CSB|
|River Dillon Keefer (lead)||firstname.lastname@example.org||F (4:00-6:00pm)||Milstein 502|
|Amanda Liu (lead)||email@example.com||F (2:00-4:00)pm||Milstein 502|
|Jacob Michael Shiersfirstname.lastname@example.org||T (4:30-6:30pm)||CS TA room|
|Justin Wongemail@example.com||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||”|
|Wed Mar 4||13||”|
|Mon Mar 9||Suspended (COVID-19)|
|Wed Mar 11||Midterm Exam|
|Mar 16 - 20||Spring Break||HW2|
|Mar 23 - 25||Suspended (COVID-19)|
|Mon Mar 30||14||Types and Static Semantics|
|Wed Apr 1||15||IR Generation|
|Mon Apr 6||16||Runtime Environments|
|Wed Apr 8||17||”|
|Mon Apr 13||18||MicroC|
|Wed Apr 15||19||”|
|Mon Apr 20||20||IR Optimization||HW3|
|Wed Apr 22||21||”|
|Mon Apr 27||22||Code Generation|
|Mon Apr 29||23||Compiler Optimization|
|Mon May 4||24||”|