A dynamic rule is an ordinary RewriteRule that is generated at run-time. A dynamic rule can inherit bindings of variables from its generation context. Dynamic rules solve the problem caused by the context-free nature of normal rewrite rules.
---+++ Syntax
A set of dynamic rules is introduced by the keyword =rules= as follows
rules(
Lab1 : l1 -> r1 where s1
...
Labn : ln -> rn where sn
)
This construct itself defines a RewritingStrategy that can be applied. All variables that
are _statically_ bound before the =rules= construct is invoked are inherited by the dynamic
rules.
---+++ Resources
Dynamic rules are useful in many transformation problems.
Several examples of dynamic rules are presented in the paper [[Scoped Dynamic Rewrite Rules]].
The [[dynamic rule semantics]] has undergone some changes over time. Hairy issues include overlapping left-hand sides in dynamic rules with the same label and the application of dynamic rules to terms with annotations.
----+++ Pragmatics
In order to use dynamic rules in a module it is necessary to import the module =dynamic-rules=.
----+++ Dynamic Rules Rethought
We're currently rethinking the concept of dynamic rules. Quite some changes are at stake. We maintain (some of) our thoughts at [[Dynamic Rules Rethought]].
----+++ Related Constructs in Other Languages
Dynamic rules are an innovation of Stratego. Some other languages have constructs that have commonalities with dynamic rules. See [[Dynamic Rules Related]] for a discussion.
-----
-- Main.EelcoVisser - 06 Dec 2001
-- Main.EelcoVisser - 07 May 2002
-- Main.ArthurVanDam - 25 Mar 2004