CS 421: Programming Languages and Compilers

Syllabus and Study Guide for the Final

Studying for this exam

[top]

  • Understand the lecture slides and discussions thoroughly.
  • Revisit the MPs and HWs and make sure you understand the solutions thoroughly. Repeat any you are not comfortable with.
  • Take the sample exam as a dry-run for the actual exam.

Syllabus

[top]

The exam is cumulative; it will cover all the lectures in the course. You should be prepared for all of the material listed in midterm1.syllabus.html and midterm2.syllabus.html, as well as that listed below:

  • Unification
    • Solve simple unification problems such as the ones in the lecture slides.
    • Know how unification is used for type checking and type inference.
  • Lambda Calculus
    • Be able to parse a lambda term correctly (e.g. which variable is bound by which abstraction, which variable is free, which application is top-most, etc.).
    • Describe and know how to apply α-conversions and β-reductions.
    • Write simple non-recursive functions as λ-expressions.
    • Know the differences between and be able to demonstrate lazy/eager evaluation and unrestricted alpha-beta reduction.
    • Understand Church numerals and Church booleans and how to manipulate/generate them in lambda calculus (e.g, be able to write addition and multiplication λ-expressions).
    • Understand how other high-level datatypes and primitive recursive functions are encoded in lambda calculus.
  • Axiomatic Semantics
    • Be able to prove simple statements in Floyd-Hoare Logic, similar to those found in the homework.
    • Be able to derive new Floyd-Hoare Logic rules for new programming language constructs.