Program analysis offers static compile-time techniques for reasoning about behaviors of computer programs. The main application domain is in optimizing compilers, but the techniques are also useful in automatic error detection, verification of properties of software used in safety-critical computer systems, locating vulnerable code etc.
This course gives an overview of main approaches to program analysis and the theory behind them.
The course may be mathematically quite demanding, so overall fluency in mathematics is required.
**Topics covered:**
* Data-flow analysis
* Control-flow analysis
* Abstract interpretation
* Type-and-effect systems