On 24 December 2010 15:19, Geoffrey De Smet <ge0ffrey.s...@gmail.com> wrote:
> Hi Laun, > > Can you take a look at this regression? > https://issues.jboss.org/browse/JBRULES-2849 > > I shall, but... > I believe the usage of "?" in the regexes is wrong (which is causing the > issue). > For example: regex "(?<=\\W|^)-\\s*\\s+(.*?)\\s+is\\s+(.*?)$" > > The "?" means the character before me might or might not be there. > so "ab?c" matches on "abc" and "ac" > The "(" means start of a group. > So "(?" should fail-fast > "(?" is the start of a non-capturing group. (but it doesn't, just behave differently in jdk5 and jdk6). > > Also ".*?" should fail-fast: either you want ".*" (none or more) or ".+" > (one ore more). > Not so: This is a non-greedy quantifier, and this has been in the code of 5.1.1. -W > > > Op 24-12-10 11:23, Wolfgang Laun schreef: > > This is a summary of the currently implemented new features for the DSL > expansion. I'll have to add tests and documentation, but before doing so, > I'd like to learn whether there are any objections (resulting in the > removal) or suggestions for improvement. Myself, I'm not sure about one or > two items which I've marked with "(?)". Also, there's a couple of items > which might gain from easy-to-implement additions, see "Votes, please". An > example showing most of the new options is given below. > > 1. The right hand side of entry definitions can be empty. (Useful for > deleting "filler" phrases.) > 2. Long entry lines can be split without the need of escaping EOL: > - Any line beginning with # or // starts a DSL comment and is not > passed to the DSL parser. > - Any line beginning with '[' starts a new entry. > - All other lines are appended to the preceding line, with a space > replacing EOL. > - Empty lines are inserted to maintain original line numbers, and > line and column numbers in error messages from the parser are > recalculated > to reflect the user view of the DSL text. > 3. The special comment introduction "#/" is used to mark a line > containing debug options. Currently recognized keywords are: > - result - dumps the resulting DRL > - steps - shows all expansion operations in conditions and > consequences > - keyword, when, then - display the corresponding entry definitions > - usage - shows how often an entry was actually used in an expansion > 4. Variable substitution uses the definition of that variable seen last > in the current when or then part expansion. not just from the current line. > (But this probably should keep variables from the when part for the > following then part. Votes, please.) > 5. The value used in a variable substitution can be modified on the > fly by adding one of the modifiers after and '!' in the variable reference. > Currently recognized modifiers are: > - uc, lc - convert all letters to upper case or lower case, > respectively > - ucfirst - convert the first letter to upper case, and all other > letters to lower case > - num - extract all digits and a '-' preceding the first digit and > insert the numeric value; a '.' or ',' two digits from the right is > retained > as a decimal point, which is useful for monetary quantitites. (?) > 6. Another modification of the value used for substituting the > reference is by providing a "multiple choice" after an '!', consisting of > strings separated alternatively by '?' and '/': If the string extracted > from > the DSLR line matches the string before a '?', the string following it is > used for substitution; otherwise test the next choice. (?) > 7. A DSL value starting with a hyphen ('-') can also be used in a > consequence to add another setter expression into a preceding > "modify(x){}". > (Should probably be extended to be able to handle the insertion of another > parameter to any preceding method call and, as a special, but useful, case > the concatenation to a preceding x.println() or x.print() call. Votes, > please.) > > DSL: > [when][][Tt]here is an?= > [when][]{entity} called {x}= > ${entity!lc}: {entity!ucfirst}( $name: > name=="{x!M?Mark/E?Edson/G?Geoffrey/unknown}") > [when][]and no other with the same {attr}=not {entity!ucfirst}( {attr} == > ${attr} ) > [then][]change person=modify($person)\{\} > [then][]- set {attr} to {value} = set{attr!ucfirst}( {value!num} ) > > DSLR: > rule "Rule 1" > when > There is a PERSON called M > and no other with the same name > then > change person > - set salary to US$9,999.99 > - set rank to "colonel" > end > > DRL: > 8 rule "Rule 1" > 9 when > 10 $person: Person( $name: name=="Mark") > 11 not Person( name == $name ) > 12 then > 13 modify($person){ setSalary( 9999.99 ), setRank( "colonel" ) } > 14 end > > Cheers > Wolfgang > > > > _______________________________________________ > rules-dev mailing > listrules-...@lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/rules-dev > > > -- > With kind regards, > Geoffrey De Smet > > > _______________________________________________ > rules-dev mailing list > rules-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-dev > >
_______________________________________________ rules-dev mailing list rules-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-dev