We consider a class of abstract machines used for specifying the evaluation of intermediate-level programming languages, and demonstrate how various abstract aspects of these machines can be made concrete, providing for their direct implementation in a low-level microcoded architecture. We introduce the concept of stored programs and data to abstract machines. We demonstrate how machines that dynamically manipulate programs with abstract operations can be translated into machines that only need to read instructions from a fixed program. We show how familiar architectural features, such as a program counter, instruction register and a display can all be introduced very naturally into an abstract machine architecture once programs are represented as objects stored in memory. This translation lowers the level of the abstract machine, making it less abstract or, equivalently, more concrete. The resulting machines bear a close resemblance to a microcoded architecture in which the abstract machine instructions are defined in terms of a small set of micro-instructions that manipulate registers and memory. This work provides a further basis for the formal construction and implementation of abstract machines used for implementing programming languages. We demonstrate our results on an abstract machine that is a slight variant of the Categorical Abstract Machine.
[1]
P. J. Landin.
The Mechanical Evaluation of Expressions
,
1964,
Comput. J..
[2]
Ascánder Suárez,et al.
Implementing functional languages in the Categorical Abstract Machine
,
1986,
LFP '86.
[3]
Pierre-Louis Curien,et al.
The Categorical Abstract Machine
,
1987,
Sci. Comput. Program..
[4]
Laurence Puel,et al.
Compiling pattern matching by term decomposition
,
1990,
LISP and Functional Programming.
[5]
Andrew W. Appel,et al.
A Standard ML compiler
,
1987,
FPCA.
[6]
Dale Miller,et al.
From operational semantics to abstract machines: preliminary results
,
1990,
LISP and Functional Programming.
[7]
John Hannan.
Staging transformations for abstract machines
,
1991
.
[8]
Ascander Suarez.
Compiling ML into CAM
,
1990
.