Instructor: Prof. Ronghui Gu
Lectures: Mudd 833, Mon & Wed, 2:40pm ~ 3:55pm
|Prof. Ronghui Gufirstname.lastname@example.org||Th (1-2)||515 CSB|
|Justin Wong (lead)||email@example.com||M (7-8) & T (2-3)||486 CSB (Clic Lab)|
|Ryan Bernstein (lead)||firstname.lastname@example.org||W & F (11-12)||486 CSB (Clic Lab)|
|Lauren Bree Arnettemail@example.com||Th (3-4)||486 CSB (Clic Lab)|
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 language of your own design 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)
- 20%: Three individual homework assignments
|Wed Jan 23||1||Intro|
|Mon Jan 28||2||Language Translators|
|Wed Jan 30||3||Basic Elements of PL|
|Some Outstanding Projects|
|Mon Feb 4||4||Programming in OCaml|
|Wed Feb 6||5||"|
|Mon Feb 11||6||"|
|Wed Feb 13||7||"||Proposal|
|Mon Feb 18||8||Scanning|
|Wed Feb 20||9||"||HW1|
|Mon Feb 25||10||Parsing|
|Wed Feb 27||11||"|
|Mon Mar 4||12||"|
|Wed Mar 6||13||Types and Static Semantics||LRM|
|Mon Mar 11||14||"||HW2|
|Wed Mar 13||Midterm Exam|
|Mar 18 - 22||Spring Break|
|Mon Mar 25||15||Intermediate Code Generation|
|Wed Mar 27||16||Runtime Environments I|
|Mon Apr 1||17||The NanoC Compiler (zip)|
|Wed Apr 3||18||"|
|Mon Apr 8||19||"||Hello World|
|Wed Apr 10||20||The MicroC Compiler (zip)|
|Mon Apr 15||21||"|
|Wed Apr 17||22||Runtime Environments II|
|Mon Apr 22||23||IR Optimization||HW3|
|Wed Apr 24||24||"|
|Mon Apr 29||25||Code Generation|
|Wed May 1||26||Compiler Optimization|
|Mon May 6||Final Exam|
|Wed May 15||Project Presentation||Project Reports|