CS 421: Programming Languages and Compilers
Course Objectives
Students taking this course can expect to learn the following concepts:
  • the structure of compilers, including the notions of concrete and abstract syntax trees
  • the structure of modern run-time systems
  • the major programming paradigms of object-oriented and functional programming
  • the differences between dynamically-typed and statically-typed languages
  • the use of deduction systems to formally define languages
  • polymorphic type systems
  • program verification, and the key role of loop invariants
and acquire the following skills:
  • to write lexical analyzers, both manually and using generators, to process structured input (such as programs)
  • to write parsers, both manually and using generators, to further process structured input
  • to implement programming languages, both by interpretation and compilation
  • to program in a functional programming language, including the use of higher-order functions