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.