Program-Transformation.Org: The Program Transformation Wiki
The Draco system was the first to pioneer with DomainSpecificLanguages employing ProgramTransformation for their implementation. The system featured parser and pretty-printer generation and an interactive system for applying transformation rules and refinements to programs.
The DracoUsersManual and JimNeighbors PhD thesis can be found at the website of BayfrontTechnologies: http://www.bayfronttechnologies.com/l01tech.htm
Draco is also discussed in Section 9.8.1 of GenerativeProgrammingBook.
Strategies in Draco
Draco was the first system to support the
transformation of high-level domain-specific programs to executable
code. The system supported the definition of transformation rules for
optimizations and refinements to transform high-level constructs into
lower-level ones.
Transformation rules and refinements are identified by means of
names. Transformation rules also have an application code that
specifies their relative precedence. The application of
transformations and refinements to a domain program is controlled by
the user through an interactive process. In this process the user has
to select domain, instance (region in the abstract syntax tree
representing the program), and locale (node in the abstract syntax
tree). Transformations can be applied directly to the currently
selected locale using APPLY. The system can examine the tree and
SUGGEST transformations to apply. Using the TRANSFORM command all
transformation rules in a certain range can be applied
automatically. The TRANSFORM uses a bottom-up traversal over the tree,
applying rules in the provided code range. Rules with higher codes are
applied first. In Neighbors PhD thesis there are also descriptions of a
top-down traversal and of traversals that apply the best rules
first. Refinements can be applied individually using TRY and USE. A
certain amount of automation of the process is possible by means of
tactics.
-- EelcoVisser - 28 Apr 2001 JimNeighbors' Draco papers were also among the first to describe
the notion of DomainEngineering -- see also