Week 1 5/9, 5/11, 5/13 1.1 -- The Art of Language Design 1.2 -- The Programming Language Spectrum 1.3 -- Why Study Programming Languages 1.4 -- Compilation and Interpretation 1.5 -- Programming Environments 1.6 -- An Overview of Compilation Week 2 5/16, 5/18, 5/20 2.1 -- Specifying Syntax: Regular Expressions and Context-Free Grammars 2.2 -- Scanning 2.3 -- Parsing 2.4 -- Theoretical Foundations Week 3 5/23, 5/25, 5/27 3.1 -- The Notion of Binding Time 3.2 -- Object Lifetime and Storage Management 3.3 -- Scope Rules 3.4 -- Implementing Scope 3.5 -- Meaning of Names within a Scope 3.6 -- The Binding of Referencing Environments 3.7 -- Macro Expansion 3.8 -- Separate Compilation Week 4 6/1, 6/3 (May 30 is a holiday) 4.1 -- The Role of the Semantic Analyzer 4.2 -- Attribute Grammars 4.3 -- Evaluating Attributes 4.4 -- Action Routines 4.5 -- Space Management for Attributes 4.6 -- Tree Grammars and Syntax Tree Decoration Week 5 6/6, 6/8, 6/10 6.1 -- Expression Evaluation 6.2 -- Structured and Unstructured Flow 6.3 -- Sequencing 6.4 -- Selection 6.5 -- Iteration 6.6 -- Recursion 6.7 -- Nondeterminacy Week 6 6/13, 6/15 7.1 -- Type Systems 7.2 -- Type Checking 7.3 -- Parametric Polymorphism 7.4 -- Equality Testing and Assignment (6/17 midterm) Week 7 6/20, 6/22, 6/24 8.1 -- Records (Structures) 8.2 -- Arrays 8.3 -- Strings 8.4 -- Sets 8.5 -- Pointers and Recursive Types 8.6 -- Lists 8.7 -- Files and Input/Output Week 8 6/27, 6/29, 7/1 9.1 -- Review of Stack Layout 9.2 -- Calling Sequences 9.3 -- Parameter Passing 9.4 -- Exception Handling 9.5 -- Coroutines 9.6 -- Events Week 9 7/6, 7/8 (7/4 Holiday) 10.1 -- Object-oriented Programming 10.2 -- Encapsulation and Inheritance 10.3 -- Initialization and Finalization 10.4 -- Dynamic Method Binding 10.5 -- Mix-In Inheritance 10.6 -- True Multiple Inheritance 10.7 -- Object-Oriented Programming Revisited Week 10 7/11, 7/13, 7/15 11.1 -- Historical Origins 11.2 -- Functional Programming Concepts 11.3 -- A Bit of Scheme 11.4 -- A Bit of OCaml 11.5 -- Evaluation Order Revisited 11.6 -- Higher-Order Functions 11.7 -- Theoretical Foundations 11.8 -- Functional Programming in Perspective Week 11 7/18, 7/20, 7/22 12.1 -- Logic Programming Concepts 12.2 -- Prolog 12.3 -- Theoretical Foundations 12.4 -- Logic Programming in Perspective Week 12 7/25, 7/27, 7/29 14.1 -- What is a Scripting Language? 14.2 -- Problem Domains 14.3 -- Scripting the World Wide Web 14.4 -- Innovative Features Week 13 8/1, 8/3 15.1 -- Back-End Compiler Structure 15.2 -- Intermediate Forms 15.3 -- Code Generation 15.4 -- Address Space Organization 15.5 -- Assembly 15.6 -- Linking 15.7 -- Dynamic Linking (8/5)