Fast decompilation of compiled Prolog clauses
Proceedings on Third international conference on logic programming
Galois connections and computer science applications
Proceedings of a tutorial and workshop on Category theory and computer programming
From interpreter to compiler: a representational derivation
on Programs as data objects
Realistic compiler generation
Static and dynamic semantics processing
POPL '91 Proceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Essentials of programming languages
Essentials of programming languages
Two-level functional languages
Two-level functional languages
Generating a compiler for a lazy language by partial evaluation
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Partial evaluation and automatic program generation
Partial evaluation and automatic program generation
Tutorial notes on partial evaluation
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Semantics-directed generation of a Prolog compiler
Science of Computer Programming
The next 700 formal language descriptions
Lisp and Symbolic Computation - Special issue on continuations—part I
Deriving Target Code as a Representation of Continuation Semantics
ACM Transactions on Programming Languages and Systems (TOPLAS)
Gödelization in the lambda calculus
Information Processing Letters
On the translation of machine language programs
Communications of the ACM
Functional Programming
A compiled implementation of strong reduction
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Partial Evaluation of Computation Process, Revisited
Higher-Order and Symbolic Computation
Partial Evaluation of Computation Process—AnApproach to a Compiler-Compiler
Higher-Order and Symbolic Computation
Proceedings of the ESPRIT Working Group 8533 on Prospects for Hardware Foundations: NADA - New Hardware Design Methods, Survey Chapters
What Not to Do When Writing an Interpreter for Specialisation
Selected Papers from the Internaltional Seminar on Partial Evaluation
Compiler generation from denotational semantics
Semantics-Directed Compiler Generation, Proceedings of a Workshop
The Universal Resolving Algorithm: Inverse Computation in a Functional Language
MPC '00 Proceedings of the 5th International Conference on Mathematics of Program Construction
A methodology for machine language decompilation
ACM '74 Proceedings of the 1974 annual conference - Volume 1
POPL '76 Proceedings of the 3rd ACM SIGACT-SIGPLAN symposium on Principles on programming languages
Comparing Type-Based and Proof-Directed Decompilation
WCRE '01 Proceedings of the Eighth Working Conference on Reverse Engineering (WCRE'01)
Normalization by Evaluation for Typed Lambda Calculus with Coproducts
LICS '01 Proceedings of the 16th Annual IEEE Symposium on Logic in Computer Science
Language support for program generation: reasoning, implementation, and applications
Language support for program generation: reasoning, implementation, and applications
Intuitionistic model constructions and normalization proofs
Mathematical Structures in Computer Science
Normalization by evaluation with typed abstract syntax
Journal of Functional Programming
Combinators for program generation
Journal of Functional Programming
Functional runtime systems within the lambda-sigma calculus
Journal of Functional Programming
Machine-independent computer programming
Machine-independent computer programming
Krakatoa: decompilation in java (dose bytecode reveal source?)
COOTS'97 Proceedings of the 3rd conference on USENIX Conference on Object-Oriented Technologies (COOTS) - Volume 3
Normalization by evaluation for the computational lambda-calculus
TLCA'01 Proceedings of the 5th international conference on Typed lambda calculi and applications
A rational deconstruction of landin's SECD machine
IFL'04 Proceedings of the 16th international conference on Implementation and Application of Functional Languages
Hi-index | 0.00 |
Just as an interpreter for a source language can be turned into a compiler from the source language to a target language, we observe that an interpreter for a target language can be turned into a compiler from the target language to a source language. In both cases, the key issue is the choice of whether to perform an evaluation or to emit code that represents this evaluation.We substantiate this observation with two source interpreters and two target interpreters. We first consider a source language of arithmetic expressions and a target language for a stack machine, and then the λ-calculus and the SECD-machine language. In each case, we prove that the target-to-source compiler is a left inverse of the source-to-target compiler, i.e., that it is a decompiler.In the context of partial evaluation, the binding-time shift of going from a source interpreter to a compiler is classically referred to as a Futamura projection. By symmetry, it seems logical to refer to the binding-time shift of going from a target interpreter to a compiler as a Futamura embedding.