CS320 Principles of Programming Languages Winter 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.


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/or C.

Requirements and Grading

Labs and Homework


This schedule is tentative and subject to change.
Week Lecture Date Topic
1 Jan 8 Introduction; From C/C++ to Java
2 Jan 15 Language Specification and Implementation
3 Jan 22 Object-oriented Programming and Data Abstraction in Java
4 Jan 29 Scripting Languages: Python
5 Feb 5 Regular Expressions in Python
6 Feb 12 Review and Midterm exam
7 Feb 19 Functional Programming in Haskell
8 Feb 26 Algebraic data types in Haskell
9 Mar 5 Grammars and Syntax
10 Mar 12 Expressiveness, Computability and Formal Semantics
11 Mar 19 Final exam 10:15-12:05



Java Language Resources


Individual work

Discrimination and Misconduct