Formal languages, finite automata, context free grammars.
State, scope, extent, static and dynamic information, effects, mutability.
Basic operational semantics.
Abstraction mechanisms, modularity, contracts.
Types, invariants, program equivalence.
Tools for program analysis.
Examples of advanced features of programming languages.
After completion of the course, the student should be able to:
- formally describe languages and program behavior,
- precisely reason about state, effects, and mutation,
- reason about and use mechanisms for abstraction and modularization,
- define type systems formally,
- prove type soundness,
- reason about program equivalence,
- define and reason about contracts,
- discuss open questions about advanced language features and reflect critically over them,
- write programs that implement various formalisms, mechanisms and language features
in order to
- be able to take part in deeper discussions about principles of programming languages,
- be prepared for courses in compiler construction.