Log In Sign Up

Automating Abstract Interpretation of Abstract Machines

by   James Ian Johnson, et al.

Static program analysis is a valuable tool for any programming language that people write programs in. The prevalence of scripting languages in the world suggests programming language interpreters are relatively easy to write. Users of these languages lament their inability to analyze their code, therefore programming language analyzers are not easy to write. This thesis investigates a systematic method of creating abstract interpreters from traditional interpreters, called Abstracting Abstract Machines. Abstract interpreters are difficult to develop due to technical, theoretical, and pragmatic problems. Technical problems include engineering data structures and algorithms. I show that modest and simple changes to the mathematical presentation of abstract machines result in 1000 times better running time - just seconds for moderately sized programs. In the theoretical realm, abstraction can make correctness difficult to ascertain. I provide proof techniques for proving the correctness of regular, pushdown, and stack-inspecting pushdown models of abstract computation by leaving computational power to an external factor: allocation. Even if we don't trust the proof, we can run models concretely against test suites to better trust them. In the pragmatic realm, I show that the systematic process of abstracting abstract machines is automatable. I develop a meta-language for expressing abstract machines similar to other semantics engineering languages. The language's special feature is that it provides an interface to abstract allocation. The semantics guarantees that if allocation is finite, then the semantics is a sound and computable approximation of the concrete semantics.


page 1

page 2

page 3

page 4


A Term-Rewriting Semantics for Imperative Style Programming

Term rewriting systems have a simple syntax and semantics and facilitate...

Abstracting Abstract Control (Extended)

The strength of a dynamic language is also its weakness: run-time flexib...

Optimizing Abstract Abstract Machines

The technique of abstracting abstract machines (AAM) provides a systemat...

Sound Regular Corecursion in coFJ

The aim of the paper is to provide solid foundations for a programming p...

Skeletal Semantics and their Interpretations

Many meta-languages have been proposed for writing rule-based operationa...

Weird Machines as Insecure Compilation

Weird machines—the computational models accessible by exploiting securit...

NoCFG: A Lightweight Approach for Sound Call Graph Approximation

Interprocedural analysis refers to gathering information about the entir...