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.