CS 341 - Principles of Programming Languages
Readings


Unless otherwise noted, all readings are from the course text.  Each reading assignment should be completed before the class on the date indicated.  These readings are subject to change; check here for updates.  If a reading assigned in class does not match the reading assignment here, the reading assigned in class supercedes.
Class Date Topic Readings (parenthesized
reading are optional)
1 Course overview, Scheme introduction  
2 Scheme introduction, dynamic typing Essentials of Programming Languages forward, Scheme tutorial through pairs and lists
3 Scheme introduction, lambda expressions remainder of Scheme tutorial
4 Functions as first-class objects, functional language paradigm, Scheme exercises  
5 Scheme exercises, lambda expressions within let-blocks to create proto-objects  
6 More proto-objects in Scheme, Scheme exercises  
7 JavaCC introduction, front end structure, tokens, regular expressions, lexical analysis, context free grammars, syntactic analysis, calculator JavaCC template and addition of computation. Chapter 1 through 1.2.3 (Semantic Analysis) from Aho et al. "Compilers: principles, techniques, & tools" (provided), Figure 1.7, skim meanings of terms "Compiler: Front end", "Lexical Analysis", "Regular Expression: Basic concepts", "Parsing: Computer languages", "Context-free grammar"
8 Abstract syntax trees, addition of AST nodes to JavaCC template, calculator interpreter example  
9 Completion of calculator interpreter, programming language design  
10 SLP (straight-line program) language interpreter implementation  
11 Completion of SLP interpreter, lookahead for resolving choice conflicts  
12 Student HW1 Programming Language presentations  
13 Student HW1 Programming Language presentations  
14 Lookahead tutorial  
15 Interpretation of lambda expressions and procedure calls, closures, advanced regular expression tutorial (finite state automata to left regular grammar through algebraic substution to regular expression)  
16 Completion of regular expression exercise, interpretation of pairs/lists, interpretation of objects as field and class membership maps  
17 Aspect-Oriented Programming; Visitor Pattern, begin SLP to C++ translator (example of language prototyping via piggybacking on another language) Visitor Pattern Wikipedia article, Reel portion of Virginia Reel video (seriously!)
18 Complete SLP to C++ translator, Operator precedence in language design via grammar heirarchy  
19 Python Programming: Introduction  
20 Python Programming: Abstract base classes, object construction techniques  
21 Memory Management: Overview, Manual (C malloc/free), Automatic (Java garbage collection)  
22 Memory Management: Rust - Understanding Ownership Rust Book Chapter 4: Understanding Ownership
23 Memory Management: Rust - Smart Pointers Rust Book Chapter 15: Smart Pointers
24 Rust Programming  
25 Review OOPig.py work in class; Modern Fortran  
26 Informal language design project presentations  
27 Course overview, evaluations, take-home final description  
28 Rust 6 algorithms evaluation  
Final   Final Exam Schedules can be found on the Registrar page under "Resources" (Fall, Spring)
Section A Final: Saturday December 14, 2024, 8:30 a.m. - 11:30 a.m.