This course covers basic concepts such as abstract syntax, interpretation, stack machines, compilation, type checking, garbage collection, and real machine code, as well as the more advanced topics on polymorphic types, type inference using unification, co- and contravariant types, continuations, and backwards code generation with on-the-fly peephole optimization. 

As well as, Programming Language Concepts covers practical construction of lexers and parsers, partly  regular expressions, automata and grammars.