Instructor: Prof. Ronghui Gu
Lectures: Lerner Cinema, Mon & Wed, 4:10pm ~ 5:25pm
|Prof. Ronghui Guemail@example.com||Thu (3:00-4:00pm)||zoom|
|Hao Zhoufirstname.lastname@example.org||Mon (1:00-3:00pm) (occasionally starts 30 mins late)||zoom|
|Weicheng Zhaoemail@example.com||Fri (9:30-11:30am)||zoom|
|Gregory Scharefirstname.lastname@example.org||Wed (12:00-2:00pm)||Milstein 502 (on Barnard campus)|
|Zixuan Zhangemail@example.com||Tue (13:30-15:30pm)||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:
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%: Three individual homework assignments
- 20%: Midterm Exam
- 20%: Final Exam (cumulative)
TENTATIVE Syllabus (Subject to change!)
|Wed Sept 7||1||Intro|
|Mon Sept 12||2||Translators|
|Wed Sept 14||3||Basic Elements of PL|
|Mon Sept 19||4||Lambda Calculus|
|Wed Sept 21||5||Programming in OCaml I|
|Mon Sept 26||6||Programming in OCaml II|
|Wed Sept 28||7||Scanning||Language Proposal|
|Mon Oct 3||8||NanoC Scanner|
|Wed Oct 5||9||Parsing I||HW1|
|Mon Oct 10||10||Parsing II|
|Wed Oct 12||Final Project and OCaml Review Session|
|Mon Oct 17||11||Parsing III|
|Wed Oct 19||12||NanoC Parser|
|Mon Oct 24||13||Types and Static Semantics I||HW2 Q1.zip|
|Wed Oct 26||14||Types and Static Semantics II||LRM|
|Mon Oct 31||Midterm|
|Wed Nov 2||15||MicroC Semantics Checker I|
|Mon Nov 7||Holiday|
|Wed Nov 9||16||MicroC Semantics Checker II|
|Mon Nov 14||17||IR Generation|
|Wed Nov 16||18||MicroC I|
|Mon Nov 21||20||MicroC II||Hello World Front-end|
|Wed Nov 23||Holiday|
|Mon Nov 28||21||Runtime Environments I|
|Wed Nov 30||22||Runtime Environments II|
|Mon Dec 5||23||IR Optimization||HW3|
|Wed Dec 7||24||Code Generation|
|Mon Dec 12||Final Exam|
|Wed Dec 20||Final Project|