CS320 Principles of Programming Languages Fall 2019

Instructor: Andrew Tolmach

Teaching Assistants

Quick Pointers

Course Information

Course Catalog Description

Syntax and semantics. Compilers and interpreters. Programs as data. Regular expressions and context free grammars. Programming paradigms, including procedural, functional, and object-oriented programming. Type systems, including dynamic and static typing disciplines. Binding, scope, data abstraction, and modularity. Denotational, operational, and axiomatic semantics. Introduction to program correctness.


There is no required textbook. For those who like having a textbook for reference, the following book is recommended:
Kenneth C. Louden and Kenneth A. Lambert, Programming Languages: Principles and Practice, 3rd ed., Course Technology CENGAGE Learning, 2012.


Officially: CS202, and CS251, passed with grades of C or better. CS201 is also strongly advised. It is assumed that you have substantial programming experience in C++ and some experience in C.

Requirements and Grading

Labs and Homework


This schedule is tentative and subject to change.
Week Lecture Date Topic Textbook Chapters
1 Oct 1 Course Introduction; Java Introduction; Stack Machines 1,2
2 Oct 8 Language Syntax; Context-free Grammars; Regular Expressions 6
3 Oct 15 Data types; Type constructors; Recursive types; Garbage collection 8.1-4,7.7,10.5
4 Oct 22 Polymorphism; Generics; Modules; Data Abstraction 8.6,8.8-9,11
5 Oct 29 Object-oriented programming; Dynamic vs. static typing 5
6 Nov 5 Midterm exam
7 Nov 12 Control: Statements; Functions; Iterators; Exceptions 9,10
8 Nov 19 Functional Programming 3
9 Nov 26 Compilation; Static Analysis; Type checking and Inference 8.6-8
(Thanksgiving holiday week: no labs)
10 Dec 3 Formal Semantics; Program Correctness 12
11 Dec 10 Final exam 10:15-12:05


Java Language Resources


Individual work

Discrimination and Misconduct