This book is a detailed account of the Synthesizer Generator, a system for creat­ ing specialized editors that are customized for editing particular languages. The book is intended for those with an interest in software tools and in methods for building interactive systems. It is a must for people who are using the Syn­ thesizer Generator to build editors because it provides extensive discussions of how to write editor specifications. The book should also be valuable for people who are building specialized editors "by hand," without using an editor­ generating tool. The need to manage the development of large software systems is one of the most pressing problems faced by computer programmers. An important aspect of this problem is the design of new tools to aid interactive program develop­ ment. The Synthesizer Generator permits one to create specialized editors that are tailored for editing a particular language. In program editors built with the Synthesizer Generator, knowledge about the language is used to continuously assess whether a program contains errors and to determine where such errors occur. The information is then displayed on the terminal screen to provide feed­ back to the programmer as the program is developed and modified.


The Synthesizer Generator is a system for automating the implementation of language-based editing environments. The editor designer prepares a specification that includes rules defining a language's context-free abstract syn­ tax, context-sensitive relationships, display format, and concrete input syntax. From this specification, the Synthesizer Generator creates a display editor for manipulating objects according to these rules [Reps84]. This volume, The Synthesizer Generator Reference Manual, is intended as the defining document of the system. A companion volume, The Synthesizer Gen­ erator: A System for Constructing Language-Based Editors [Reps88], provides a more tutorial description of the system; it contains numerous examples that illustrate the specification and use of generated editors, as well as chapters that explain important algorithms of the implementation. The Synthesizer Generator is a generalization of our earlier system, the Cor­ nell Program Synthesizer [Teitelbaum81], which was a programming environ­ ment for a specific small dialect of PL/I. It featured a display-oriented, syntax­ directed editor, an incremental compiler, an execution supervisor supporting source-level debugging, and a file system containing syntactically typed pro­ gram fragments. Whereas PL/I was built into the Cornell Program Synthesizer, the Synthesizer Generator accepts a formal language definition as input. Although originally conceived as a tool for creating Synthesizer-like environments for arbitrary pro­ gramming languages, the Synthesizer Generator is more broadly useful. Any textual language with a hierarchical phrase structure grammar is a candidate. vi Preface Interactive theorem proving for formal mathematics and logic, for example, has emerged as a particularlysuitable application.