COMS W4115 Programming Languages and Translators

Spring 2019

General Information

Instructor: Prof. Ronghui Gu
Lectures: Mudd 833, Mon & Wed, 2:40pm ~ 3:55pm


Name Email Office hours Location
Prof. Ronghui Gu Th (1-2) 515 CSB
Justin Wong (lead) M (7-8) & T (2-3) 486 CSB (Clic Lab)
Ryan Bernstein (lead) W & F (11-12) 486 CSB (Clic Lab)
Lauren Bree Arnett 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.

Suggested Text

You don't need to buy textbooks since all the materials will be covered by the lecture notes.


  • 40%: Team Programming Project
  • 20%: Midterm Exam
  • 20%: Final Exam (cumulative)
  • 20%: Three individual homework assignments

TENTATIVE Syllabus (Subject to change!)

Date Session Lecture Due
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

Sample Proposals