Static program analysis aims to determine the dynamic behavior of
programs without actually executing them. Symbolic analysis is an
advanced static program analysis technique that has been successfully
applied to memory leak detection, compilation of parallel programs,
detection of superfluous bound checks, variable aliases and task
deadlocks, and to worst-case execution time analysis. The symbolic
analysis information is invaluable for optimizing compilers, code
generators, program verification, testing and debugging. In this book we
take a novel algebra-based approach to the symbolic analysis of
imperative programming languages. Our approach employs path expression
algebra to compute the complete control and data flow analysis
information valid at a given program point. This information is then
provided for subsequent domain-specific analyses. Our approach derives
solutions for arbitrary (even intra-loop) nodes of reducible and
irreducible control flow graphs. We prove the correctness of our
analysis method. Experimental results show that the problem sizes
arising from real-world applications such as the SPEC95 benchmark suite
are tractable for our symbolic analysis method.