Modular Language Processors As Framework Completions Guruduth Banavar Gary Lindstrom UUCS-93-026 Department of Computer Science University of Utah Salt Lake City, UT 84112 USA October 21, 1993 Abstract The conceptual and specificational power of denotational semantics for programming language design has been amply demonstrated. We report here on a language implementation method that is similarly semantically motivated, but is based upon object-oriented design principles, and results in flexible and evolvable language processors. We apply this technique to the area of object-oriented (O-O) languages, in the form of a general metalevel architecture for objects and inheritance that facilitates the development of compilers and interpreters for O-O languages. This development strategy maintains architectural modularity by mapping conceptual language design decisions to isolatable parts of resulting language processors. Our architecture, which is presented as an O-O framework, is characterized by (i) support for a broad set of modularity features including encapsulation and strong typing, and (ii) an ``unbundled'' view of inheritance, semantic features of which are decomposed by means of a set of module combination operations (combinators). We describe an implementation of our framework in C++, and assess its utility by constructing a compiler for a simple O-O extension to the programming language C. We further argue the flexibility of the resulting processor by outlining the incorporation of several significant extensions to the basic module language. We claim that the use of such a framework for compiler construction has many advantages, including a systematic language development method, processor software reuse, language extensibility, and potential for interoperability among languages. NOTE This paper is now obsolete, having been superceded by Technical Report UUCS-94-035.