Results 1 - 3 of 3
- University of Iowa , 1991
"... A symbolic version of an operation on values is a corresponding operation on program texts. For example, symbolic composition of two programs p, q yields a program whose meaning is the (math-ematical) composition of the meanings of p and q. Another example is symbolic specialization of a function to ..."
Abstract - Cited by 5 (0 self) - Add to MetaCart
A symbolic version of an operation on values is a corresponding operation on program texts. For example, symbolic composition of two programs p, q yields a program whose meaning is the (math-ematical) composition of the meanings of p and q. Another example is symbolic specialization of a function to a known first argument value. This operation, given the first argument, transforms a two-input program into an equivalent one-input program. Computability of both of these sym-bolic operations has long been established in recursive function theory [12,16]; the latter is known as Kleene’s “s-m-n ” theorem, also known as partial evaluation. In addition to computability we are concerned with efficient symbolic operations, in particular applications of the two just mentioned to compiling and compiler generation. Several examples of symbolic composition are given, culminating in nontrivial applications to compiler generation , . Partial evaluation has recently become the subject of considerable interest . Reasons include simplicity, efficiency and the surprising fact that self-application can be used in practice to generate compilers, and a compiler generator as well. This paper makes three contributions: First, it introduces a new notation to describe the types of symbolic operations, one that makes an explicit distinction between the types of program texts and the values they denote. This leads to natural definitions of what it means for an interpreter or compiler to be type correct—a tricky problem in a multilanguage context. Second, it uses the notation to give a clear overview of several earlier applications of symbolic computation. For example, it is seen that the new type notation can satisfactorily explain the types involved when generating a compiler by self-applying a partial evaluator. Finally, a number of problems for further research are stated along the way. The paper ends by suggesting Cartesian categorical combinators as a unifying framework in which to study symbolic operations. 1