This unit introduces the main goals of the course and the idea of designing and implementing a programming language. Some major concepts are the distinction between syntax and semantics, the need for careful, clear specs free of underspecified behavior, and the role of intermediate languages in compiler design.
We will get an intro to the LLVM IR language and design and implement a new language that supports just basic string operations.
Classes
- Class 1.1: Programming Languages (Monday 17 August)
- Class 1.2: Language Specification (Wednesday 19 August)
- Class 1.3: LLVM intro (Monday 24 August)
- Class 1.4: Scanning "by hand" in Java (Wednesday 26 August)
- Class 1.5: LLVM IR and C code relationship (Monday 31 August)
- Class 1.6: More with LLVM (Wednesday 02 September)
Homeworks
- HW 1.1 (due before class on Wednesday 19 August)
- HW 1.2 (due before class on Monday 24 August)
- HW 1.3 (due before class on Monday 31 August)
Labs
- Lab 1.1: Specifications for language with Just Strings (due 23:59 on Wednesday 26 August)
- Lab 1.2: Interpreter for a Just Strings language (due 23:59 on Wednesday 02 September)
- Lab 1.3: Compiler for Just Strings language (due 23:59 on Wednesday 16 September)