I. orientation II. A Simple Interpreter (3.1) A. overview B. language design C. implementation 1. domains 2. interpreter itself 3. environments a. definition and implementation b. initial environment 4. primitives a. tracing it (do on computer) 5. front-end (3.2) a. non-interactive b. read-eval-print loop III. Conditional Evaluation (3.3) A. semantic implications and variations IV. Local Binding (3.4) A. syntax B. scoping C. semantic implications and variations V. Procedures (3.5) A. syntax B. semantics 1. scoping 2. procedure values 3. the interpreter C. semantic implications and variations 1. examples 2. lexical addresses (exercises 3.23-3.28) 3. dynamic binding (aka. dynamic scoping, exercises 3.30-3.33) a. motivation b. history c. domains d. behavior e. the funarg problem f. reasoning problems (exercise 3.33) VI. Recursion (3.6) A. the problem B. syntax C. semantics D. implementation 1. procedural representation 2. AST representation 3. Optimizations E. semantic implications and variations VII. Variable Assignment (3.7) A. syntax B. semantics 1. domains 2. implementation a. reference ADT b. environment ADT 3. interpreter C. semantic implications and variations 1. result 2. references and call-by-value 3. sequencing (exercise 3.39) 4. explicit allocation, dereferecing (as in BCPL, exercise 3.41) 5. arrays (exercise 3.42) 6. constant bindings (exercise 3.45) 7. dynamic assignment or fluid binding (exercise 3.47) 8. semantic ideas (exercise 3.48)