This module provides the students with theoretical knowledge and practical skill in the implementation of programming languages.
It discusses implementation aspects of fundamental programming paradigms (imperative, functional and object-oriented), and of
basic programming language concepts such as binding, scope, parameter-passing mechanisms and types.
It introduces the language processing techniques of interpretation and compilation and virtual machines. The lectures are
accompanied by lab sessions which will focus on language processing tools, and take the student through a sequence of programming language implementations. This modules also covers type systems, language extensions and domain-specific language