An interpreter can be viewed as performing two tasks: parsing and execution. Interpreters are specialized by partially evaluating the parsing activity while leaving the execution component as residue. We give a procedure for identifying goals that participate in the parsing process and present rules for unfolding these goals. The unfolding rules are independent of the object-program being compiled and can be generated by a one-time inspection of an interpreter. This makes specializing interpreters a practical technique for compiling programs.
New Generation Computing,
Vol. 8, no. 1 (1990), pp. 61-70