COP 4555 Summary 1. Functional programming in SML - checklist for programming with recursion - efficiency; using "let" to avoid recomputation - polymorphic types, SML 97 value restriction - datatype 2. Syntax - context-free grammars - ambiguity - recursive descent parsing 3. Semantics - natural semantics for Simple Imperative Language and PCF, interpreter - expressions, commands, declarations - variables, L-value, R-value - environments, stack frames, lifetime, tail recursion 4. Types - dynamic type checking - static type checking: typing rules, type checking, type inference