[rules-users] DSL: Problem of having 2 DSL statements that endsdiffer

Matt Geis mgeis at yahoo.com
Tue Dec 16 09:44:39 EST 2008


Minor correction: 

>>Drools stops on the first DSL sentence it can map to.

[false]
>>If you want it to work, you have to be careful about the order you write sentences in your DSL : write them from the most restricitive to the less.
[depends on what you want to accomplish]

Drools actually does not stop until it hits the end of the DSL entry list.  For each domain specific block of text it has to turn back into DRL, it tries to match/replace on every DSL mapping entry.  So, if you DRL file has 10 lines of conditions (the "when" block) spread across n rules, 6 lines of consequences (the "then" block), and your DSL file has 10 lines, 4 for "any", 3 "when", and 3 "then", you will have 70+24 = 94 different attempts to match/replace.  The engine will not stop at the first match, as subsequent matches may apply.  

Some people take this behavior into account when building their DSLs.

In short, you aren't really writing a simple name/value pair list.  You're writing a transformation engine, through which any entry can be transformed at multiple points along the way.  Raw entry A may not match DSL mapping entry 5, but after it matches entry 3, the replacement then matches entry 5.

Example: 
start with input A
try to match a to entry 1, fail
try to match a to entry 2, fail
try to match a to entry 3, success, transform to B.
try to match b to entry 4, fail
try to match b to entry 5, success, transform to c.

Return c.

Hope that helps,
Matt

ps.  If you start getting into this and find the expressiveness of the language you want to build a bit restrictive in Drools 4, give Drools 5 a test drive.  You'll find that the implementation of DSLs in Drools 5 is a more complete implementation of the original design.  Drools 5 DSL changes were a result of people pushing Drools 4 to and finally a bit past what it was capable of, when trying to realize exactly the kind of behavior you've been discussing.


      



More information about the rules-users mailing list