Term rewriting is omnipresent in computer science. It has been used to formalize the notion of computability, to study computational procedures, to implement functional languages, to analyze and implement abstract data types, to decide word problems, to proof theorems, and so on [40]. In the early eighties an ESPRIT project was started to support the generation of interactive programming environments from language specifications using term rewriting as one of the basic implementation paradigms [29]. This research has resulted in the design of the ASF+SDF formalism and its support environment, the ASF+SDF Meta-Environment. ASF stands for Algebraic Specification Formalism [6]. It is an implementation of conditional term rewriting [36,8] possibly containing negative premises [37,45,46,26]. It also uses a form of prioritized rewriting [3,44]: there are default rewrite rules that apply if other rewrite rules do not match. SDF stands for Syntax Definition Formalism [28]. In fact, SDF is the part to conveniently define the signature of a term rewriting system and in ASF this signature is used to specify the rewrite rules . Terms are many-sorted and varyadic constructor functions are available for defining lists.
The formalism ASF+SDF and the ASF+SDF Meta-Environment have been described in a variety of papers and books [5,38,21]. In the context of this paper, the most significant properties of the ASF+SDF technology are:
The ASF+SDF view on the world is grammar-centric and can be characterized by the slogan
Every expression has a grammar, so it can be represented as a term.
All languages are treated equal, be it the language of truth values or the programming language COBOL. Simple Boolean expressions and COBOL programs are all treated as terms. The major surprise is that this paradigm scales up so well to large industrial applications, like:
An overview of industrial applications of the ASF+SDF Meta-Environment can be found in [9]. Other large, non-commercial, applications of the ASF+SDF technology are:
In Section 2 we briefly discuss issues that have to be taken into account when cooperating with IT industry. Next, we sketch the global approach we use for the automatic generation of tools and applications (Section 3). Then, we highlight two major applications: the construction of analysis and transformation tools for COBOL (Section 4) and the ASF+SDF compiler, which is written in ASF+SDF (Section 5). Based on these experiences we suggest in Section 6 the study of topics that could further advance the use of term rewriting in industrial applications: persistent term databases, generalized LR parsing versus parallel term rewriting, and coordination languages versus strategy languages. It will turn out that we have an ``alien'' view on research in term rewriting: properties like confluence and termination are of very limited use when selling term rewriting to industry.