A DENOTATIONAL SEMANTICS OF CLU

A denotational semantics of CLU, an object-oriented language supporting data abstractions, is presented. The definition is based on Scott''s lattice-theoretic approach to the theory of computation. Modules, the basic unit of compilation, are represented in terms of a set of recursively defined domains called the abstract syntax. As part of checking the legality of a module, a transformation is made from the abstract syntax to a modified syntax; the transformation reflects the results of compile-time computations that need not be repeated at run-time. An execution environment is defined to be a set of objects, each with a particular state, together with a mapping from variable names to objects. The meaning of an expression or statement is a function that takes an environment and produces a result consisting of a termination condition, a list of zero or more objects, and a new environment, the termination condition is used to govern control flow. This uniform treatment of expressions and statements allows a simple definition of the run-time exception handling mechanism provided in CLU. The meaning of a procedure generator or iterator generator is a function that takes a list of actual parameters, a list of arguments, and an environment, and produces a result as for statement and expression evaluation. The meaning of parameters is given in terms of textual substitution. A non-parameterized routine is viewed as being a generator with an empty parameter list. The meaning of a cluster is a function that takes a list of actual cluster parameters and an operation name, and produces the meaning of that operation.