From Definitional Interpreter to Symbolic Executor
Casper Bach Poulsen
Date: Wed, October 16, 2019
Room: COLLOQUIUMZAAL 0.E420
Symbolic execution is a technique for automatic software validation and verification. New symbolic executors regularly appear for both existing and new languages and such symbolic executors are generally manually (re)implemented each time we want to support a new language. We propose to automatically generate symbolic executors from language definitions, and present a technique for mechanically (but as yet, manually) deriving a symbolic executor from a definitional interpreter. The idea is that language designers define their language as a monadic definitional interpreter, where the monad of the interpreter defines the meaning of branch points. Developing a symbolic executor for a language is a matter of changing the monadic interpretation of branch points. In this paper, we illustrate the technique on a language with recursive functions and pattern matching, and use the derived symbolic executor to automatically generate test cases for definitional interpreters implemented in our defined language.
The talk is based on https://2019.splashcon.org/details/meta/1/From-Definitional-Interpreter-To-Symbolic-Executor and is joint work with Adrian Mensing, Hendrik van Antwerpen, and Eelco Visser.
| Jesper Cockx joins TU Delft Programming Languages group as assistant professor
Next: | Incremental Scannerless Generalized LR Parsing