Prerequisites
Functional programming, plus familiarity with Java.
A good understanding of compiler construction is essential.
Programming Languages is an advantage but not a necessity.
Overview
Program analysis provides the theory, algorithms and engineering techniques
to answer questions about your programs. For example, you might want to
determine what statements could have contributed to the value of an
expression. Another application is for a compiler to decide whether an
optimisation can be applied. Or you might want some mechanical assistance
when refactoring your program. Program analysis is also
indispensable when proving properties of large programs, for instance
to check that there are no buffer overflows.
An elegant and crisp mathematical framework is common to all these
applications. This course will introduce you to that mathematics,
and simultaneously show how it leads to beautiful algorithms that solve
practically important problems.
Learning Outcomes
Students will learn the mathematical theory of lattices,
Galois connections, abstract interpretation, and fixpoint computations,
Furthermore they will learn to apply those notions in controlflow
analysis and dataflow analysis. In turn, those are illustrated by
refactoring transformations, optimisations, program understanding tools, and
program checkers