Computer Science Department
School of Computer Science, Carnegie Mellon University
Semantics for Structure Editing Environments
Gail E. Kaiser
May 1985 - Thesis oot Also listed as Technical Report CMU-CS-85-132.
This thesis addresses the processing of semantics by structure editor-based programming environments. This processing is performed incrementally while the user writes and tests her programs. The semantics processing involves the manipulation of two kinds of properties, static and dynamic. Static properties can be determined by inspection of the program while dynamic properties reflect the interaction between the user and the programming environment. The implementor of a programming environment describes the semantics processing in terms of these properties. For example, symbol resolution, type checking and code generation involve static properties while interpretation, run-time support and language-oriented debugging involve dynamic properties.
Recent research in structure editing environments has focused on the generation of programming environments from description. Several mechanisms have been proposed for writing the semantics description, and the most successful of these have been action routines and attribute grammars. However, action routines are written as a collection of imperative subroutines and it has proved difficult for an implementor to anticipate all possible interactions between these subroutines that may result in adverse behavior. Attribute grammars are written in a declarative style and the implementor need not be concerned with subtle interactions because all interactions among attribute grammar rules are handled automatically. Unfortunately, attribute grammars have been successfully applied only to the description of static properties, and have hitherto seemed unsuited to the description of dynamic properties.
This thesis describes a very large extension to attribute grammars that solves this problem. The extended paradigm is called action equations . Action equations are written in a declarative notation that retains the flavor of attribute grammars but adds an easy means to express dynamic properties as well as static properties. The extensions to attribute grammars include attaching particular attribute grammar-style rules to events that represent user commands; supporting propagation of events as well as supporting propagation of change with respect to attribute values; and limited support for non-applicative mechanisms, allowing attributes to be treated as variables and permitting modification in addition to replacement for changing the values of attributes. Together, these extensions are sufficient to support dynamic properties.