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(|)
-- Main.EelcoVisser - 23 Aug 2003