Week 1

Monday 08/17
Class 1.1: Programming Languages
Wednesday 08/19
HW 1.1 due before class
Wednesday 08/19
Class 1.2: Language Specification
Friday 08/21
Lab 1.1: Specifications for language with Just Strings

Week 2

Monday 08/24
HW 1.2 due before class
Monday 08/24
Class 1.3: LLVM intro
Wednesday 08/26
Class 1.4: Scanning "by hand" in Java
Wednesday 08/26
Lab 1.1 due 23:59
Friday 08/28
Lab 1.2: Interpreter for a Just Strings language

Week 3

Monday 08/31
HW 1.3 due before class
Monday 08/31
Class 1.5: LLVM IR and C code relationship
Wednesday 09/02
Class 2.1: Scanning
Wednesday 09/02
Lab 1.2 due 23:59
Friday 09/04
Lab 1.3: Compiler for Just Strings language

Week 4

Monday 09/07
Labor Day Holiday
Wednesday 09/09
HW 2.1 due before class
Wednesday 09/09
Class 2.2: Syntax analysis (scanner DFA and parse tree)
Wednesday 09/09
Lab 1.3 due 23:59
Friday 09/11
Lab 2.1: Spec for StringBoolVar Language

Week 5

Monday 09/14
HW 2.2 due before class
Monday 09/14
Class 2.3: Top-down and bottom-up parsing
Wednesday 09/16
Class 2.4: Using ANTLR and Maven
Wednesday 09/16
Lab 2.1 due 23:59
Friday 09/18
Lab 2.2: Interpreter for a StringBoolVar language

Week 6

Monday 09/21
HW 2.3 due before class
Monday 09/21
Class 2.5: Introducing the Scheme language
Wednesday 09/23
Class 2.6: Scheme practice
Wednesday 09/23
Lab 2.2 due 23:59
Friday 09/25
Lab 2.3: Compiler for a StringBoolVar language

Week 7

Monday 09/28
HW 3.1 due before class
Monday 09/28
Class 2.7: Functional programming
Wednesday 09/30
Class 3.1: Abstract Syntax Trees
Wednesday 09/30
Lab 2.3 due 23:59
Friday 10/02
Lab 3.1: Spec and Interpreter for an Iffy Language

Week 8

Monday 10/05
HW 3.2 due before class
Monday 10/05
Class 3.2: Introduction to Rust
Wednesday 10/07
Class 3.3: Rust compile-time memory management: ownership and borrowing
Wednesday 10/07
Lab 3.1 due 23:59
Friday 10/09
Lab 3.2: Compiler for Iffy language

Week 9

Monday 10/12
Columbus Day Holiday
Wednesday 10/14
HW 3.3 due before class
Wednesday 10/14
Class 3.4: Memory management in LLVM with alloca/load/store and malloc/free
Wednesday 10/14
Lab 3.2 due 23:59
Friday 10/16
Midterm exam

Week 10

Monday 10/19
HW 4.1 due before class
Monday 10/19
Class 3.5: LLVM basic blocks and branching
Wednesday 10/21
Class 4.1: Closures and lambdas in Scheme and elsewhere
Friday 10/23
Lab 4.1: Syntax for a functional language

Week 11

Monday 10/26
HW 6.1 due before class
Monday 10/26
Class 4.2: Frames and closures
Wednesday 10/28
Class 4.3: Objects with lambda and message passing
Wednesday 10/28
Lab 4.1 due 23:59
Friday 10/30
Lab 4.2: Interpreter for functional language

Week 12

Monday 11/02
Class 4.4: Currying and finishing up closures
Wednesday 11/04
Class 5.1: Static and dynamic typing
Wednesday 11/04
Lab 4.2 due 23:59
Friday 11/06
Lab 5.1: Numbers and Built-in functions

Week 13

Monday 11/09
Class 5.2: Polymorphism
Wednesday 11/11
Lab 5.1 due 23:59
Wednesday 11/11
Veterans Day Holiday
Friday 11/13
Lab 6.1: Esoteric languages

Week 14

Monday 11/16
Class 5.3: Generics and templates (parametric polymorphism)
Wednesday 11/18
Class 6.1: Optimization pipeline and phi nodes
Wednesday 11/18
Lab 6.1 due 23:59
Friday 11/20
Lab

Week 15

Monday 11/23
Class 6.2: Loop optimizations
Tuesday 11/24
Class 6.3: LLVM Backend and Register Allocation
Wednesday 11/25
Thanksgiving break
Thursday 11/26
Thanksgiving Holiday
Friday 11/27
Thanksgiving break

Week 16

Monday 11/30
Class
Wednesday 12/02
Class
Friday 12/04
Lab

Week 17

Monday 12/07
Course recap and evals