Decompilation: The Enumeration of Types and Grammars

19Citations
Citations of this article
23Readers
Mendeley users who have this article in their library.

Abstract

While a compiler produces low-level object code from high-level source code, a decompiler produces high-level code from low-level code and has applications in the testing and validation of safety-critical software. The decompilation of an object code provides an independent demonstration of correctness that is hard to better for industrial purposes 1994. But, although compiler compilers are in common use in the software industry, a decompiler compiler is much more unusual. It turns out that a data type specification for a programming-language grammar can be remolded into a functional program that enumerates all of the abstract syntax trees of the grammar. This observation is the springboard for a general method for compiling decompilers from the specifications of (nonoptimizing) compilers. This paper deals with methods and theory, together with an application of the technique. The correctness of a decompiler generated from a simple occam-like compiler specification is demonstrated. The basic problem of enumerating the syntax trees of grammars, and then stopping, is shown to have no recursive solution, but methods of abstract interpretation can be used to guarantee the adequacy and completeness of our technique in practical instances, including the decompiler for the language presented here. © 1994, ACM. All rights reserved.

Cite

CITATION STYLE

APA

Breuer, P. T., & Bowen, J. P. (1994). Decompilation: The Enumeration of Types and Grammars. ACM Transactions on Programming Languages and Systems (TOPLAS), 16(5), 1613–1647. https://doi.org/10.1145/186025.186093

Register to see more suggestions

Mendeley helps you to discover research relevant for your work.

Already have an account?

Save time finding and organizing research with Mendeley

Sign up for free