Semantics of Programming Languages

(winter semester 2019-2020)

  1. cw1: concrete vs abstract syntax, parsing of numbers, semantics of arithmetic expressions, variables.
  2. cw2: small steps operations semantics of arithmetic expressions, termination, determinism, deterministic results.
  3. cw2: variables (global and local environments); cw3: small steps operational semantics of IMP, looping constructs.
  4. cw3: binary numbers; cw4: big steps operational semantics of IMP, equivalence with small-steps, loop construct (small and big steps).
  5. cw5: eager vs. lazy semantics in arithmetic and higher-order expressions.
  6. cw6: exceptions. cw7: local scope, functions with one integer parameter, recursive functions.
  7. cw6: regular programs. cw7: call by need.
  8. cw8: denotational semantics of arithmetic and boolean expressions; denotational semantics of while programs.
  9. cw9: denotational semantics of local declarations, functions with one integer parameter, recursion.
  10. cw9: call by name/value, static/dynamic binding; cw10: introduction to continuations.
  11. cw10: continuations (abort, break, continue).
  12. cw10: continuations (arithmetic expressions, exceptions, set/goto)
  13. cw11 (coroutines); cw12 (axiomatic semantics).
  14. cw12: axiomatic semantics (rules, loop invariants, new constructs); cw13 (more examples).
  15. cw13: arrays; cw14 (termination).