Starting with
StrategoRelease093, strategy operators can be passed terms in addition to strategies.
Currently, a strategy definition is of the form
f(s1, ..., sn) = body
where
body
is a strategy expression referring to the strategy arguments
si
.
A term can be passed to such a strategy by passing a build, e.g.,
foo(t)
.
The receiving strategy accesses the term by executing the corresponding strategy.
In certain situations, which arise for example in the compilation of strategies,
it is desirable to pass a term 'by value'. Thus, the syntax of Stratego has been
extended to allow this. A strategy definition now has the form
f(s1,..., sn | x1, ..., xm) = body
where the
xi
are term arguments of
f
, which can be referred to directly in
match and build expressions. Such an operator is called using the syntax
f(s1,...,sn|t1,...,tm)
Note that the following sugar is defined:
-
f(s1,...,sn) = body
is sugar for f(s1,...,sn|) = body
-
f = body
is sugar for f(|) = body
and similarly for rules. Corresponding sugar holds for strategy calls:
-
f(s1,...,sn)
is sugar for f(s1,...,sn|)
-
f
is sugar for f(|)
--
EelcoVisser - 23 Aug 2003