An attribute grammar for a source programming language is the result of extending the original context-free grammar by associating non-terminals with attributes, and productions with semantic equations. This paper applies the attribute grammar concept to a phase-oriented approach for the development of incremental transformation systems. A transformation system is divided into phases, which are specified by semantic functions based on the attribute grammar. The system can then be generated incrementally and evaluated automatically. In this way, we can incorporate new transformations by adding phases, or discard transformations by deletion. An incremental optimizer and an incremental parallelizing tool illustrate these concepts.
The authors suggest two approaches for phase-oriented development. In the first approach, the Synthesizer Generator of Reps and Teitelbaum is applied directly in order to incrementally generate a program and evaluate it. The authors found this to be inefficient because any iteration requires a complete reevaluation. As an alternative, they suggest a more efficient evaluation method, but this method is only a proposal and further information is not yet available.
On the whole, the thesis is supported by the authors’ general arguments. Little detail is provided to enable readers to appreciate, if not verify, the conjectures. In the incremental optimizer example, for instance, phases are said to be freely ordered and an iterate-until-stable style of recursion is said to terminate. If, however, we add two more phases that are not mutually independent (such as common subexpression elimination and inline expansion of procedural calls), will any ordering affect the degree of optimization? Will an iterate-until-stable recursion still terminate? I am unable to answer these questions in the absence of technical details or sophisticated examples.