Static program analysis is the art of reasoning about the behavior of computer programs without actually running them. This is useful not only in optimizing compilers for producing efficient code but also for automatic error detection and other tools that can help programmers. This lecture will present essential principles and algorithms for static program analysis, based on material from http://cs.au.dk/~amoeller/spa/. We take a constraint-based approach where suitable constraint systems conceptually divide analysis into a front-end that generates constraints from program code and a back-end that solves the constraints to produce the analysis results. The lecture will be accompanied by theoretical exercises and by practical exercises based on a Scala implementation of the algorithms.
Professor at Department of Computer Science, Aarhus University, Denmark