Stratego: a language for program transformation based on rewriting strategies : system description of Stratego 0.5
Files
Publication date
2001-05-01
Authors
Visser, Eelco
Editors
Advisors
Supervisors
DOI
Document Type
Preprint
Metadata
Show full item recordCollections
License
Abstract
Program transformation is used in many areas of software engineering. Examples
include compilation, optimization, synthesis, refactoring, migration, normalization
and improvement [15]. Rewrite rules are a natural formalism for expressing
single program transformations. However, using a standard strategy for normalizing
a program with a set of rewrite rules is not adequate for implementing
program transformation systems. It may be necessary to apply a rule only in
some phase of a transformation, to apply rules in some order, or to apply a
rule only to part of a program. These restrictions may be necessary to avoid
non-termination or to choose a specific path in a non-confluent rewrite system.
Stratego is a language for the specification of program transformation systems
based on the paradigm of rewriting strategies. It supports the separation of
strategies from transformation rules, thus allowing careful control over the application
of these rules. As a result of this separation, transformation rules are
reusable in multiple different transformations and generic strategies capturing
patterns of control can be described independently of the transformation rules
they apply. Such strategies can even be formulated independently of the object
language by means of the generic term traversal capabilities of Stratego.
In this short paper I give a description of version 0.5 of the Stratego system,
discussing the features of the language (Section 2), the library (Section 3), the
compiler (Section 4) and some of the applications that have been built (Section
5).