Class Lectures and Reading Assignments
CS 51530
Programming Languages, Interpreters and Compilers
Spring, 2021

This page documents what we do in class. It contains code that we will discuss in class, reading assignments, simple homework exercises that you can work on for practice and exam preparation (not for credit), links to other sources of information, etc.

Here is a link to today's video lecture.

Here is the code for sorting triples of numbers using Language_9, Racket, Java, C, Rust, and Haskell.

Here is the small Java example we did of Java's "runtime type checking".

Here is a link to today's video lecture.

Here is a link to today's video lecture.

Here is Language_9 which adds a list data type to Language_8. This lets us write functional examples like map, reduce, fold, filter.

Here is a link to today's video lecture.

Here are notes from class about curried functions.

Here is a link to today's video lecture.

Here are the JavaScript, C, Language_7 amd Language_8 examples we worked with in class.

Here is a link to today's video lecture.

Here are JavaScript visualizations of makeAdder and makeCounter along with the Language_8 versions.

Here is a link to today's video lecture.

See the homework assignment page for your fifth programming assignment.

Here is a link to today's video lecture.

Here is a link to today's video lecture.

Here is a link to today's video lecture.

Here are the Language_7e examples from class.

Here is Language_7e, a language somewhat between Language_7 and language_8.

Here is a link to today's video lecture.

Here are some C and Language_7 examples of "first class functions".

Here is a link to today's video lecture.

Here are the notes and examples from class today.

Spring Break - No class today.

Spring Break - No class today.

Here is a link to today's video lecture.

See the homework assignment page for your fourth programming assignment.

Here is a link to today's video lecture.

Here is the example we used to compare lexical with dynamic scope.

Here is very good, brief summary of lexical and dynamic scope and their history.

The following zip file defines a language with anonymous, nested, first class functions (that is, closures).

Here is a link to today's video lecture.

I added several more Language_7 demo programs to the Language_7 zip file.

Here is a link to today's video lecture.

Here are some notes from class.

Here is a link to today's video lecture.

Here are some notes from class.

Here is a link to today's video lecture.

See the homework assignment page for your third programming assignment.

Here are some notes from class.

Here is a link to today's video lecture.

The following zip file contains files that define a langauge that adds global first class functions to Language 6.

Here is a link to today's video lecture.

The following zip file contains files that define a langauge that adds conditional and loop expressions to Language 5.

Here are some notes from class about the value of a conditional operator.

Here is a link to today's video lecture.

Here are some notes from class about Language-5.

Here is a link to today's video lecture.

Language-4 define a language of arithmetic and boolean expressions with local and global variables. Language-5 modifies the scoping rules for local variables from Language-4 to create lexical scope.

Here are some notes from class about Language-4.

Here is a link to today's video lecture.

Today we will carefully step through the code for the interpreter (evaluator) for Language_3. In particular, we want to understand how the interpreter implements global variables by using an Environment object.

Here is a link to today's video lecture.

See the homework assignment page for your second programming assignment.

Here is the simple Java code that we wrote during class.

Here is a link to today's video lecture.

The following zip file contains files that define a language of arithmetic and boolean expressions with global variables. This language is the basis for your second programming assignment.

Here is the list of programming languages that we will build this semester.

Look at the following chapters from Crafting Interpreters. The interpreters we are writing in this course are similar to the interpreter in that book. The biggest difference is that his Lox language has a C-like infix syntax and our languages have a (much easier to parse) Lisp-like prefix syntax (what we're calling a "tree language").

Here is a link to today's video lecture.

The following zip file contains files that define a language of arithmetic and boolean expressions.

Here are notes from class about Language 1.

Here is a link to today's video lecture.

The following zip file contains files that define a language of arithmetic expressions.

No class today, Martin Luther King Jr. Day.

Here is a link to today's video lecture.

Here is a link to today's video lecture.

See the homework assignment page for your first programming assignment.

Read the following references about the tree data structure.

Read the following references about grammars.

The following zip file contains files that define a "language of trees". The first programming assignment is based on these examples.

Here are the notes that we worked with in class today.