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