Stratego -- Strategies for Program Transformation

A `x[t]`

.
A typical example of a contextual rule is the following inlining rule:

Inline : Let(x, e1, e2[Var(x)]) -> Let(x, e1, e2[e1])The idea is that an occurrence of

`Var(x) in =e2`

is replaced with the term `e1`

.
Contextual rules are treated as syntactic sugar and translated to a normal rule, which performs a traversal over the context subterm. The inlining rule above is translated to the rule:

Inline : Let(x, e1, e2) -> Let(x, e1, e2') where <oncetd(?Var(x); !e1)> e2 => e2'The traversal strategy

`oncetd`

is used to find an occurrence of `Var(x)`

and replace it
with `e1`

. Note that in the match of `Var(x)`

, the variable `x`

is already bound by the
match of the left-hand `Let(x, e1, e2)`

side of the rule.
Issues

- traversal strategy
- multiple contexts
- conditions
- overlapping contextual rules
- backtracking

-- EelcoVisser - 08 Jan 2002

CategoryGlossary