Pragmatic Aspects of Two-Level Denotational Meta-Languages

This work is part of a research project on automatic generation of optimazing compilers from denotational language definitions. The novel aspect of our approach is that we are based on a two-level meta-language allowing us to distinguish between compile-time and run-time, and thereby to formalize e.g. the distinction between "static expression procedures" and "expression procedures" of Tennent (1981). In this paper we discuss some of the problems encountered when writing denotational definitions using a two-level meta-language. We consider the meta-language TMLS introduced in Nielson (1986a) as well as its restricted version TMLSC developed in Nielson and Nielson (1986) for automatic code generation. Based on an example we argue that rewriting a language definition using TMLS in TMLSC really means introducing some notion of activation record. This observation may pave the way for a formalization of the transformations on semantic definitions considered by Milne and Strachey (1976) as being imposed by different meta-languages.

[1]  Mitchell Wand,et al.  Deriving Target Code as a Representation of Continuation Semantics , 1982, TOPL.

[2]  Robert Giegerich,et al.  A truly generative semantics-directed compiler generator , 1982, SIGPLAN '82.

[3]  Jean-Claude Raoult,et al.  Properties of a Notation for Combining Functions , 1982, JACM.

[4]  Kari-Jouko Räihä,et al.  Attribute Grammar Design using the Compiler Writing System HLP , 1984, Method and tools for compiler construction.

[5]  Gordon D. Plotkin,et al.  The category-theoretic solution of recursive domain equations , 1977, 18th Annual Symposium on Foundations of Computer Science (sfcs 1977).

[6]  J. B. Ward Principles of programming , 1956, Electrical Engineering.

[7]  Christopher Strachey,et al.  A theory of programming language semantics , 1976 .

[8]  Flemming Nielson,et al.  Abstract Interpretation of Denotational Definions (A Survey) , 1986, STACS.

[9]  Michael J. C. Gordon,et al.  The Denotational Description of Programming Languages , 1979, Springer New York.

[10]  Nielson Flemming,et al.  Abstract interpretation using domain theory , 1984 .

[11]  Flemming Nielson,et al.  Code generation from two-level denotational meta-languages , 1985, Programs as Data Objects.

[12]  Ravi Sethi,et al.  Control Flow Aspects of Semantics-Directed Compiling , 1983, TOPL.

[13]  Peter D. Mosses,et al.  Abstract Semantic Algebras , 1982, Formal Description of Programming Concepts.

[14]  Joe Stoy,et al.  Denotational Semantics , 1977 .

[15]  John W. Backus,et al.  Can programming be liberated from the von Neumann style?: a functional style and its algebra of programs , 1978, CACM.

[16]  Andrew W. Appel Semantics-directed code generation , 1985, POPL '85.

[17]  Flemming Nielson,et al.  Correctness of Code Generation from a Two-Level Meta-Language , 1986, ESOP.

[18]  Henning Christiansen,et al.  Control Flow Treatment in a Simple Semantics-Directed Compiler Generator , 1982, Formal Description of Programming Concepts.

[19]  Uwe Kastens The GAG-System - A Tool for Compiler Construction , 1983, Method and tools for compiler construction.