Definitional Interpreters for HigherOrder Programming Languages
 John C. Reynolds
 … show all 1 hide
Rent the article at a discount
Rent now* Final gross prices may vary according to local VAT.
Get AccessAbstract
Higherorder programming languages (i.e., languages in which procedures or labels can occur as values) are usually defined by interpreters that are themselves written in a programming language based on the lambda calculus (i.e., an applicative language such as pure LISP). Examples include McCarthy's definition of LISP, Landin's SECD machine, the Vienna definition of PL/I, Reynolds' definitions of GEDANKEN, and recent unpublished work by L. Morris and C. Wadsworth. Such definitions can be classified according to whether the interpreter contains higherorder functions, and whether the order of application (i.e., call by value versus call by name) in the defined language depends upon the order of application in the defining language. As an example, we consider the definition of a simple applicative programming language by means of an interpreter written in a similar language. Definitions in each of the above classifications are derived from one another by informal but constructive methods. The treatment of imperative features such as jumps and assignment is also discussed.
 McCarthy, J. (1960) Recursive functions of symbolic expressions and their computation by machine, part I. Communications of the ACM 3: pp. 184195
 Landin, P. J. (1966) The next 700 programming languages. Communications of the ACM 9: pp. 157166
 Evans, A. (1968) PAL  A language designed for teaching programming linguistics. Proceedings of 23rd National ACM Conference. Brandin/Systems Press, Princeton, New Jersey, pp. 395403
 Reynolds, J. C. (1970) GEDANKEN  A simple typeless language based on the principle of completeness and the reference concept. Communications of the ACM 13: pp. 308319
 Church, A. (1941) The Calculi of LambdaConversion, volume 6 of Annals of Mathematics Studies. Princeton University Press, Princeton, New Jersey
 Curry, H. B., Feys, R. (1958) Combinatory Logic, Volume 1. NorthHolland, Amsterdam
 Landin, P. J. A λcalculus approach. In: Fox, L. eds. (1966) Advances in Programming and NonNumerical Computation: Proceedings of A Summer School. Pergamon Press, Oxford, England, pp. 97141
 Floyd, R. W. Assigning meanings to programs. In: Schwartz, J. T. eds. (1966) Mathematical Aspects of Computer Science, volume 19 of Proceedings of Symposia in Applied Mathematics. American Mathematical Society, Providence, Rhode Island, pp. 1932
 Manna, Z. (1969) The correctness of programs. Journal of Computer and System Sciences 3: pp. 119127
 Hoare, C. A. R. (1969) An axiomatic basis for computer programming. Communications of the ACM 12: pp. 576580
 Gries, D. eds. (1978) Programming Methodology. SpringerVerlag, New York
 Scott, Dana S. Outline of a mathematical theory of computation. Technical Monograph PRG2, Programming Research Group, Oxford University Computing Laboratory, Oxford, England, November 1970. A preliminary version appeared in Proceedings of the Fourth Annual Princeton Conference on Information Sciences and Systems (1970), 169176.
 Scott, D. S. Lattice theory, data types and semantics. In: Rustin, R. eds. (1970) Formal Semantics of Programming Languages: Courant Computer Science Symposium 2. PrenticeHall, Englewood Cliffs, New Jersey, pp. 65106
 Scott, D. S. Models for various typefree calculi. In: Suppes, P., Henkin, L., Joja, A., Moisil, G. C. eds. (1971) Logic, Methodology and Philosophy of Science IV: Proceedings of the Fourth International Congress, volume 74 of Studies in Logic and the Foundations of Mathematics. NorthHolland, Amsterdam, pp. 157187
 Scott, D. S. Continuous lattices. In: William Lawvere, F. eds. (1971) Toposes, Algebraic Geometry and Logic, volume 274 of Lecture Notes in Mathematics. SpringerVerlag, Berlin
 Milner, R. (1972) Implementation and applications of Scott's logic for computable functions. Proceedings of an ACM Conference on Proving Assertions about Programs. ACM, New York, pp. 16
 Burstall, R. M. Formal description of program structure and semantics in first order logic. In: Meltzer, B., Michie, D. eds. (1969) Machine Intelligence. Edinburgh University Press, Edinburgh, Scotland, pp. 7998
 Lucas, Peter, Lauer, Peter E., and Stigleitner, H. Method and notation for the formal definition of programming languages. Technical Report TR 25.087, IBM Laboratory Vienna, June 28, 1968. Revised July 1, 1970.
 Reynolds, John C. GEDANKEN  a simple typeless language which permits functional data structures and coroutines. Report ANL7621, Applied Mathematics Division, Argonne National Laboratory, Argonne, Illinois, September 1969.
 Morris, F. (1993) Lockwood. The next 700 formal language descriptions. Lisp and Symbolic Computation 6: pp. 249257
 de Bakker, J. W. Semantics of programming languages. In: Tou, J. T. eds. (1969) Advances in Information Systems Science. Plenum Press, New York, pp. 173227
 Park, D. M. R. Fixpoint induction and proofs of program properties. In: Meltzer, B., Michie, D. eds. (1969) Machine Intelligence. Edinburgh University Press, Edinburgh, pp. 5978
 Feldman, J., Gries, D. (1968) Translator writing systems. Communications of the ACM 11: pp. 77113
 McCarthy, J. Towards a mathematical science of computation. In: Popplewell, C. M. eds. (1962) Information Processing 62: Proceedings of IFIP Congress 1962. NorthHolland, Amsterdam, pp. 2128
 Wozencraft, John M. and Evans, Jr., Arthur. Notes on programming linguistics. Technical report, Department of Electrical Engineering, Massachusetts Institute of Technology, Cambridge, Massachusetts, February 1971.
 van Wijngaarden, A. Recursive definition of syntax and semantics. In: Steel, T. B. eds. (1964) Formal Language Description Languages for Computer Programming: Proceedings of the IFIP Working Conference on Formal Language Description Languages. NorthHolland, Amsterdam, pp. 1324
 Morris, J. H. (1972) A bonus from van Wijngaarden's device. Communications of the ACM 15: pp. 773
 Fischer, M. J. (1972) Lambda calculus schemata. Proceedings of an ACM Conference on Proving Assertions about Programs. ACM, New York, pp. 104109
 Landin, P. J. (1965) A correspondence between ALGOL 60 and Church's lambdanotation. Communications of the ACM 8: pp. 89101
 Barron, D.W., Buxton, J. N., Hartley, D.F., Nixon, E., Strachey, C. (1963) The main features of CPL. The Computer Journal 6: pp. 134143
 van Wijngaarden, A., Mailloux, B.J., Peck, J.E.L., Koster, C.H.A. (1969) Report on the algorithmic language ALGOL 68. Numerische Mathematik 14: pp. 79218
 Cheatham, T.E., Fischer, A., Jorrand, P. (1968) On the basis for ELF  an extensible language facility. 1968 Fall Joint Computer Conference, volume 33, Part Two of AFIPS Conference Proceedings. Thompson Book Company, Washington, D.C, pp. 937948
 Title
 Definitional Interpreters for HigherOrder Programming Languages
 Journal

HigherOrder and Symbolic Computation
Volume 11, Issue 4 , pp 363397
 Cover Date
 19981201
 DOI
 10.1023/A:1010027404223
 Print ISSN
 13883690
 Online ISSN
 15730557
 Publisher
 Kluwer Academic Publishers
 Additional Links
 Topics
 Keywords

 programming language
 language definition
 interpreter
 lambda calculus
 applicative language
 higherorder function
 closure
 order of application
 continuation
 LISP
 GEDANKEN
 PAL
 SECD machine
 Joperator
 reference
 Authors

 John C. Reynolds ^{(1)}
 Author Affiliations

 1. Systems and Information Science, Syracuse University, USA