[jboss-svn-commits] JBL Code SVN: r11962 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/lang and 15 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat May 19 17:24:25 EDT 2007


Author: tirelli
Date: 2007-05-19 17:24:24 -0400 (Sat, 19 May 2007)
New Revision: 11962

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ConstraintConnectors.drl
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AndConstraint.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/OrConstraint.java
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/converter/BRXMLToDescrConverter.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL.tokens
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL__.g
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AndDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ConditionalElementDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/EvalDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ExistsDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ForallDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/NotDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MultiRestrictionFieldConstraint.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_implicitDeclarations.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_nullBindings.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_skipModify.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/waltz/waltz.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/in_operator_test.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/notin_operator_test.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/restrictions_test.drl
   labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java
   labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/LocationDeterminatorTest.java
Log:
JBRULES-500:

  * Adding support to field constraint connectives AND and OR
  * Adding support to multi-restriction precedence
  * Adding unit tests



Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/converter/BRXMLToDescrConverter.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/converter/BRXMLToDescrConverter.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/brms/server/converter/BRXMLToDescrConverter.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -96,11 +96,11 @@
             if ( constr.fieldBinding != null ) {
                 final FieldBindingDescr fieldDescr = new FieldBindingDescr( constr.fieldName,
                                                                       constr.fieldBinding );
-                pattern.addDescr( fieldDescr );
+                pattern.addConstraint( fieldDescr );
             }
             if ( constr.constraintValueType == IConstraint.TYPE_PREDICATE ) {
                 final PredicateDescr predicateDescr = new PredicateDescr( constr.value );
-                pattern.addDescr( predicateDescr );
+                pattern.addConstraint( predicateDescr );
             } else {
                 final FieldConstraintDescr constrDescr = new FieldConstraintDescr( constr.fieldName );
                 constrDescr.addRestriction( this.getFieldRestriction( constr.constraintValueType,
@@ -125,7 +125,7 @@
                                                                               conn.value ) );
                     }
                 }
-                pattern.addDescr( constrDescr );
+                pattern.addConstraint( constrDescr );
             }
         }
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL.tokens
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL.tokens	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL.tokens	2007-05-19 21:24:24 UTC (rev 11962)
@@ -1,83 +1,82 @@
-EXISTS=53
-COMMA=44
+EXISTS=56
+COMMA=47
 AUTO_FOCUS=22
 END=10
-HexDigit=60
-FORALL=55
+HexDigit=62
+FORALL=57
 TEMPLATE=11
-MISC=66
-FLOAT=45
+MISC=68
+FLOAT=48
 QUERY=9
-THEN=56
+THEN=58
 RULE=12
 INIT=30
 IMPORT=6
 DATE_EFFECTIVE=14
 PACKAGE=5
-OR=35
-AND=51
+OR=37
+DOUBLE_PIPE=38
+AND=54
 FUNCTION=7
 GLOBAL=8
-EscapeSequence=59
+EscapeSequence=61
 DIALECT=27
 INT=20
 LOCK_ON_ACTIVE=28
 DATE_EXPIRES=16
-LEFT_SQUARE=49
-CONTAINS=38
-SH_STYLE_SINGLE_LINE_COMMENT=63
+LEFT_SQUARE=52
+CONTAINS=41
+SH_STYLE_SINGLE_LINE_COMMENT=65
 ATTRIBUTES=4
-LEFT_CURLY=47
+LEFT_CURLY=50
 RESULT=32
-FROM=52
+FROM=55
 ID=34
 ACTIVATION_GROUP=23
-LEFT_PAREN=36
-RIGHT_CURLY=48
+LEFT_PAREN=35
+DOUBLE_AMPER=39
+RIGHT_CURLY=51
 BOOL=18
-EXCLUDES=40
-MEMBEROF=41
+EXCLUDES=43
+MEMBEROF=44
 WHEN=13
 RULEFLOW_GROUP=24
-WS=58
+WS=60
 STRING=15
 ACTION=31
 COLLECT=33
-IN=43
+IN=46
 NO_LOOP=21
 ACCUMULATE=29
-UnicodeEscape=61
+UnicodeEscape=63
 DURATION=26
-EVAL=54
-MATCHES=39
-EOL=57
-NULL=46
+EVAL=40
+MATCHES=42
+EOL=59
+NULL=49
 AGENDA_GROUP=25
-OctalEscape=62
+OctalEscape=64
 SALIENCE=19
-MULTI_LINE_COMMENT=65
-RIGHT_PAREN=37
-NOT=42
+MULTI_LINE_COMMENT=67
+NOT=45
+RIGHT_PAREN=36
 ENABLED=17
-RIGHT_SQUARE=50
-C_STYLE_SINGLE_LINE_COMMENT=64
-'->'=74
-'<'=78
-'|'=73
-'>'=76
-')'=37
-'=='=75
-';'=67
-']'=50
-'!='=80
-','=44
-'('=36
-'&'=72
-'&&'=81
-'>='=77
-':'=68
-'.'=69
-'<='=79
-'||'=71
-'['=49
-'.*'=70
+RIGHT_SQUARE=53
+C_STYLE_SINGLE_LINE_COMMENT=66
+'->'=73
+'<'=77
+'>'=75
+')'=36
+'=='=74
+';'=69
+']'=53
+'!='=79
+','=47
+'('=35
+'>='=76
+':'=70
+'.'=71
+'||'=38
+'<='=78
+'['=52
+'.*'=72

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0b7 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-07 15:16:50
+// $ANTLR 3.0b7 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-19 15:56:47
 
 	package org.drools.lang;
 
@@ -10,97 +10,95 @@
 import java.util.Map;
 import java.util.HashMap;
 public class DRLLexer extends Lexer {
-    public static final int EXISTS=53;
-    public static final int COMMA=44;
+    public static final int EXISTS=56;
+    public static final int COMMA=47;
     public static final int T79=79;
     public static final int AUTO_FOCUS=22;
     public static final int END=10;
-    public static final int HexDigit=60;
-    public static final int FORALL=55;
+    public static final int HexDigit=62;
+    public static final int FORALL=57;
     public static final int TEMPLATE=11;
     public static final int T70=70;
-    public static final int MISC=66;
-    public static final int FLOAT=45;
+    public static final int MISC=68;
+    public static final int FLOAT=48;
     public static final int T74=74;
     public static final int QUERY=9;
-    public static final int THEN=56;
+    public static final int THEN=58;
     public static final int RULE=12;
     public static final int INIT=30;
     public static final int IMPORT=6;
     public static final int PACKAGE=5;
     public static final int DATE_EFFECTIVE=14;
-    public static final int OR=35;
-    public static final int AND=51;
+    public static final int OR=37;
+    public static final int DOUBLE_PIPE=38;
+    public static final int AND=54;
     public static final int FUNCTION=7;
     public static final int GLOBAL=8;
-    public static final int EscapeSequence=59;
+    public static final int EscapeSequence=61;
     public static final int DIALECT=27;
     public static final int INT=20;
     public static final int LOCK_ON_ACTIVE=28;
     public static final int DATE_EXPIRES=16;
-    public static final int T81=81;
-    public static final int LEFT_SQUARE=49;
-    public static final int CONTAINS=38;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=63;
+    public static final int LEFT_SQUARE=52;
+    public static final int CONTAINS=41;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=65;
     public static final int T77=77;
     public static final int ATTRIBUTES=4;
-    public static final int LEFT_CURLY=47;
+    public static final int LEFT_CURLY=50;
     public static final int RESULT=32;
     public static final int T69=69;
-    public static final int FROM=52;
+    public static final int FROM=55;
     public static final int ID=34;
     public static final int ACTIVATION_GROUP=23;
-    public static final int LEFT_PAREN=36;
-    public static final int RIGHT_CURLY=48;
+    public static final int LEFT_PAREN=35;
+    public static final int DOUBLE_AMPER=39;
+    public static final int RIGHT_CURLY=51;
     public static final int BOOL=18;
-    public static final int EXCLUDES=40;
+    public static final int EXCLUDES=43;
     public static final int T73=73;
-    public static final int T68=68;
-    public static final int MEMBEROF=41;
+    public static final int MEMBEROF=44;
     public static final int WHEN=13;
     public static final int T78=78;
     public static final int RULEFLOW_GROUP=24;
-    public static final int WS=58;
+    public static final int WS=60;
     public static final int STRING=15;
     public static final int ACTION=31;
     public static final int T71=71;
     public static final int T72=72;
     public static final int COLLECT=33;
     public static final int T76=76;
-    public static final int IN=43;
-    public static final int T80=80;
+    public static final int IN=46;
     public static final int ACCUMULATE=29;
     public static final int NO_LOOP=21;
-    public static final int UnicodeEscape=61;
+    public static final int UnicodeEscape=63;
     public static final int T75=75;
     public static final int DURATION=26;
-    public static final int EVAL=54;
-    public static final int MATCHES=39;
+    public static final int EVAL=40;
+    public static final int MATCHES=42;
     public static final int EOF=-1;
-    public static final int T67=67;
     public static final int AGENDA_GROUP=25;
-    public static final int NULL=46;
-    public static final int EOL=57;
-    public static final int Tokens=82;
+    public static final int NULL=49;
+    public static final int EOL=59;
+    public static final int Tokens=80;
     public static final int SALIENCE=19;
-    public static final int OctalEscape=62;
-    public static final int MULTI_LINE_COMMENT=65;
-    public static final int NOT=42;
-    public static final int RIGHT_PAREN=37;
+    public static final int OctalEscape=64;
+    public static final int MULTI_LINE_COMMENT=67;
+    public static final int RIGHT_PAREN=36;
+    public static final int NOT=45;
     public static final int ENABLED=17;
-    public static final int RIGHT_SQUARE=50;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=64;
+    public static final int RIGHT_SQUARE=53;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=66;
     public DRLLexer() {;} 
     public DRLLexer(CharStream input) {
         super(input);
-        ruleMemo = new HashMap[80+1];
+        ruleMemo = new HashMap[78+1];
      }
     public String getGrammarFileName() { return "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
 
-    // $ANTLR start T67
-    public final void mT67() throws RecognitionException {
+    // $ANTLR start T69
+    public final void mT69() throws RecognitionException {
         try {
-            int _type = T67;
+            int _type = T69;
             // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:6:7: ( ';' )
             // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:6:7: ';'
             {
@@ -113,54 +111,17 @@
         finally {
         }
     }
-    // $ANTLR end T67
-
-    // $ANTLR start T68
-    public final void mT68() throws RecognitionException {
-        try {
-            int _type = T68;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:7:7: ( ':' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:7:7: ':'
-            {
-            match(':'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T68
-
-    // $ANTLR start T69
-    public final void mT69() throws RecognitionException {
-        try {
-            int _type = T69;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:8:7: ( '.' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:8:7: '.'
-            {
-            match('.'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
     // $ANTLR end T69
 
     // $ANTLR start T70
     public final void mT70() throws RecognitionException {
         try {
             int _type = T70;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:9:7: ( '.*' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:9:7: '.*'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:7:7: ( ':' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:7:7: ':'
             {
-            match(".*"); if (failed) return ;
+            match(':'); if (failed) return ;
 
-
             }
 
             this.type = _type;
@@ -174,12 +135,11 @@
     public final void mT71() throws RecognitionException {
         try {
             int _type = T71;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:10:7: ( '||' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:10:7: '||'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:8:7: ( '.' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:8:7: '.'
             {
-            match("||"); if (failed) return ;
+            match('.'); if (failed) return ;
 
-
             }
 
             this.type = _type;
@@ -193,11 +153,12 @@
     public final void mT72() throws RecognitionException {
         try {
             int _type = T72;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:11:7: ( '&' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:11:7: '&'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:9:7: ( '.*' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:9:7: '.*'
             {
-            match('&'); if (failed) return ;
+            match(".*"); if (failed) return ;
 
+
             }
 
             this.type = _type;
@@ -211,11 +172,12 @@
     public final void mT73() throws RecognitionException {
         try {
             int _type = T73;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:12:7: ( '|' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:12:7: '|'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:10:7: ( '->' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:10:7: '->'
             {
-            match('|'); if (failed) return ;
+            match("->"); if (failed) return ;
 
+
             }
 
             this.type = _type;
@@ -229,10 +191,10 @@
     public final void mT74() throws RecognitionException {
         try {
             int _type = T74;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:13:7: ( '->' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:13:7: '->'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:11:7: ( '==' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:11:7: '=='
             {
-            match("->"); if (failed) return ;
+            match("=="); if (failed) return ;
 
 
             }
@@ -248,12 +210,11 @@
     public final void mT75() throws RecognitionException {
         try {
             int _type = T75;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:14:7: ( '==' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:14:7: '=='
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:12:7: ( '>' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:12:7: '>'
             {
-            match("=="); if (failed) return ;
+            match('>'); if (failed) return ;
 
-
             }
 
             this.type = _type;
@@ -267,11 +228,12 @@
     public final void mT76() throws RecognitionException {
         try {
             int _type = T76;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:15:7: ( '>' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:15:7: '>'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:13:7: ( '>=' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:13:7: '>='
             {
-            match('>'); if (failed) return ;
+            match(">="); if (failed) return ;
 
+
             }
 
             this.type = _type;
@@ -285,12 +247,11 @@
     public final void mT77() throws RecognitionException {
         try {
             int _type = T77;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:16:7: ( '>=' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:16:7: '>='
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:14:7: ( '<' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:14:7: '<'
             {
-            match(">="); if (failed) return ;
+            match('<'); if (failed) return ;
 
-
             }
 
             this.type = _type;
@@ -304,11 +265,12 @@
     public final void mT78() throws RecognitionException {
         try {
             int _type = T78;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:17:7: ( '<' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:17:7: '<'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:15:7: ( '<=' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:15:7: '<='
             {
-            match('<'); if (failed) return ;
+            match("<="); if (failed) return ;
 
+
             }
 
             this.type = _type;
@@ -322,10 +284,10 @@
     public final void mT79() throws RecognitionException {
         try {
             int _type = T79;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:18:7: ( '<=' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:18:7: '<='
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:16:7: ( '!=' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:16:7: '!='
             {
-            match("<="); if (failed) return ;
+            match("!="); if (failed) return ;
 
 
             }
@@ -337,52 +299,14 @@
     }
     // $ANTLR end T79
 
-    // $ANTLR start T80
-    public final void mT80() throws RecognitionException {
-        try {
-            int _type = T80;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:19:7: ( '!=' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:19:7: '!='
-            {
-            match("!="); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T80
-
-    // $ANTLR start T81
-    public final void mT81() throws RecognitionException {
-        try {
-            int _type = T81;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:20:7: ( '&&' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:20:7: '&&'
-            {
-            match("&&"); if (failed) return ;
-
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end T81
-
     // $ANTLR start WS
     public final void mWS() throws RecognitionException {
         try {
             int _type = WS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1564:17: ( ( ' ' | '\\t' | '\\f' | EOL ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1564:17: ( ' ' | '\\t' | '\\f' | EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:17: ( ( ' ' | '\\t' | '\\f' | EOL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:17: ( ' ' | '\\t' | '\\f' | EOL )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1564:17: ( ' ' | '\\t' | '\\f' | EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:17: ( ' ' | '\\t' | '\\f' | EOL )
             int alt1=4;
             switch ( input.LA(1) ) {
             case ' ':
@@ -409,35 +333,35 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1564:17: ( ' ' | '\\t' | '\\f' | EOL )", 1, 0, input);
+                    new NoViableAltException("1626:17: ( ' ' | '\\t' | '\\f' | EOL )", 1, 0, input);
 
                 throw nvae;
             }
 
             switch (alt1) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1564:19: ' '
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1626:19: ' '
                     {
                     match(' '); if (failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1565:19: '\\t'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:19: '\\t'
                     {
                     match('\t'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1566:19: '\\f'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1628:19: '\\f'
                     {
                     match('\f'); if (failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1567:19: EOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1629:19: EOL
                     {
                     mEOL(); if (failed) return ;
 
@@ -462,10 +386,10 @@
     // $ANTLR start EOL
     public final void mEOL() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1574:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1574:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1574:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
@@ -484,13 +408,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1574:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("1636:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
 
                 throw nvae;
             }
             switch (alt2) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1574:14: ( '\\r\\n' )=> '\\r\\n'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:14: ( '\\r\\n' )=> '\\r\\n'
                     {
                     match("\r\n"); if (failed) return ;
 
@@ -498,14 +422,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1575:25: '\\r'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:25: '\\r'
                     {
                     match('\r'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1576:25: '\\n'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1638:25: '\\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -527,10 +451,10 @@
     public final void mINT() throws RecognitionException {
         try {
             int _type = INT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1581:4: ( ( '-' )? ( '0' .. '9' )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1581:4: ( '-' )? ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:4: ( ( '-' )? ( '0' .. '9' )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:4: ( '-' )? ( '0' .. '9' )+
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1581:4: ( '-' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:4: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -539,7 +463,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1581:5: '-'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -548,7 +472,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1581:10: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:10: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -562,7 +486,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1581:11: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -593,10 +517,10 @@
     public final void mFLOAT() throws RecognitionException {
         try {
             int _type = FLOAT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:4: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:4: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:4: ( '-' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:4: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -605,7 +529,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:5: '-'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -614,7 +538,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:10: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:10: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -628,7 +552,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:11: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -646,7 +570,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:26: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:26: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -660,7 +584,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:27: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:27: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -691,7 +615,7 @@
     public final void mSTRING() throws RecognitionException {
         try {
             int _type = STRING;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:8: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:8: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -704,19 +628,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1588:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("1650:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
 
                 throw nvae;
             }
             switch (alt10) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -732,14 +656,14 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:15: EscapeSequence
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:15: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:32: ~ ( '\\\\' | '\"' )
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:32: ~ ( '\\\\' | '\"' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -769,13 +693,13 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1590:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1590:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1590:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1590:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
                     loop9:
                     do {
                         int alt9=3;
@@ -791,14 +715,14 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1590:16: EscapeSequence
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:16: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1590:33: ~ ( '\\\\' | '\\'' )
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:33: ~ ( '\\\\' | '\\'' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -839,8 +763,8 @@
     // $ANTLR start HexDigit
     public final void mHexDigit() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1594:12: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1594:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:12: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
             {
             if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='F')||(input.LA(1)>='a' && input.LA(1)<='f') ) {
                 input.consume();
@@ -865,30 +789,49 @@
     // $ANTLR start EscapeSequence
     public final void mEscapeSequence() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1598:9: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' ) | UnicodeEscape | OctalEscape )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1660:9: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' ) | UnicodeEscape | OctalEscape )
             int alt11=3;
             int LA11_0 = input.LA(1);
 
             if ( (LA11_0=='\\') ) {
                 switch ( input.LA(2) ) {
+                case 'u':
+                    {
+                    alt11=2;
+                    }
+                    break;
                 case '\"':
                 case '\'':
                 case '.':
+                case 'A':
+                case 'B':
+                case 'D':
+                case 'E':
+                case 'G':
+                case 'Q':
+                case 'S':
+                case 'W':
+                case 'Z':
                 case '\\':
+                case 'a':
                 case 'b':
+                case 'c':
+                case 'd':
+                case 'e':
                 case 'f':
                 case 'n':
+                case 'o':
+                case 'p':
                 case 'r':
+                case 's':
                 case 't':
+                case 'w':
+                case 'x':
+                case 'z':
                     {
                     alt11=1;
                     }
                     break;
-                case 'u':
-                    {
-                    alt11=2;
-                    }
-                    break;
                 case '0':
                 case '1':
                 case '2':
@@ -904,7 +847,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1596:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
+                        new NoViableAltException("1658:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
 
                     throw nvae;
                 }
@@ -913,16 +856,16 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1596:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
+                    new NoViableAltException("1658:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
 
                 throw nvae;
             }
             switch (alt11) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1598:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1660:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' )
                     {
                     match('\\'); if (failed) return ;
-                    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='.'||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||input.LA(1)=='t' ) {
+                    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='.'||(input.LA(1)>='A' && input.LA(1)<='B')||(input.LA(1)>='D' && input.LA(1)<='E')||input.LA(1)=='G'||input.LA(1)=='Q'||input.LA(1)=='S'||input.LA(1)=='W'||input.LA(1)=='Z'||input.LA(1)=='\\'||(input.LA(1)>='a' && input.LA(1)<='f')||(input.LA(1)>='n' && input.LA(1)<='p')||(input.LA(1)>='r' && input.LA(1)<='t')||(input.LA(1)>='w' && input.LA(1)<='x')||input.LA(1)=='z' ) {
                         input.consume();
                     failed=false;
                     }
@@ -937,14 +880,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1599:9: UnicodeEscape
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1661:9: UnicodeEscape
                     {
                     mUnicodeEscape(); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1600:9: OctalEscape
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1662:9: OctalEscape
                     {
                     mOctalEscape(); if (failed) return ;
 
@@ -961,7 +904,7 @@
     // $ANTLR start OctalEscape
     public final void mOctalEscape() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:9: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:9: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             int alt12=3;
             int LA12_0 = input.LA(1);
 
@@ -972,9 +915,9 @@
                     int LA12_2 = input.LA(3);
 
                     if ( ((LA12_2>='0' && LA12_2<='7')) ) {
-                        int LA12_4 = input.LA(4);
+                        int LA12_5 = input.LA(4);
 
-                        if ( ((LA12_4>='0' && LA12_4<='7')) ) {
+                        if ( ((LA12_5>='0' && LA12_5<='7')) ) {
                             alt12=1;
                         }
                         else {
@@ -995,7 +938,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1603:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("1665:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
 
                     throw nvae;
                 }
@@ -1003,31 +946,31 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1603:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("1665:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
 
                 throw nvae;
             }
             switch (alt12) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:14: ( '0' .. '3' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:15: '0' .. '3'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:14: ( '0' .. '3' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:15: '0' .. '3'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:25: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:26: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:25: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:36: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:37: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:36: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:37: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -1037,18 +980,18 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1606:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1668:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1606:14: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1606:15: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1668:14: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1668:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1606:25: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1606:26: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1668:25: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1668:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -1058,11 +1001,11 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:9: '\\\\' ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:14: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:15: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:14: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -1082,8 +1025,8 @@
     // $ANTLR start UnicodeEscape
     public final void mUnicodeEscape() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:9: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1674:9: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1674:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             {
             match('\\'); if (failed) return ;
             match('u'); if (failed) return ;
@@ -1104,10 +1047,10 @@
     public final void mBOOL() throws RecognitionException {
         try {
             int _type = BOOL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1616:4: ( ( 'true' | 'false' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1616:4: ( 'true' | 'false' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:4: ( ( 'true' | 'false' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:4: ( 'true' | 'false' )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1616:4: ( 'true' | 'false' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:4: ( 'true' | 'false' )
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -1120,13 +1063,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1616:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("1678:4: ( 'true' | 'false' )", 13, 0, input);
 
                 throw nvae;
             }
             switch (alt13) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1616:5: 'true'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:5: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -1134,7 +1077,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1616:12: 'false'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:12: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -1158,8 +1101,8 @@
     public final void mPACKAGE() throws RecognitionException {
         try {
             int _type = PACKAGE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1619:11: ( 'package' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1619:11: 'package'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1681:11: ( 'package' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1681:11: 'package'
             {
             match("package"); if (failed) return ;
 
@@ -1177,8 +1120,8 @@
     public final void mIMPORT() throws RecognitionException {
         try {
             int _type = IMPORT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1621:10: ( 'import' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1621:10: 'import'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1683:10: ( 'import' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1683:10: 'import'
             {
             match("import"); if (failed) return ;
 
@@ -1196,8 +1139,8 @@
     public final void mFUNCTION() throws RecognitionException {
         try {
             int _type = FUNCTION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1623:12: ( 'function' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1623:12: 'function'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1685:12: ( 'function' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1685:12: 'function'
             {
             match("function"); if (failed) return ;
 
@@ -1215,8 +1158,8 @@
     public final void mGLOBAL() throws RecognitionException {
         try {
             int _type = GLOBAL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1625:10: ( 'global' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1625:10: 'global'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1687:10: ( 'global' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1687:10: 'global'
             {
             match("global"); if (failed) return ;
 
@@ -1234,8 +1177,8 @@
     public final void mRULE() throws RecognitionException {
         try {
             int _type = RULE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:11: ( 'rule' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:11: 'rule'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1689:11: ( 'rule' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1689:11: 'rule'
             {
             match("rule"); if (failed) return ;
 
@@ -1253,8 +1196,8 @@
     public final void mQUERY() throws RecognitionException {
         try {
             int _type = QUERY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1629:9: ( 'query' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1629:9: 'query'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1691:9: ( 'query' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1691:9: 'query'
             {
             match("query"); if (failed) return ;
 
@@ -1272,8 +1215,8 @@
     public final void mTEMPLATE() throws RecognitionException {
         try {
             int _type = TEMPLATE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:12: ( 'template' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:12: 'template'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1693:12: ( 'template' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1693:12: 'template'
             {
             match("template"); if (failed) return ;
 
@@ -1291,8 +1234,8 @@
     public final void mATTRIBUTES() throws RecognitionException {
         try {
             int _type = ATTRIBUTES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1633:14: ( 'attributes' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1633:14: 'attributes'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:14: ( 'attributes' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:14: 'attributes'
             {
             match("attributes"); if (failed) return ;
 
@@ -1310,8 +1253,8 @@
     public final void mDATE_EFFECTIVE() throws RecognitionException {
         try {
             int _type = DATE_EFFECTIVE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:4: ( 'date-effective' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:4: 'date-effective'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1698:4: ( 'date-effective' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1698:4: 'date-effective'
             {
             match("date-effective"); if (failed) return ;
 
@@ -1329,8 +1272,8 @@
     public final void mDATE_EXPIRES() throws RecognitionException {
         try {
             int _type = DATE_EXPIRES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1639:4: ( 'date-expires' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1639:4: 'date-expires'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:4: ( 'date-expires' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:4: 'date-expires'
             {
             match("date-expires"); if (failed) return ;
 
@@ -1348,8 +1291,8 @@
     public final void mENABLED() throws RecognitionException {
         try {
             int _type = ENABLED;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1641:11: ( 'enabled' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1641:11: 'enabled'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:11: ( 'enabled' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:11: 'enabled'
             {
             match("enabled"); if (failed) return ;
 
@@ -1367,8 +1310,8 @@
     public final void mSALIENCE() throws RecognitionException {
         try {
             int _type = SALIENCE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1644:4: ( 'salience' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1644:4: 'salience'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1706:4: ( 'salience' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1706:4: 'salience'
             {
             match("salience"); if (failed) return ;
 
@@ -1386,8 +1329,8 @@
     public final void mNO_LOOP() throws RecognitionException {
         try {
             int _type = NO_LOOP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1646:11: ( 'no-loop' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1646:11: 'no-loop'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1708:11: ( 'no-loop' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1708:11: 'no-loop'
             {
             match("no-loop"); if (failed) return ;
 
@@ -1405,8 +1348,8 @@
     public final void mAUTO_FOCUS() throws RecognitionException {
         try {
             int _type = AUTO_FOCUS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1649:4: ( 'auto-focus' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1649:4: 'auto-focus'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:4: ( 'auto-focus' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:4: 'auto-focus'
             {
             match("auto-focus"); if (failed) return ;
 
@@ -1424,8 +1367,8 @@
     public final void mACTIVATION_GROUP() throws RecognitionException {
         try {
             int _type = ACTIVATION_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:4: ( 'activation-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1652:4: 'activation-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1714:4: ( 'activation-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1714:4: 'activation-group'
             {
             match("activation-group"); if (failed) return ;
 
@@ -1443,8 +1386,8 @@
     public final void mAGENDA_GROUP() throws RecognitionException {
         try {
             int _type = AGENDA_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1655:4: ( 'agenda-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1655:4: 'agenda-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1717:4: ( 'agenda-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1717:4: 'agenda-group'
             {
             match("agenda-group"); if (failed) return ;
 
@@ -1462,8 +1405,8 @@
     public final void mDIALECT() throws RecognitionException {
         try {
             int _type = DIALECT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1658:4: ( 'dialect' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1658:4: 'dialect'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1720:4: ( 'dialect' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1720:4: 'dialect'
             {
             match("dialect"); if (failed) return ;
 
@@ -1481,8 +1424,8 @@
     public final void mRULEFLOW_GROUP() throws RecognitionException {
         try {
             int _type = RULEFLOW_GROUP;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1661:4: ( 'ruleflow-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1661:4: 'ruleflow-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1723:4: ( 'ruleflow-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1723:4: 'ruleflow-group'
             {
             match("ruleflow-group"); if (failed) return ;
 
@@ -1500,8 +1443,8 @@
     public final void mDURATION() throws RecognitionException {
         try {
             int _type = DURATION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1664:4: ( 'duration' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1664:4: 'duration'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1726:4: ( 'duration' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1726:4: 'duration'
             {
             match("duration"); if (failed) return ;
 
@@ -1519,8 +1462,8 @@
     public final void mLOCK_ON_ACTIVE() throws RecognitionException {
         try {
             int _type = LOCK_ON_ACTIVE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:4: ( 'lock-on-active' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:4: 'lock-on-active'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1729:4: ( 'lock-on-active' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1729:4: 'lock-on-active'
             {
             match("lock-on-active"); if (failed) return ;
 
@@ -1538,8 +1481,8 @@
     public final void mFROM() throws RecognitionException {
         try {
             int _type = FROM;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:8: ( 'from' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1669:8: 'from'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1731:8: ( 'from' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1731:8: 'from'
             {
             match("from"); if (failed) return ;
 
@@ -1557,8 +1500,8 @@
     public final void mACCUMULATE() throws RecognitionException {
         try {
             int _type = ACCUMULATE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1672:4: ( 'accumulate' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1672:4: 'accumulate'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1734:4: ( 'accumulate' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1734:4: 'accumulate'
             {
             match("accumulate"); if (failed) return ;
 
@@ -1576,8 +1519,8 @@
     public final void mINIT() throws RecognitionException {
         try {
             int _type = INIT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1674:8: ( 'init' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1674:8: 'init'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1736:8: ( 'init' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1736:8: 'init'
             {
             match("init"); if (failed) return ;
 
@@ -1595,8 +1538,8 @@
     public final void mACTION() throws RecognitionException {
         try {
             int _type = ACTION;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1676:10: ( 'action' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1676:10: 'action'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1738:10: ( 'action' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1738:10: 'action'
             {
             match("action"); if (failed) return ;
 
@@ -1614,8 +1557,8 @@
     public final void mRESULT() throws RecognitionException {
         try {
             int _type = RESULT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:10: ( 'result' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:10: 'result'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1740:10: ( 'result' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1740:10: 'result'
             {
             match("result"); if (failed) return ;
 
@@ -1633,8 +1576,8 @@
     public final void mCOLLECT() throws RecognitionException {
         try {
             int _type = COLLECT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1680:11: ( 'collect' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1680:11: 'collect'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1742:11: ( 'collect' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1742:11: 'collect'
             {
             match("collect"); if (failed) return ;
 
@@ -1652,8 +1595,8 @@
     public final void mOR() throws RecognitionException {
         try {
             int _type = OR;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1682:6: ( 'or' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1682:6: 'or'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1744:6: ( 'or' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1744:6: 'or'
             {
             match("or"); if (failed) return ;
 
@@ -1671,8 +1614,8 @@
     public final void mAND() throws RecognitionException {
         try {
             int _type = AND;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1684:7: ( 'and' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1684:7: 'and'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1746:7: ( 'and' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1746:7: 'and'
             {
             match("and"); if (failed) return ;
 
@@ -1690,8 +1633,8 @@
     public final void mCONTAINS() throws RecognitionException {
         try {
             int _type = CONTAINS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1687:4: ( 'contains' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1687:4: 'contains'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:4: ( 'contains' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:4: 'contains'
             {
             match("contains"); if (failed) return ;
 
@@ -1709,8 +1652,8 @@
     public final void mEXCLUDES() throws RecognitionException {
         try {
             int _type = EXCLUDES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1690:4: ( 'excludes' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1690:4: 'excludes'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1752:4: ( 'excludes' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1752:4: 'excludes'
             {
             match("excludes"); if (failed) return ;
 
@@ -1728,8 +1671,8 @@
     public final void mMEMBEROF() throws RecognitionException {
         try {
             int _type = MEMBEROF;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1693:4: ( 'memberOf' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1693:4: 'memberOf'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:4: ( 'memberOf' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:4: 'memberOf'
             {
             match("memberOf"); if (failed) return ;
 
@@ -1747,8 +1690,8 @@
     public final void mMATCHES() throws RecognitionException {
         try {
             int _type = MATCHES;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:11: ( 'matches' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:11: 'matches'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1757:11: ( 'matches' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1757:11: 'matches'
             {
             match("matches"); if (failed) return ;
 
@@ -1766,8 +1709,8 @@
     public final void mIN() throws RecognitionException {
         try {
             int _type = IN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1697:6: ( 'in' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1697:6: 'in'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1759:6: ( 'in' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1759:6: 'in'
             {
             match("in"); if (failed) return ;
 
@@ -1785,8 +1728,8 @@
     public final void mNULL() throws RecognitionException {
         try {
             int _type = NULL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1699:8: ( 'null' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1699:8: 'null'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:8: ( 'null' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:8: 'null'
             {
             match("null"); if (failed) return ;
 
@@ -1804,8 +1747,8 @@
     public final void mEXISTS() throws RecognitionException {
         try {
             int _type = EXISTS;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:10: ( 'exists' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:10: 'exists'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1763:10: ( 'exists' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1763:10: 'exists'
             {
             match("exists"); if (failed) return ;
 
@@ -1823,8 +1766,8 @@
     public final void mNOT() throws RecognitionException {
         try {
             int _type = NOT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:7: ( 'not' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:7: 'not'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:7: ( 'not' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:7: 'not'
             {
             match("not"); if (failed) return ;
 
@@ -1842,8 +1785,8 @@
     public final void mEVAL() throws RecognitionException {
         try {
             int _type = EVAL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1705:8: ( 'eval' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1705:8: 'eval'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1767:8: ( 'eval' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1767:8: 'eval'
             {
             match("eval"); if (failed) return ;
 
@@ -1861,8 +1804,8 @@
     public final void mFORALL() throws RecognitionException {
         try {
             int _type = FORALL;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1707:10: ( 'forall' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1707:10: 'forall'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1769:10: ( 'forall' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1769:10: 'forall'
             {
             match("forall"); if (failed) return ;
 
@@ -1880,8 +1823,8 @@
     public final void mWHEN() throws RecognitionException {
         try {
             int _type = WHEN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1709:11: ( 'when' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1709:11: 'when'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1771:11: ( 'when' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1771:11: 'when'
             {
             match("when"); if (failed) return ;
 
@@ -1899,8 +1842,8 @@
     public final void mTHEN() throws RecognitionException {
         try {
             int _type = THEN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:12: ( 'then' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:12: 'then'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1773:12: ( 'then' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1773:12: 'then'
             {
             match("then"); if (failed) return ;
 
@@ -1918,8 +1861,8 @@
     public final void mEND() throws RecognitionException {
         try {
             int _type = END;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1713:11: ( 'end' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1713:11: 'end'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1775:11: ( 'end' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1775:11: 'end'
             {
             match("end"); if (failed) return ;
 
@@ -1937,8 +1880,8 @@
     public final void mID() throws RecognitionException {
         try {
             int _type = ID;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1716:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1716:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1778:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1778:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             {
             if ( input.LA(1)=='$'||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||(input.LA(1)>='\u00C0' && input.LA(1)<='\u00FF') ) {
                 input.consume();
@@ -1951,7 +1894,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1716:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1778:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             loop14:
             do {
                 int alt14=2;
@@ -1996,15 +1939,179 @@
     }
     // $ANTLR end ID
 
+    // $ANTLR start LEFT_PAREN
+    public final void mLEFT_PAREN() throws RecognitionException {
+        try {
+            int _type = LEFT_PAREN;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1782:11: ( '(' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1782:11: '('
+            {
+            match('('); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LEFT_PAREN
+
+    // $ANTLR start RIGHT_PAREN
+    public final void mRIGHT_PAREN() throws RecognitionException {
+        try {
+            int _type = RIGHT_PAREN;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1786:11: ( ')' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1786:11: ')'
+            {
+            match(')'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RIGHT_PAREN
+
+    // $ANTLR start LEFT_SQUARE
+    public final void mLEFT_SQUARE() throws RecognitionException {
+        try {
+            int _type = LEFT_SQUARE;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1790:11: ( '[' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1790:11: '['
+            {
+            match('['); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LEFT_SQUARE
+
+    // $ANTLR start RIGHT_SQUARE
+    public final void mRIGHT_SQUARE() throws RecognitionException {
+        try {
+            int _type = RIGHT_SQUARE;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1794:11: ( ']' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1794:11: ']'
+            {
+            match(']'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RIGHT_SQUARE
+
+    // $ANTLR start LEFT_CURLY
+    public final void mLEFT_CURLY() throws RecognitionException {
+        try {
+            int _type = LEFT_CURLY;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1798:11: ( '{' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1798:11: '{'
+            {
+            match('{'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end LEFT_CURLY
+
+    // $ANTLR start RIGHT_CURLY
+    public final void mRIGHT_CURLY() throws RecognitionException {
+        try {
+            int _type = RIGHT_CURLY;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1802:11: ( '}' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1802:11: '}'
+            {
+            match('}'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RIGHT_CURLY
+
+    // $ANTLR start COMMA
+    public final void mCOMMA() throws RecognitionException {
+        try {
+            int _type = COMMA;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1805:9: ( ',' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1805:9: ','
+            {
+            match(','); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end COMMA
+
+    // $ANTLR start DOUBLE_AMPER
+    public final void mDOUBLE_AMPER() throws RecognitionException {
+        try {
+            int _type = DOUBLE_AMPER;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1809:4: ( '&&' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1809:4: '&&'
+            {
+            match("&&"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end DOUBLE_AMPER
+
+    // $ANTLR start DOUBLE_PIPE
+    public final void mDOUBLE_PIPE() throws RecognitionException {
+        try {
+            int _type = DOUBLE_PIPE;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1813:4: ( '||' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1813:4: '||'
+            {
+            match("||"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end DOUBLE_PIPE
+
     // $ANTLR start SH_STYLE_SINGLE_LINE_COMMENT
     public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = SH_STYLE_SINGLE_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1721:4: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1721:4: '#' ( options {greedy=false; } : . )* EOL
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1817:4: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1817:4: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1721:8: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1817:8: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -2023,7 +2130,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1721:35: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1817:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2053,12 +2160,12 @@
     public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = C_STYLE_SINGLE_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1727:4: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1727:4: '//' ( options {greedy=false; } : . )* EOL
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1823:4: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1823:4: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1727:9: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1823:9: ( options {greedy=false; } : . )*
             loop16:
             do {
                 int alt16=2;
@@ -2077,7 +2184,7 @@
 
                 switch (alt16) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1727:36: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1823:36: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2103,124 +2210,16 @@
     }
     // $ANTLR end C_STYLE_SINGLE_LINE_COMMENT
 
-    // $ANTLR start LEFT_PAREN
-    public final void mLEFT_PAREN() throws RecognitionException {
-        try {
-            int _type = LEFT_PAREN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1733:11: ( '(' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1733:11: '('
-            {
-            match('('); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end LEFT_PAREN
-
-    // $ANTLR start RIGHT_PAREN
-    public final void mRIGHT_PAREN() throws RecognitionException {
-        try {
-            int _type = RIGHT_PAREN;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1737:11: ( ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1737:11: ')'
-            {
-            match(')'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end RIGHT_PAREN
-
-    // $ANTLR start LEFT_SQUARE
-    public final void mLEFT_SQUARE() throws RecognitionException {
-        try {
-            int _type = LEFT_SQUARE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1741:11: ( '[' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1741:11: '['
-            {
-            match('['); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end LEFT_SQUARE
-
-    // $ANTLR start RIGHT_SQUARE
-    public final void mRIGHT_SQUARE() throws RecognitionException {
-        try {
-            int _type = RIGHT_SQUARE;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1745:11: ( ']' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1745:11: ']'
-            {
-            match(']'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end RIGHT_SQUARE
-
-    // $ANTLR start LEFT_CURLY
-    public final void mLEFT_CURLY() throws RecognitionException {
-        try {
-            int _type = LEFT_CURLY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:11: ( '{' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1749:11: '{'
-            {
-            match('{'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end LEFT_CURLY
-
-    // $ANTLR start RIGHT_CURLY
-    public final void mRIGHT_CURLY() throws RecognitionException {
-        try {
-            int _type = RIGHT_CURLY;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1753:11: ( '}' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1753:11: '}'
-            {
-            match('}'); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end RIGHT_CURLY
-
     // $ANTLR start MULTI_LINE_COMMENT
     public final void mMULTI_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = MULTI_LINE_COMMENT;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1757:4: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1757:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1828:4: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1828:4: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1757:9: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1828:9: ( options {greedy=false; } : . )*
             loop17:
             do {
                 int alt17=2;
@@ -2245,7 +2244,7 @@
 
                 switch (alt17) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1757:35: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1828:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2272,29 +2271,11 @@
     }
     // $ANTLR end MULTI_LINE_COMMENT
 
-    // $ANTLR start COMMA
-    public final void mCOMMA() throws RecognitionException {
-        try {
-            int _type = COMMA;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:9: ( ',' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1761:9: ','
-            {
-            match(','); if (failed) return ;
-
-            }
-
-            this.type = _type;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end COMMA
-
     // $ANTLR start MISC
     public final void mMISC() throws RecognitionException {
         try {
             int _type = MISC;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1765:3: ( '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?' | '|' | '=' | '/' | '\\'' | '\\\\' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1833:3: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
             // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             {
             if ( input.LA(1)=='!'||(input.LA(1)>='$' && input.LA(1)<='\'')||(input.LA(1)>='*' && input.LA(1)<='+')||input.LA(1)=='-'||input.LA(1)=='/'||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='@')||input.LA(1)=='\\'||(input.LA(1)>='^' && input.LA(1)<='_')||input.LA(1)=='|' ) {
@@ -2319,517 +2300,503 @@
     // $ANTLR end MISC
 
     public void mTokens() throws RecognitionException {
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:10: ( T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | WS | INT | FLOAT | STRING | BOOL | PACKAGE | IMPORT | FUNCTION | GLOBAL | RULE | QUERY | TEMPLATE | ATTRIBUTES | DATE_EFFECTIVE | DATE_EXPIRES | ENABLED | SALIENCE | NO_LOOP | AUTO_FOCUS | ACTIVATION_GROUP | AGENDA_GROUP | DIALECT | RULEFLOW_GROUP | DURATION | LOCK_ON_ACTIVE | FROM | ACCUMULATE | INIT | ACTION | RESULT | COLLECT | OR | AND | CONTAINS | EXCLUDES | MEMBEROF | MATCHES | IN | NULL | EXISTS | NOT | EVAL | FORALL | WHEN | THEN | END | ID | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | MULTI_LINE_COMMENT | COMMA | MISC )
-        int alt18=73;
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:10: ( T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | WS | INT | FLOAT | STRING | BOOL | PACKAGE | IMPORT | FUNCTION | GLOBAL | RULE | QUERY | TEMPLATE | ATTRIBUTES | DATE_EFFECTIVE | DATE_EXPIRES | ENABLED | SALIENCE | NO_LOOP | AUTO_FOCUS | ACTIVATION_GROUP | AGENDA_GROUP | DIALECT | RULEFLOW_GROUP | DURATION | LOCK_ON_ACTIVE | FROM | ACCUMULATE | INIT | ACTION | RESULT | COLLECT | OR | AND | CONTAINS | EXCLUDES | MEMBEROF | MATCHES | IN | NULL | EXISTS | NOT | EVAL | FORALL | WHEN | THEN | END | ID | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | COMMA | DOUBLE_AMPER | DOUBLE_PIPE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC )
+        int alt18=71;
         alt18 = dfa18.predict(input);
         switch (alt18) {
             case 1 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:10: T67
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:10: T69
                 {
-                mT67(); if (failed) return ;
+                mT69(); if (failed) return ;
 
                 }
                 break;
             case 2 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:14: T68
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:14: T70
                 {
-                mT68(); if (failed) return ;
+                mT70(); if (failed) return ;
 
                 }
                 break;
             case 3 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:18: T69
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:18: T71
                 {
-                mT69(); if (failed) return ;
+                mT71(); if (failed) return ;
 
                 }
                 break;
             case 4 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:22: T70
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:22: T72
                 {
-                mT70(); if (failed) return ;
+                mT72(); if (failed) return ;
 
                 }
                 break;
             case 5 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:26: T71
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:26: T73
                 {
-                mT71(); if (failed) return ;
+                mT73(); if (failed) return ;
 
                 }
                 break;
             case 6 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:30: T72
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:30: T74
                 {
-                mT72(); if (failed) return ;
+                mT74(); if (failed) return ;
 
                 }
                 break;
             case 7 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:34: T73
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:34: T75
                 {
-                mT73(); if (failed) return ;
+                mT75(); if (failed) return ;
 
                 }
                 break;
             case 8 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:38: T74
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:38: T76
                 {
-                mT74(); if (failed) return ;
+                mT76(); if (failed) return ;
 
                 }
                 break;
             case 9 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:42: T75
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:42: T77
                 {
-                mT75(); if (failed) return ;
+                mT77(); if (failed) return ;
 
                 }
                 break;
             case 10 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:46: T76
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:46: T78
                 {
-                mT76(); if (failed) return ;
+                mT78(); if (failed) return ;
 
                 }
                 break;
             case 11 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:50: T77
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:50: T79
                 {
-                mT77(); if (failed) return ;
+                mT79(); if (failed) return ;
 
                 }
                 break;
             case 12 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:54: T78
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:54: WS
                 {
-                mT78(); if (failed) return ;
+                mWS(); if (failed) return ;
 
                 }
                 break;
             case 13 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:58: T79
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:57: INT
                 {
-                mT79(); if (failed) return ;
+                mINT(); if (failed) return ;
 
                 }
                 break;
             case 14 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:62: T80
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:61: FLOAT
                 {
-                mT80(); if (failed) return ;
+                mFLOAT(); if (failed) return ;
 
                 }
                 break;
             case 15 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:66: T81
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:67: STRING
                 {
-                mT81(); if (failed) return ;
+                mSTRING(); if (failed) return ;
 
                 }
                 break;
             case 16 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:70: WS
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:74: BOOL
                 {
-                mWS(); if (failed) return ;
+                mBOOL(); if (failed) return ;
 
                 }
                 break;
             case 17 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:73: INT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:79: PACKAGE
                 {
-                mINT(); if (failed) return ;
+                mPACKAGE(); if (failed) return ;
 
                 }
                 break;
             case 18 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:77: FLOAT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:87: IMPORT
                 {
-                mFLOAT(); if (failed) return ;
+                mIMPORT(); if (failed) return ;
 
                 }
                 break;
             case 19 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:83: STRING
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:94: FUNCTION
                 {
-                mSTRING(); if (failed) return ;
+                mFUNCTION(); if (failed) return ;
 
                 }
                 break;
             case 20 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:90: BOOL
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:103: GLOBAL
                 {
-                mBOOL(); if (failed) return ;
+                mGLOBAL(); if (failed) return ;
 
                 }
                 break;
             case 21 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:95: PACKAGE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:110: RULE
                 {
-                mPACKAGE(); if (failed) return ;
+                mRULE(); if (failed) return ;
 
                 }
                 break;
             case 22 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:103: IMPORT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:115: QUERY
                 {
-                mIMPORT(); if (failed) return ;
+                mQUERY(); if (failed) return ;
 
                 }
                 break;
             case 23 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:110: FUNCTION
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:121: TEMPLATE
                 {
-                mFUNCTION(); if (failed) return ;
+                mTEMPLATE(); if (failed) return ;
 
                 }
                 break;
             case 24 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:119: GLOBAL
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:130: ATTRIBUTES
                 {
-                mGLOBAL(); if (failed) return ;
+                mATTRIBUTES(); if (failed) return ;
 
                 }
                 break;
             case 25 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:126: RULE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:141: DATE_EFFECTIVE
                 {
-                mRULE(); if (failed) return ;
+                mDATE_EFFECTIVE(); if (failed) return ;
 
                 }
                 break;
             case 26 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:131: QUERY
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:156: DATE_EXPIRES
                 {
-                mQUERY(); if (failed) return ;
+                mDATE_EXPIRES(); if (failed) return ;
 
                 }
                 break;
             case 27 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:137: TEMPLATE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:169: ENABLED
                 {
-                mTEMPLATE(); if (failed) return ;
+                mENABLED(); if (failed) return ;
 
                 }
                 break;
             case 28 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:146: ATTRIBUTES
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:177: SALIENCE
                 {
-                mATTRIBUTES(); if (failed) return ;
+                mSALIENCE(); if (failed) return ;
 
                 }
                 break;
             case 29 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:157: DATE_EFFECTIVE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:186: NO_LOOP
                 {
-                mDATE_EFFECTIVE(); if (failed) return ;
+                mNO_LOOP(); if (failed) return ;
 
                 }
                 break;
             case 30 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:172: DATE_EXPIRES
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:194: AUTO_FOCUS
                 {
-                mDATE_EXPIRES(); if (failed) return ;
+                mAUTO_FOCUS(); if (failed) return ;
 
                 }
                 break;
             case 31 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:185: ENABLED
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:205: ACTIVATION_GROUP
                 {
-                mENABLED(); if (failed) return ;
+                mACTIVATION_GROUP(); if (failed) return ;
 
                 }
                 break;
             case 32 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:193: SALIENCE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:222: AGENDA_GROUP
                 {
-                mSALIENCE(); if (failed) return ;
+                mAGENDA_GROUP(); if (failed) return ;
 
                 }
                 break;
             case 33 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:202: NO_LOOP
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:235: DIALECT
                 {
-                mNO_LOOP(); if (failed) return ;
+                mDIALECT(); if (failed) return ;
 
                 }
                 break;
             case 34 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:210: AUTO_FOCUS
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:243: RULEFLOW_GROUP
                 {
-                mAUTO_FOCUS(); if (failed) return ;
+                mRULEFLOW_GROUP(); if (failed) return ;
 
                 }
                 break;
             case 35 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:221: ACTIVATION_GROUP
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:258: DURATION
                 {
-                mACTIVATION_GROUP(); if (failed) return ;
+                mDURATION(); if (failed) return ;
 
                 }
                 break;
             case 36 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:238: AGENDA_GROUP
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:267: LOCK_ON_ACTIVE
                 {
-                mAGENDA_GROUP(); if (failed) return ;
+                mLOCK_ON_ACTIVE(); if (failed) return ;
 
                 }
                 break;
             case 37 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:251: DIALECT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:282: FROM
                 {
-                mDIALECT(); if (failed) return ;
+                mFROM(); if (failed) return ;
 
                 }
                 break;
             case 38 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:259: RULEFLOW_GROUP
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:287: ACCUMULATE
                 {
-                mRULEFLOW_GROUP(); if (failed) return ;
+                mACCUMULATE(); if (failed) return ;
 
                 }
                 break;
             case 39 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:274: DURATION
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:298: INIT
                 {
-                mDURATION(); if (failed) return ;
+                mINIT(); if (failed) return ;
 
                 }
                 break;
             case 40 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:283: LOCK_ON_ACTIVE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:303: ACTION
                 {
-                mLOCK_ON_ACTIVE(); if (failed) return ;
+                mACTION(); if (failed) return ;
 
                 }
                 break;
             case 41 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:298: FROM
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:310: RESULT
                 {
-                mFROM(); if (failed) return ;
+                mRESULT(); if (failed) return ;
 
                 }
                 break;
             case 42 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:303: ACCUMULATE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:317: COLLECT
                 {
-                mACCUMULATE(); if (failed) return ;
+                mCOLLECT(); if (failed) return ;
 
                 }
                 break;
             case 43 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:314: INIT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:325: OR
                 {
-                mINIT(); if (failed) return ;
+                mOR(); if (failed) return ;
 
                 }
                 break;
             case 44 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:319: ACTION
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:328: AND
                 {
-                mACTION(); if (failed) return ;
+                mAND(); if (failed) return ;
 
                 }
                 break;
             case 45 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:326: RESULT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:332: CONTAINS
                 {
-                mRESULT(); if (failed) return ;
+                mCONTAINS(); if (failed) return ;
 
                 }
                 break;
             case 46 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:333: COLLECT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:341: EXCLUDES
                 {
-                mCOLLECT(); if (failed) return ;
+                mEXCLUDES(); if (failed) return ;
 
                 }
                 break;
             case 47 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:341: OR
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:350: MEMBEROF
                 {
-                mOR(); if (failed) return ;
+                mMEMBEROF(); if (failed) return ;
 
                 }
                 break;
             case 48 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:344: AND
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:359: MATCHES
                 {
-                mAND(); if (failed) return ;
+                mMATCHES(); if (failed) return ;
 
                 }
                 break;
             case 49 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:348: CONTAINS
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:367: IN
                 {
-                mCONTAINS(); if (failed) return ;
+                mIN(); if (failed) return ;
 
                 }
                 break;
             case 50 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:357: EXCLUDES
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:370: NULL
                 {
-                mEXCLUDES(); if (failed) return ;
+                mNULL(); if (failed) return ;
 
                 }
                 break;
             case 51 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:366: MEMBEROF
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:375: EXISTS
                 {
-                mMEMBEROF(); if (failed) return ;
+                mEXISTS(); if (failed) return ;
 
                 }
                 break;
             case 52 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:375: MATCHES
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:382: NOT
                 {
-                mMATCHES(); if (failed) return ;
+                mNOT(); if (failed) return ;
 
                 }
                 break;
             case 53 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:383: IN
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:386: EVAL
                 {
-                mIN(); if (failed) return ;
+                mEVAL(); if (failed) return ;
 
                 }
                 break;
             case 54 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:386: NULL
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:391: FORALL
                 {
-                mNULL(); if (failed) return ;
+                mFORALL(); if (failed) return ;
 
                 }
                 break;
             case 55 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:391: EXISTS
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:398: WHEN
                 {
-                mEXISTS(); if (failed) return ;
+                mWHEN(); if (failed) return ;
 
                 }
                 break;
             case 56 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:398: NOT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:403: THEN
                 {
-                mNOT(); if (failed) return ;
+                mTHEN(); if (failed) return ;
 
                 }
                 break;
             case 57 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:402: EVAL
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:408: END
                 {
-                mEVAL(); if (failed) return ;
+                mEND(); if (failed) return ;
 
                 }
                 break;
             case 58 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:407: FORALL
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:412: ID
                 {
-                mFORALL(); if (failed) return ;
+                mID(); if (failed) return ;
 
                 }
                 break;
             case 59 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:414: WHEN
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:415: LEFT_PAREN
                 {
-                mWHEN(); if (failed) return ;
+                mLEFT_PAREN(); if (failed) return ;
 
                 }
                 break;
             case 60 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:419: THEN
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:426: RIGHT_PAREN
                 {
-                mTHEN(); if (failed) return ;
+                mRIGHT_PAREN(); if (failed) return ;
 
                 }
                 break;
             case 61 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:424: END
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:438: LEFT_SQUARE
                 {
-                mEND(); if (failed) return ;
+                mLEFT_SQUARE(); if (failed) return ;
 
                 }
                 break;
             case 62 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:428: ID
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:450: RIGHT_SQUARE
                 {
-                mID(); if (failed) return ;
+                mRIGHT_SQUARE(); if (failed) return ;
 
                 }
                 break;
             case 63 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:431: SH_STYLE_SINGLE_LINE_COMMENT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:463: LEFT_CURLY
                 {
-                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mLEFT_CURLY(); if (failed) return ;
 
                 }
                 break;
             case 64 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:460: C_STYLE_SINGLE_LINE_COMMENT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:474: RIGHT_CURLY
                 {
-                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mRIGHT_CURLY(); if (failed) return ;
 
                 }
                 break;
             case 65 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:488: LEFT_PAREN
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:486: COMMA
                 {
-                mLEFT_PAREN(); if (failed) return ;
+                mCOMMA(); if (failed) return ;
 
                 }
                 break;
             case 66 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:499: RIGHT_PAREN
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:492: DOUBLE_AMPER
                 {
-                mRIGHT_PAREN(); if (failed) return ;
+                mDOUBLE_AMPER(); if (failed) return ;
 
                 }
                 break;
             case 67 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:511: LEFT_SQUARE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:505: DOUBLE_PIPE
                 {
-                mLEFT_SQUARE(); if (failed) return ;
+                mDOUBLE_PIPE(); if (failed) return ;
 
                 }
                 break;
             case 68 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:523: RIGHT_SQUARE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:517: SH_STYLE_SINGLE_LINE_COMMENT
                 {
-                mRIGHT_SQUARE(); if (failed) return ;
+                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
 
                 }
                 break;
             case 69 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:536: LEFT_CURLY
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:546: C_STYLE_SINGLE_LINE_COMMENT
                 {
-                mLEFT_CURLY(); if (failed) return ;
+                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
 
                 }
                 break;
             case 70 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:547: RIGHT_CURLY
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:574: MULTI_LINE_COMMENT
                 {
-                mRIGHT_CURLY(); if (failed) return ;
+                mMULTI_LINE_COMMENT(); if (failed) return ;
 
                 }
                 break;
             case 71 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:559: MULTI_LINE_COMMENT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:593: MISC
                 {
-                mMULTI_LINE_COMMENT(); if (failed) return ;
-
-                }
-                break;
-            case 72 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:578: COMMA
-                {
-                mCOMMA(); if (failed) return ;
-
-                }
-                break;
-            case 73 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:584: MISC
-                {
                 mMISC(); if (failed) return ;
 
                 }
@@ -2841,8 +2808,8 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1574:14: ( '\\r\\n' )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1574:16: '\\r\\n'
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:14: ( '\\r\\n' )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1636:16: '\\r\\n'
         {
         match("\r\n"); if (failed) return ;
 
@@ -2869,132 +2836,133 @@
 
     protected DFA18 dfa18 = new DFA18(this);
     static final String DFA18_eotS =
-        "\3\uffff\1\55\1\57\1\61\2\53\1\65\1\67\1\53\1\uffff\1\72\1\uffff"+
-        "\1\53\21\52\2\uffff\1\53\30\uffff\10\52\1\150\25\52\1\u0083\3\52"+
-        "\2\uffff\11\52\1\uffff\5\52\1\u0095\13\52\1\u00a1\2\52\1\uffff\1"+
-        "\u00a4\4\52\1\uffff\3\52\1\u00ac\1\u00ad\4\52\1\u00b2\1\52\1\u00b4"+
-        "\2\52\1\u00b8\2\52\1\uffff\13\52\1\uffff\1\u00c7\1\52\1\uffff\1"+
-        "\u00c9\5\52\1\u00cf\2\uffff\3\52\1\u00ad\1\uffff\1\52\1\uffff\3"+
-        "\52\1\uffff\1\52\1\u00d8\5\52\2\uffff\5\52\1\uffff\1\52\2\uffff"+
-        "\4\52\1\uffff\2\52\1\u00eb\1\52\1\u00ed\1\u00ee\1\52\1\u00f0\1\uffff"+
-        "\2\52\1\u00f3\2\52\1\uffff\2\52\1\u00fa\11\52\1\uffff\1\u0104\2"+
-        "\uffff\1\52\2\uffff\1\52\1\uffff\2\52\2\uffff\1\u0109\1\52\1\uffff"+
-        "\1\52\1\u010c\1\52\1\u010e\1\52\1\u0110\1\52\1\u0112\1\u0113\1\uffff"+
-        "\4\52\1\uffff\1\u0118\1\u0119\1\uffff\1\u011a\1\uffff\1\u011b\1"+
-        "\uffff\1\u011c\3\uffff\3\52\5\uffff\1\u0120\1\52\1\u0122\3\uffff";
+        "\3\uffff\1\55\2\53\1\61\1\63\1\53\1\uffff\1\65\1\uffff\1\53\21\52"+
+        "\10\uffff\2\53\1\uffff\1\53\15\uffff\10\52\1\146\25\52\1\u0081\3"+
+        "\52\4\uffff\11\52\1\uffff\6\52\1\u0094\11\52\1\u009e\3\52\1\uffff"+
+        "\1\u00a2\4\52\1\uffff\3\52\1\u00aa\1\u00ab\4\52\1\u00b0\1\52\1\u00b2"+
+        "\2\52\1\u00b6\3\52\1\uffff\11\52\1\uffff\1\52\1\u00c5\1\52\1\uffff"+
+        "\1\u00c7\5\52\1\u00cd\2\uffff\2\52\1\u00aa\1\52\1\uffff\1\52\1\uffff"+
+        "\3\52\1\uffff\1\52\1\u00d6\4\52\1\uffff\2\52\1\uffff\4\52\1\uffff"+
+        "\1\52\2\uffff\4\52\1\uffff\1\52\1\u00e8\2\52\1\u00eb\1\u00ec\1\52"+
+        "\1\u00ee\1\uffff\1\52\1\u00f0\4\52\1\uffff\1\52\1\u00f8\10\52\1"+
+        "\uffff\1\52\1\u0102\2\uffff\1\52\1\uffff\1\52\1\uffff\2\52\1\uffff"+
+        "\1\u0107\2\uffff\1\52\1\uffff\1\52\1\u010a\2\52\1\u010d\1\u010e"+
+        "\1\52\1\u0110\1\u0111\1\uffff\4\52\1\uffff\1\u0116\1\u0117\1\uffff"+
+        "\1\u0118\1\u0119\2\uffff\1\u011a\3\uffff\3\52\5\uffff\1\u011e\1"+
+        "\52\1\u0120\3\uffff";
     static final String DFA18_eofS =
-        "\u0123\uffff";
+        "\u0121\uffff";
     static final String DFA18_minS =
-        "\1\11\2\uffff\1\52\1\174\1\46\1\60\4\75\1\uffff\1\56\1\uffff\1\0"+
-        "\1\145\2\141\1\155\1\154\1\145\1\165\1\143\1\141\1\156\1\141\3\157"+
-        "\1\162\1\141\1\150\2\uffff\1\52\30\uffff\1\145\1\165\1\155\1\156"+
-        "\1\162\1\154\1\157\1\143\1\60\1\160\1\157\1\154\1\163\1\145\1\144"+
-        "\1\145\1\143\3\164\1\141\1\162\1\143\2\141\1\154\1\55\1\154\1\143"+
-        "\1\154\1\60\1\164\1\155\1\145\2\uffff\1\156\1\145\1\160\1\143\1"+
-        "\141\1\163\1\155\1\153\1\164\1\uffff\1\157\1\142\1\145\1\165\1\162"+
-        "\1\60\1\156\1\165\1\151\1\162\1\157\1\145\1\154\1\141\1\163\1\154"+
-        "\1\142\1\60\1\154\1\151\1\uffff\1\60\1\154\1\153\1\154\1\164\1\uffff"+
-        "\1\143\1\142\1\156\2\60\1\154\1\164\1\154\1\145\1\60\1\141\1\60"+
-        "\1\162\1\141\1\60\1\154\1\171\1\uffff\1\144\1\155\1\157\1\151\2"+
-        "\55\1\145\2\164\1\165\1\154\1\uffff\1\60\1\145\1\uffff\1\60\1\55"+
-        "\1\145\1\141\1\150\1\145\1\60\2\uffff\1\141\1\151\1\154\1\60\1\uffff"+
-        "\1\147\1\uffff\1\164\2\154\1\uffff\1\164\1\60\1\141\1\165\1\156"+
-        "\1\141\1\142\1\uffff\1\145\1\143\1\151\1\163\1\144\1\145\1\uffff"+
-        "\1\156\2\uffff\1\143\1\151\1\145\1\162\1\uffff\1\164\1\157\1\60"+
-        "\1\145\2\60\1\157\1\60\1\uffff\1\55\1\154\1\60\1\164\1\165\1\146"+
-        "\1\164\1\157\1\60\1\145\1\144\1\143\1\164\1\156\1\163\1\117\1\145"+
-        "\1\156\1\uffff\1\60\2\uffff\1\167\2\uffff\1\141\1\uffff\1\151\1"+
-        "\164\2\uffff\1\60\1\156\1\uffff\1\163\1\60\1\145\1\60\1\163\1\60"+
-        "\1\146\2\60\1\uffff\1\55\1\164\1\157\1\145\1\uffff\2\60\1\uffff"+
-        "\1\60\1\uffff\1\60\1\uffff\1\60\3\uffff\1\145\1\156\1\163\5\uffff"+
+        "\1\11\2\uffff\1\52\1\60\4\75\1\uffff\1\56\1\uffff\1\0\1\145\2\141"+
+        "\1\155\1\154\1\145\1\165\1\143\1\141\1\156\1\141\3\157\1\162\1\141"+
+        "\1\150\10\uffff\1\46\1\174\1\uffff\1\52\15\uffff\1\165\1\145\1\155"+
+        "\1\162\1\154\1\156\1\157\1\143\1\60\1\160\1\157\1\154\1\163\1\145"+
+        "\1\164\1\144\1\143\1\164\1\145\1\141\1\164\1\162\1\143\2\141\1\154"+
+        "\1\55\1\154\1\143\1\154\1\60\1\164\1\155\1\145\4\uffff\1\145\1\156"+
+        "\1\160\1\141\1\163\1\143\1\155\1\153\1\164\1\uffff\1\157\1\142\1"+
+        "\145\1\165\2\162\1\60\1\151\1\165\1\157\1\156\1\154\1\145\1\141"+
+        "\1\163\1\154\1\60\1\142\1\154\1\151\1\uffff\1\60\1\154\1\153\1\164"+
+        "\1\154\1\uffff\1\143\1\142\1\156\2\60\2\154\1\145\1\164\1\60\1\141"+
+        "\1\60\1\162\1\141\1\60\1\154\1\171\1\151\1\uffff\1\157\1\155\1\55"+
+        "\1\144\1\145\1\55\2\164\1\165\1\uffff\1\154\1\60\1\145\1\uffff\1"+
+        "\60\1\55\1\141\1\145\1\150\1\145\1\60\2\uffff\1\141\1\154\1\60\1"+
+        "\151\1\uffff\1\147\1\uffff\1\164\2\154\1\uffff\1\164\1\60\1\142"+
+        "\1\156\1\141\1\165\1\uffff\1\141\1\143\1\145\1\151\1\163\1\144\1"+
+        "\145\1\uffff\1\156\2\uffff\1\151\1\143\1\145\1\162\1\uffff\1\164"+
+        "\1\60\1\157\1\145\2\60\1\157\1\60\1\uffff\1\165\1\60\1\164\1\154"+
+        "\1\55\1\164\1\146\1\157\1\60\1\145\1\144\1\143\1\156\1\164\1\163"+
+        "\1\117\1\145\1\uffff\1\156\1\60\2\uffff\1\167\1\uffff\1\164\1\uffff"+
+        "\1\151\1\141\1\uffff\1\60\2\uffff\1\156\1\uffff\1\163\1\60\1\145"+
+        "\1\163\2\60\1\146\2\60\1\uffff\1\55\1\145\1\157\1\164\1\uffff\2"+
+        "\60\1\uffff\2\60\2\uffff\1\60\3\uffff\1\163\1\156\1\145\5\uffff"+
         "\1\60\1\55\1\60\3\uffff";
     static final String DFA18_maxS =
-        "\1\u00ff\2\uffff\1\52\1\174\1\46\1\76\4\75\1\uffff\1\71\1\uffff"+
-        "\1\ufffe\1\162\1\165\1\141\1\156\1\154\4\165\1\170\1\141\1\165\2"+
-        "\157\1\162\1\145\1\150\2\uffff\1\57\30\uffff\1\145\1\165\1\155\1"+
-        "\156\1\162\1\154\1\157\1\143\1\u00ff\1\160\1\157\1\154\1\163\1\145"+
-        "\1\144\1\145\4\164\1\141\1\162\1\151\1\144\1\141\1\154\1\164\1\154"+
-        "\1\143\1\156\1\u00ff\1\164\1\155\1\145\2\uffff\1\156\1\145\1\160"+
-        "\1\143\1\141\1\163\1\155\1\153\1\164\1\uffff\1\157\1\142\1\145\1"+
-        "\165\1\162\1\u00ff\1\156\1\165\1\151\1\162\1\157\1\145\1\154\1\141"+
-        "\1\163\1\154\1\142\1\u00ff\1\154\1\151\1\uffff\1\u00ff\1\154\1\153"+
-        "\1\154\1\164\1\uffff\1\143\1\142\1\156\2\u00ff\1\154\1\164\1\154"+
-        "\1\145\1\u00ff\1\141\1\u00ff\1\162\1\141\1\u00ff\1\154\1\171\1\uffff"+
-        "\1\144\1\155\1\166\1\151\2\55\1\145\2\164\1\165\1\154\1\uffff\1"+
-        "\u00ff\1\145\1\uffff\1\u00ff\1\55\1\145\1\141\1\150\1\145\1\u00ff"+
-        "\2\uffff\1\141\1\151\1\154\1\u00ff\1\uffff\1\147\1\uffff\1\164\2"+
-        "\154\1\uffff\1\164\1\u00ff\1\141\1\165\1\156\1\141\1\142\1\uffff"+
-        "\1\145\1\143\1\151\1\163\1\144\1\145\1\uffff\1\156\2\uffff\1\143"+
-        "\1\151\1\145\1\162\1\uffff\1\164\1\157\1\u00ff\1\145\2\u00ff\1\157"+
-        "\1\u00ff\1\uffff\1\55\1\154\1\u00ff\1\164\1\165\1\170\1\164\1\157"+
-        "\1\u00ff\1\145\1\144\1\143\1\164\1\156\1\163\1\117\1\145\1\156\1"+
-        "\uffff\1\u00ff\2\uffff\1\167\2\uffff\1\141\1\uffff\1\151\1\164\2"+
-        "\uffff\1\u00ff\1\156\1\uffff\1\163\1\u00ff\1\145\1\u00ff\1\163\1"+
-        "\u00ff\1\146\2\u00ff\1\uffff\1\55\1\164\1\157\1\145\1\uffff\2\u00ff"+
-        "\1\uffff\1\u00ff\1\uffff\1\u00ff\1\uffff\1\u00ff\3\uffff\1\145\1"+
-        "\156\1\163\5\uffff\1\u00ff\1\55\1\u00ff\3\uffff";
+        "\1\u00ff\2\uffff\1\52\1\76\4\75\1\uffff\1\71\1\uffff\1\ufffe\1\162"+
+        "\1\165\1\141\1\156\1\154\4\165\1\170\1\141\1\165\2\157\1\162\1\145"+
+        "\1\150\10\uffff\1\46\1\174\1\uffff\1\57\15\uffff\1\165\1\145\1\155"+
+        "\1\162\1\154\1\156\1\157\1\143\1\u00ff\1\160\1\157\1\154\1\163\1"+
+        "\145\1\164\1\144\2\164\1\145\1\141\1\164\1\162\1\151\1\144\1\141"+
+        "\1\154\1\164\1\154\1\143\1\156\1\u00ff\1\164\1\155\1\145\4\uffff"+
+        "\1\145\1\156\1\160\1\141\1\163\1\143\1\155\1\153\1\164\1\uffff\1"+
+        "\157\1\142\1\145\1\165\2\162\1\u00ff\1\151\1\165\1\157\1\156\1\154"+
+        "\1\145\1\141\1\163\1\154\1\u00ff\1\142\1\154\1\151\1\uffff\1\u00ff"+
+        "\1\154\1\153\1\164\1\154\1\uffff\1\143\1\142\1\156\2\u00ff\2\154"+
+        "\1\145\1\164\1\u00ff\1\141\1\u00ff\1\162\1\141\1\u00ff\1\154\1\171"+
+        "\1\151\1\uffff\1\166\1\155\1\55\1\144\1\145\1\55\2\164\1\165\1\uffff"+
+        "\1\154\1\u00ff\1\145\1\uffff\1\u00ff\1\55\1\141\1\145\1\150\1\145"+
+        "\1\u00ff\2\uffff\1\141\1\154\1\u00ff\1\151\1\uffff\1\147\1\uffff"+
+        "\1\164\2\154\1\uffff\1\164\1\u00ff\1\142\1\156\1\141\1\165\1\uffff"+
+        "\1\141\1\143\1\145\1\151\1\163\1\144\1\145\1\uffff\1\156\2\uffff"+
+        "\1\151\1\143\1\145\1\162\1\uffff\1\164\1\u00ff\1\157\1\145\2\u00ff"+
+        "\1\157\1\u00ff\1\uffff\1\165\1\u00ff\1\164\1\154\1\55\1\164\1\170"+
+        "\1\157\1\u00ff\1\145\1\144\1\143\1\156\1\164\1\163\1\117\1\145\1"+
+        "\uffff\1\156\1\u00ff\2\uffff\1\167\1\uffff\1\164\1\uffff\1\151\1"+
+        "\141\1\uffff\1\u00ff\2\uffff\1\156\1\uffff\1\163\1\u00ff\1\145\1"+
+        "\163\2\u00ff\1\146\2\u00ff\1\uffff\1\55\1\145\1\157\1\164\1\uffff"+
+        "\2\u00ff\1\uffff\2\u00ff\2\uffff\1\u00ff\3\uffff\1\163\1\156\1\145"+
+        "\5\uffff\1\u00ff\1\55\1\u00ff\3\uffff";
     static final String DFA18_acceptS =
-        "\1\uffff\1\1\1\2\10\uffff\1\20\1\uffff\1\23\22\uffff\1\76\1\77\1"+
-        "\uffff\1\101\1\102\1\103\1\104\1\105\1\106\1\110\1\76\1\111\1\4"+
-        "\1\3\1\5\1\7\1\17\1\6\1\10\1\11\1\13\1\12\1\15\1\14\1\16\1\22\1"+
-        "\21\42\uffff\1\100\1\107\11\uffff\1\65\24\uffff\1\41\5\uffff\1\57"+
-        "\21\uffff\1\60\13\uffff\1\75\2\uffff\1\70\7\uffff\1\74\1\24\4\uffff"+
-        "\1\51\1\uffff\1\53\3\uffff\1\31\7\uffff\1\42\6\uffff\1\71\1\uffff"+
-        "\1\66\1\50\4\uffff\1\73\10\uffff\1\32\22\uffff\1\72\1\uffff\1\26"+
-        "\1\30\1\uffff\1\55\1\44\1\uffff\1\54\2\uffff\1\36\1\35\2\uffff\1"+
-        "\67\11\uffff\1\25\4\uffff\1\45\2\uffff\1\37\1\uffff\1\56\1\uffff"+
-        "\1\64\1\uffff\1\33\1\27\1\46\3\uffff\1\47\1\62\1\40\1\61\1\63\3"+
-        "\uffff\1\52\1\43\1\34";
+        "\1\uffff\1\1\1\2\6\uffff\1\14\1\uffff\1\17\22\uffff\1\72\1\73\1"+
+        "\74\1\75\1\76\1\77\1\100\1\101\2\uffff\1\104\1\uffff\1\72\1\107"+
+        "\1\4\1\3\1\5\1\6\1\10\1\7\1\12\1\11\1\13\1\15\1\16\42\uffff\1\102"+
+        "\1\103\1\106\1\105\11\uffff\1\61\24\uffff\1\35\5\uffff\1\53\22\uffff"+
+        "\1\54\11\uffff\1\71\3\uffff\1\64\7\uffff\1\20\1\70\4\uffff\1\45"+
+        "\1\uffff\1\47\3\uffff\1\25\6\uffff\1\36\7\uffff\1\65\1\uffff\1\62"+
+        "\1\44\4\uffff\1\67\10\uffff\1\26\21\uffff\1\66\2\uffff\1\22\1\24"+
+        "\1\uffff\1\51\1\uffff\1\50\2\uffff\1\40\1\uffff\1\32\1\31\1\uffff"+
+        "\1\63\11\uffff\1\21\4\uffff\1\41\2\uffff\1\33\2\uffff\1\52\1\60"+
+        "\1\uffff\1\27\1\23\1\42\3\uffff\1\43\1\56\1\34\1\55\1\57\3\uffff"+
+        "\1\30\1\37\1\46";
     static final String DFA18_specialS =
-        "\u0123\uffff}>";
+        "\u0121\uffff}>";
     static final String[] DFA18_transitionS = {
-            "\2\13\1\uffff\2\13\22\uffff\1\13\1\12\1\15\1\41\1\40\1\53\1"+
-            "\5\1\16\1\43\1\44\2\53\1\51\1\6\1\3\1\42\12\14\1\2\1\1\1\11"+
-            "\1\7\1\10\2\53\32\52\1\45\1\53\1\46\1\53\1\40\1\uffff\1\26\1"+
-            "\52\1\34\1\27\1\30\1\20\1\23\1\52\1\22\2\52\1\33\1\36\1\32\1"+
-            "\35\1\21\1\25\1\24\1\31\1\17\2\52\1\37\3\52\1\47\1\4\1\50\102"+
+            "\2\11\1\uffff\2\11\22\uffff\1\11\1\10\1\13\1\50\1\36\1\53\1"+
+            "\46\1\14\1\37\1\40\2\53\1\45\1\4\1\3\1\51\12\12\1\2\1\1\1\7"+
+            "\1\5\1\6\2\53\32\52\1\41\1\53\1\42\1\53\1\36\1\uffff\1\24\1"+
+            "\52\1\32\1\25\1\26\1\16\1\21\1\52\1\20\2\52\1\31\1\34\1\30\1"+
+            "\33\1\17\1\23\1\22\1\27\1\15\2\52\1\35\3\52\1\43\1\47\1\44\102"+
             "\uffff\100\52",
             "",
             "",
             "\1\54",
-            "\1\56",
+            "\12\12\4\uffff\1\56",
+            "\1\57",
             "\1\60",
-            "\12\14\4\uffff\1\62",
-            "\1\63",
+            "\1\62",
             "\1\64",
-            "\1\66",
-            "\1\70",
             "",
-            "\1\71\1\uffff\12\14",
+            "\1\66\1\uffff\12\12",
             "",
-            "\uffff\15",
-            "\1\75\2\uffff\1\73\11\uffff\1\74",
-            "\1\100\15\uffff\1\77\2\uffff\1\101\2\uffff\1\76",
-            "\1\102",
-            "\1\104\1\103",
-            "\1\105",
-            "\1\107\17\uffff\1\106",
-            "\1\110",
-            "\1\113\3\uffff\1\112\6\uffff\1\111\5\uffff\1\114\1\115",
-            "\1\116\7\uffff\1\117\13\uffff\1\120",
-            "\1\122\7\uffff\1\123\1\uffff\1\121",
+            "\uffff\13",
+            "\1\71\2\uffff\1\70\11\uffff\1\67",
+            "\1\73\15\uffff\1\72\2\uffff\1\75\2\uffff\1\74",
+            "\1\76",
+            "\1\100\1\77",
+            "\1\101",
+            "\1\103\17\uffff\1\102",
+            "\1\104",
+            "\1\107\3\uffff\1\111\6\uffff\1\106\5\uffff\1\105\1\110",
+            "\1\113\7\uffff\1\112\13\uffff\1\114",
+            "\1\116\7\uffff\1\117\1\uffff\1\115",
+            "\1\120",
+            "\1\121\5\uffff\1\122",
+            "\1\123",
             "\1\124",
-            "\1\125\5\uffff\1\126",
-            "\1\127",
+            "\1\125",
+            "\1\126\3\uffff\1\127",
             "\1\130",
-            "\1\131",
-            "\1\132\3\uffff\1\133",
-            "\1\134",
             "",
             "",
-            "\1\136\4\uffff\1\135",
             "",
             "",
             "",
             "",
             "",
             "",
+            "\1\131",
+            "\1\132",
             "",
+            "\1\133\4\uffff\1\134",
             "",
             "",
             "",
@@ -3008,48 +2976,48 @@
             "",
             "",
             "",
-            "",
-            "",
-            "",
-            "",
+            "\1\135",
+            "\1\136",
             "\1\137",
             "\1\140",
             "\1\141",
             "\1\142",
             "\1\143",
             "\1\144",
-            "\1\145",
-            "\1\146",
-            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\10\52\1\147\21\52"+
+            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\10\52\1\145\21\52"+
             "\105\uffff\100\52",
+            "\1\147",
+            "\1\150",
             "\1\151",
             "\1\152",
             "\1\153",
             "\1\154",
             "\1\155",
-            "\1\156",
-            "\1\157",
-            "\1\160\20\uffff\1\161",
+            "\1\157\20\uffff\1\156",
+            "\1\160",
+            "\1\161",
             "\1\162",
             "\1\163",
             "\1\164",
-            "\1\165",
-            "\1\166",
-            "\1\170\5\uffff\1\167",
-            "\1\171\2\uffff\1\172",
-            "\1\173",
-            "\1\174",
-            "\1\175\106\uffff\1\176",
-            "\1\177",
-            "\1\u0080",
-            "\1\u0081\1\uffff\1\u0082",
+            "\1\166\5\uffff\1\165",
+            "\1\170\2\uffff\1\167",
+            "\1\171",
+            "\1\172",
+            "\1\173\106\uffff\1\174",
+            "\1\175",
+            "\1\176",
+            "\1\u0080\1\uffff\1\177",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u0082",
+            "\1\u0083",
             "\1\u0084",
-            "\1\u0085",
-            "\1\u0086",
             "",
             "",
+            "",
+            "",
+            "\1\u0085",
+            "\1\u0086",
             "\1\u0087",
             "\1\u0088",
             "\1\u0089",
@@ -3057,16 +3025,16 @@
             "\1\u008b",
             "\1\u008c",
             "\1\u008d",
+            "",
             "\1\u008e",
             "\1\u008f",
-            "",
             "\1\u0090",
             "\1\u0091",
             "\1\u0092",
             "\1\u0093",
-            "\1\u0094",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u0095",
             "\1\u0096",
             "\1\u0097",
             "\1\u0098",
@@ -3075,177 +3043,175 @@
             "\1\u009b",
             "\1\u009c",
             "\1\u009d",
-            "\1\u009e",
-            "\1\u009f",
-            "\1\u00a0",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "\1\u00a2",
-            "\1\u00a3",
+            "\1\u009f",
+            "\1\u00a0",
+            "\1\u00a1",
             "",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u00a3",
+            "\1\u00a4",
             "\1\u00a5",
             "\1\u00a6",
+            "",
             "\1\u00a7",
             "\1\u00a8",
-            "",
             "\1\u00a9",
-            "\1\u00aa",
-            "\1\u00ab",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u00ac",
+            "\1\u00ad",
             "\1\u00ae",
             "\1\u00af",
-            "\1\u00b0",
-            "\1\u00b1",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "\1\u00b3",
+            "\1\u00b1",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "\1\u00b5",
-            "\1\u00b6",
-            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\5\52\1\u00b7\24\52"+
+            "\1\u00b3",
+            "\1\u00b4",
+            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\5\52\1\u00b5\24\52"+
             "\105\uffff\100\52",
+            "\1\u00b7",
+            "\1\u00b8",
             "\1\u00b9",
-            "\1\u00ba",
             "",
-            "\1\u00bb",
+            "\1\u00ba\6\uffff\1\u00bb",
             "\1\u00bc",
-            "\1\u00bd\6\uffff\1\u00be",
+            "\1\u00bd",
+            "\1\u00be",
             "\1\u00bf",
             "\1\u00c0",
             "\1\u00c1",
             "\1\u00c2",
             "\1\u00c3",
-            "\1\u00c4",
-            "\1\u00c5",
-            "\1\u00c6",
             "",
+            "\1\u00c4",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "\1\u00c8",
+            "\1\u00c6",
             "",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u00c8",
+            "\1\u00c9",
             "\1\u00ca",
             "\1\u00cb",
             "\1\u00cc",
-            "\1\u00cd",
-            "\1\u00ce",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
             "",
             "",
-            "\1\u00d0",
-            "\1\u00d1",
-            "\1\u00d2",
+            "\1\u00ce",
+            "\1\u00cf",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u00d0",
             "",
-            "\1\u00d3",
+            "\1\u00d1",
             "",
+            "\1\u00d2",
+            "\1\u00d3",
             "\1\u00d4",
-            "\1\u00d5",
-            "\1\u00d6",
             "",
-            "\1\u00d7",
+            "\1\u00d5",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u00d7",
+            "\1\u00d8",
             "\1\u00d9",
             "\1\u00da",
+            "",
             "\1\u00db",
             "\1\u00dc",
             "\1\u00dd",
-            "",
             "\1\u00de",
             "\1\u00df",
             "\1\u00e0",
             "\1\u00e1",
+            "",
             "\1\u00e2",
-            "\1\u00e3",
             "",
-            "\1\u00e4",
             "",
-            "",
+            "\1\u00e3",
+            "\1\u00e4",
             "\1\u00e5",
             "\1\u00e6",
-            "\1\u00e7",
-            "\1\u00e8",
             "",
+            "\1\u00e7",
+            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
+            "\52",
             "\1\u00e9",
             "\1\u00ea",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "\1\u00ec",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u00ed",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "",
             "\1\u00ef",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "",
             "\1\u00f1",
             "\1\u00f2",
-            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
-            "\52",
+            "\1\u00f3",
             "\1\u00f4",
-            "\1\u00f5",
-            "\1\u00f7\21\uffff\1\u00f6",
-            "\1\u00f8",
-            "\1\u00f9",
+            "\1\u00f6\21\uffff\1\u00f5",
+            "\1\u00f7",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u00f9",
+            "\1\u00fa",
             "\1\u00fb",
             "\1\u00fc",
             "\1\u00fd",
             "\1\u00fe",
             "\1\u00ff",
             "\1\u0100",
-            "\1\u0101",
-            "\1\u0102",
-            "\1\u0103",
             "",
+            "\1\u0101",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
             "",
             "",
-            "\1\u0105",
+            "\1\u0103",
             "",
+            "\1\u0104",
             "",
+            "\1\u0105",
             "\1\u0106",
             "",
-            "\1\u0107",
-            "\1\u0108",
+            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
+            "\52",
             "",
             "",
+            "\1\u0108",
+            "",
+            "\1\u0109",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "\1\u010a",
-            "",
             "\1\u010b",
+            "\1\u010c",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "\1\u010d",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
             "\1\u010f",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "\1\u0111",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
-            "\52",
             "",
+            "\1\u0112",
+            "\1\u0113",
             "\1\u0114",
             "\1\u0115",
-            "\1\u0116",
-            "\1\u0117",
             "",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
@@ -3254,18 +3220,18 @@
             "",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
             "",
+            "",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
             "",
             "",
             "",
+            "\1\u011b",
+            "\1\u011c",
             "\1\u011d",
-            "\1\u011e",
-            "\1\u011f",
             "",
             "",
             "",
@@ -3273,7 +3239,7 @@
             "",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "\1\u0121",
+            "\1\u011f",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
             "",
@@ -3311,7 +3277,7 @@
             this.transition = DFA18_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | WS | INT | FLOAT | STRING | BOOL | PACKAGE | IMPORT | FUNCTION | GLOBAL | RULE | QUERY | TEMPLATE | ATTRIBUTES | DATE_EFFECTIVE | DATE_EXPIRES | ENABLED | SALIENCE | NO_LOOP | AUTO_FOCUS | ACTIVATION_GROUP | AGENDA_GROUP | DIALECT | RULEFLOW_GROUP | DURATION | LOCK_ON_ACTIVE | FROM | ACCUMULATE | INIT | ACTION | RESULT | COLLECT | OR | AND | CONTAINS | EXCLUDES | MEMBEROF | MATCHES | IN | NULL | EXISTS | NOT | EVAL | FORALL | WHEN | THEN | END | ID | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | MULTI_LINE_COMMENT | COMMA | MISC );";
+            return "1:1: Tokens : ( T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | WS | INT | FLOAT | STRING | BOOL | PACKAGE | IMPORT | FUNCTION | GLOBAL | RULE | QUERY | TEMPLATE | ATTRIBUTES | DATE_EFFECTIVE | DATE_EXPIRES | ENABLED | SALIENCE | NO_LOOP | AUTO_FOCUS | ACTIVATION_GROUP | AGENDA_GROUP | DIALECT | RULEFLOW_GROUP | DURATION | LOCK_ON_ACTIVE | FROM | ACCUMULATE | INIT | ACTION | RESULT | COLLECT | OR | AND | CONTAINS | EXCLUDES | MEMBEROF | MATCHES | IN | NULL | EXISTS | NOT | EVAL | FORALL | WHEN | THEN | END | ID | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | COMMA | DOUBLE_AMPER | DOUBLE_PIPE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC );";
         }
     }
  

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0b7 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-07 15:16:49
+// $ANTLR 3.0b7 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-19 15:56:46
 
 	package org.drools.lang;
 	import java.util.List;
@@ -18,76 +18,78 @@
 import java.util.HashMap;
 public class DRLParser extends Parser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ATTRIBUTES", "PACKAGE", "IMPORT", "FUNCTION", "GLOBAL", "QUERY", "END", "TEMPLATE", "RULE", "WHEN", "DATE_EFFECTIVE", "STRING", "DATE_EXPIRES", "ENABLED", "BOOL", "SALIENCE", "INT", "NO_LOOP", "AUTO_FOCUS", "ACTIVATION_GROUP", "RULEFLOW_GROUP", "AGENDA_GROUP", "DURATION", "DIALECT", "LOCK_ON_ACTIVE", "ACCUMULATE", "INIT", "ACTION", "RESULT", "COLLECT", "ID", "OR", "LEFT_PAREN", "RIGHT_PAREN", "CONTAINS", "MATCHES", "EXCLUDES", "MEMBEROF", "NOT", "IN", "COMMA", "FLOAT", "NULL", "LEFT_CURLY", "RIGHT_CURLY", "LEFT_SQUARE", "RIGHT_SQUARE", "AND", "FROM", "EXISTS", "EVAL", "FORALL", "THEN", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "MISC", "';'", "':'", "'.'", "'.*'", "'||'", "'&'", "'|'", "'->'", "'=='", "'>'", "'>='", "'<'", "'<='", "'!='", "'&&'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ATTRIBUTES", "PACKAGE", "IMPORT", "FUNCTION", "GLOBAL", "QUERY", "END", "TEMPLATE", "RULE", "WHEN", "DATE_EFFECTIVE", "STRING", "DATE_EXPIRES", "ENABLED", "BOOL", "SALIENCE", "INT", "NO_LOOP", "AUTO_FOCUS", "ACTIVATION_GROUP", "RULEFLOW_GROUP", "AGENDA_GROUP", "DURATION", "DIALECT", "LOCK_ON_ACTIVE", "ACCUMULATE", "INIT", "ACTION", "RESULT", "COLLECT", "ID", "LEFT_PAREN", "RIGHT_PAREN", "OR", "DOUBLE_PIPE", "DOUBLE_AMPER", "EVAL", "CONTAINS", "MATCHES", "EXCLUDES", "MEMBEROF", "NOT", "IN", "COMMA", "FLOAT", "NULL", "LEFT_CURLY", "RIGHT_CURLY", "LEFT_SQUARE", "RIGHT_SQUARE", "AND", "FROM", "EXISTS", "FORALL", "THEN", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT", "MISC", "';'", "':'", "'.'", "'.*'", "'->'", "'=='", "'>'", "'>='", "'<'", "'<='", "'!='"
     };
-    public static final int EXISTS=53;
-    public static final int COMMA=44;
+    public static final int EXISTS=56;
+    public static final int COMMA=47;
     public static final int AUTO_FOCUS=22;
     public static final int END=10;
-    public static final int HexDigit=60;
-    public static final int FORALL=55;
+    public static final int HexDigit=62;
+    public static final int FORALL=57;
     public static final int TEMPLATE=11;
-    public static final int MISC=66;
-    public static final int FLOAT=45;
+    public static final int MISC=68;
+    public static final int FLOAT=48;
     public static final int QUERY=9;
-    public static final int THEN=56;
+    public static final int THEN=58;
     public static final int RULE=12;
     public static final int INIT=30;
     public static final int IMPORT=6;
     public static final int DATE_EFFECTIVE=14;
     public static final int PACKAGE=5;
-    public static final int OR=35;
-    public static final int AND=51;
+    public static final int OR=37;
+    public static final int DOUBLE_PIPE=38;
+    public static final int AND=54;
     public static final int FUNCTION=7;
     public static final int GLOBAL=8;
-    public static final int EscapeSequence=59;
+    public static final int EscapeSequence=61;
     public static final int DIALECT=27;
     public static final int INT=20;
     public static final int LOCK_ON_ACTIVE=28;
     public static final int DATE_EXPIRES=16;
-    public static final int LEFT_SQUARE=49;
-    public static final int CONTAINS=38;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=63;
+    public static final int LEFT_SQUARE=52;
+    public static final int CONTAINS=41;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=65;
     public static final int ATTRIBUTES=4;
-    public static final int LEFT_CURLY=47;
+    public static final int LEFT_CURLY=50;
     public static final int RESULT=32;
-    public static final int FROM=52;
+    public static final int FROM=55;
     public static final int ID=34;
     public static final int ACTIVATION_GROUP=23;
-    public static final int LEFT_PAREN=36;
-    public static final int RIGHT_CURLY=48;
+    public static final int LEFT_PAREN=35;
+    public static final int DOUBLE_AMPER=39;
+    public static final int RIGHT_CURLY=51;
     public static final int BOOL=18;
-    public static final int EXCLUDES=40;
-    public static final int MEMBEROF=41;
+    public static final int EXCLUDES=43;
+    public static final int MEMBEROF=44;
     public static final int WHEN=13;
     public static final int RULEFLOW_GROUP=24;
-    public static final int WS=58;
+    public static final int WS=60;
     public static final int STRING=15;
     public static final int ACTION=31;
     public static final int COLLECT=33;
-    public static final int IN=43;
+    public static final int IN=46;
     public static final int NO_LOOP=21;
     public static final int ACCUMULATE=29;
-    public static final int UnicodeEscape=61;
+    public static final int UnicodeEscape=63;
     public static final int DURATION=26;
-    public static final int EVAL=54;
-    public static final int MATCHES=39;
+    public static final int EVAL=40;
+    public static final int MATCHES=42;
     public static final int EOF=-1;
-    public static final int EOL=57;
-    public static final int NULL=46;
+    public static final int EOL=59;
+    public static final int NULL=49;
     public static final int AGENDA_GROUP=25;
-    public static final int OctalEscape=62;
+    public static final int OctalEscape=64;
     public static final int SALIENCE=19;
-    public static final int MULTI_LINE_COMMENT=65;
-    public static final int RIGHT_PAREN=37;
-    public static final int NOT=42;
+    public static final int MULTI_LINE_COMMENT=67;
+    public static final int NOT=45;
+    public static final int RIGHT_PAREN=36;
     public static final int ENABLED=17;
-    public static final int RIGHT_SQUARE=50;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=64;
+    public static final int RIGHT_SQUARE=53;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=66;
 
         public DRLParser(TokenStream input) {
             super(input);
-            ruleMemo = new HashMap[208+1];
+            ruleMemo = new HashMap[216+1];
          }
         
 
@@ -102,8 +104,12 @@
     	private DescrFactory factory = new DescrFactory();
     	private boolean parserDebug = false;
     	
-    	// THE FOLLOWING LINE IS A DUMMY ATTRIBUTE TO WORK AROUND AN ANTLR BUG
+    	// THE FOLLOWING LINES ARE DUMMY ATTRIBUTES TO WORK AROUND AN ANTLR BUG
     	private BaseDescr from = null;
+    	private FieldConstraintDescr fc = null;
+    	private RestrictionConnectiveDescr and = null;
+    	private RestrictionConnectiveDescr or = null;
+    	private ConditionalElementDescr base = null;
     	
     	public void setParserDebug(boolean parserDebug) {
     		this.parserDebug = parserDebug;
@@ -245,24 +251,24 @@
 
 
     // $ANTLR start opt_semicolon
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:168:1: opt_semicolon : ( ';' )? ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:172:1: opt_semicolon : ( ';' )? ;
     public final void opt_semicolon() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:169:4: ( ( ';' )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:169:4: ( ';' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:173:4: ( ( ';' )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:173:4: ( ';' )?
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:169:4: ( ';' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:173:4: ( ';' )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
-            if ( (LA1_0==67) ) {
+            if ( (LA1_0==69) ) {
                 alt1=1;
             }
             switch (alt1) {
                 case 1 :
                     // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:0:0: ';'
                     {
-                    match(input,67,FOLLOW_67_in_opt_semicolon46); if (failed) return ;
+                    match(input,69,FOLLOW_69_in_opt_semicolon46); if (failed) return ;
 
                     }
                     break;
@@ -285,17 +291,17 @@
 
 
     // $ANTLR start compilation_unit
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:172:1: compilation_unit : prolog ( statement )+ ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:176:1: compilation_unit : prolog ( statement )+ ;
     public final void compilation_unit() throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:173:4: ( prolog ( statement )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:173:4: prolog ( statement )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:177:4: ( prolog ( statement )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:177:4: prolog ( statement )+
             {
             pushFollow(FOLLOW_prolog_in_compilation_unit58);
             prolog();
             _fsp--;
             if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:174:3: ( statement )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:178:3: ( statement )+
             int cnt2=0;
             loop2:
             do {
@@ -309,7 +315,7 @@
 
                 switch (alt2) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:174:5: statement
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:178:5: statement
             	    {
             	    pushFollow(FOLLOW_statement_in_compilation_unit65);
             	    statement();
@@ -345,7 +351,7 @@
 
 
     // $ANTLR start prolog
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:177:1: prolog : (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:181:1: prolog : (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* ;
     public final void prolog() throws RecognitionException {
         String n = null;
 
@@ -356,10 +362,10 @@
         		String packageName = "";
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:181:4: ( (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:181:4: (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:4: ( (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:4: (n= package_statement )? ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )*
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:181:4: (n= package_statement )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:4: (n= package_statement )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -368,7 +374,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:181:6: n= package_statement
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:6: n= package_statement
                     {
                     pushFollow(FOLLOW_package_statement_in_prolog90);
                     n=package_statement();
@@ -388,7 +394,7 @@
               			this.packageDescr = factory.createPackage( packageName ); 
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:4: ( ATTRIBUTES ':' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:189:4: ( ATTRIBUTES ':' )?
             int alt4=2;
             int LA4_0 = input.LA(1);
 
@@ -397,17 +403,17 @@
             }
             switch (alt4) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:5: ATTRIBUTES ':'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:189:5: ATTRIBUTES ':'
                     {
                     match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_prolog105); if (failed) return ;
-                    match(input,68,FOLLOW_68_in_prolog107); if (failed) return ;
+                    match(input,70,FOLLOW_70_in_prolog107); if (failed) return ;
 
                     }
                     break;
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:186:4: ( ( ',' )? a= rule_attribute )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:190:4: ( ( ',' )? a= rule_attribute )*
             loop6:
             do {
                 int alt6=2;
@@ -420,9 +426,9 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:186:6: ( ',' )? a= rule_attribute
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:190:6: ( ',' )? a= rule_attribute
             	    {
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:186:6: ( ',' )?
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:190:6: ( ',' )?
             	    int alt5=2;
             	    int LA5_0 = input.LA(1);
 
@@ -474,7 +480,7 @@
 
 
     // $ANTLR start statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:193:1: statement : ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:197:1: statement : ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query ) ;
     public final void statement() throws RecognitionException {
         FactTemplateDescr t = null;
 
@@ -484,10 +490,10 @@
 
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:195:2: ( ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:195:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:2: ( ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:195:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )
             int alt7=7;
             switch ( input.LA(1) ) {
             case IMPORT:
@@ -503,7 +509,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("195:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )", 7, 1, input);
+                        new NoViableAltException("199:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )", 7, 1, input);
 
                     throw nvae;
                 }
@@ -537,14 +543,14 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("195:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )", 7, 0, input);
+                    new NoViableAltException("199:2: ( function_import_statement | import_statement | global | function | t= template | r= rule | q= query )", 7, 0, input);
 
                 throw nvae;
             }
 
             switch (alt7) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:195:4: function_import_statement
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:4: function_import_statement
                     {
                     pushFollow(FOLLOW_function_import_statement_in_statement150);
                     function_import_statement();
@@ -554,7 +560,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:196:4: import_statement
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:200:4: import_statement
                     {
                     pushFollow(FOLLOW_import_statement_in_statement156);
                     import_statement();
@@ -564,7 +570,7 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:197:4: global
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:201:4: global
                     {
                     pushFollow(FOLLOW_global_in_statement162);
                     global();
@@ -574,7 +580,7 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:198:4: function
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:202:4: function
                     {
                     pushFollow(FOLLOW_function_in_statement168);
                     function();
@@ -584,7 +590,7 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:10: t= template
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:203:10: t= template
                     {
                     pushFollow(FOLLOW_template_in_statement182);
                     t=template();
@@ -597,7 +603,7 @@
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:200:4: r= rule
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:204:4: r= rule
                     {
                     pushFollow(FOLLOW_rule_in_statement191);
                     r=rule();
@@ -610,7 +616,7 @@
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:201:4: q= query
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:205:4: q= query
                     {
                     pushFollow(FOLLOW_query_in_statement203);
                     q=query();
@@ -641,7 +647,7 @@
 
 
     // $ANTLR start package_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:205:1: package_statement returns [String packageName] : PACKAGE n= dotted_name[null] opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:209:1: package_statement returns [String packageName] : PACKAGE n= dotted_name[null] opt_semicolon ;
     public final String package_statement() throws RecognitionException {
         String packageName = null;
 
@@ -652,8 +658,8 @@
         		packageName = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:210:3: ( PACKAGE n= dotted_name[null] opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:210:3: PACKAGE n= dotted_name[null] opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:214:3: ( PACKAGE n= dotted_name[null] opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:214:3: PACKAGE n= dotted_name[null] opt_semicolon
             {
             match(input,PACKAGE,FOLLOW_PACKAGE_in_package_statement232); if (failed) return packageName;
             pushFollow(FOLLOW_dotted_name_in_package_statement236);
@@ -685,7 +691,7 @@
 
 
     // $ANTLR start import_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:217:1: import_statement : imp= IMPORT import_name[importDecl] opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:221:1: import_statement : imp= IMPORT import_name[importDecl] opt_semicolon ;
     public final void import_statement() throws RecognitionException {
         Token imp=null;
 
@@ -693,8 +699,8 @@
                 	ImportDescr importDecl = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:221:4: (imp= IMPORT import_name[importDecl] opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:221:4: imp= IMPORT import_name[importDecl] opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:225:4: (imp= IMPORT import_name[importDecl] opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:225:4: imp= IMPORT import_name[importDecl] opt_semicolon
             {
             imp=(Token)input.LT(1);
             match(input,IMPORT,FOLLOW_IMPORT_in_import_statement271); if (failed) return ;
@@ -731,7 +737,7 @@
 
 
     // $ANTLR start function_import_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:232:1: function_import_statement : imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:236:1: function_import_statement : imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon ;
     public final void function_import_statement() throws RecognitionException {
         Token imp=null;
 
@@ -739,8 +745,8 @@
                 	FunctionImportDescr importDecl = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:236:4: (imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:236:4: imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:240:4: (imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:240:4: imp= IMPORT FUNCTION import_name[importDecl] opt_semicolon
             {
             imp=(Token)input.LT(1);
             match(input,IMPORT,FOLLOW_IMPORT_in_function_import_statement323); if (failed) return ;
@@ -778,7 +784,7 @@
 
 
     // $ANTLR start import_name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:248:1: import_name[ImportDescr importDecl] returns [String name] : id= identifier ( '.' id= identifier )* (star= '.*' )? ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:252:1: import_name[ImportDescr importDecl] returns [String name] : id= identifier ( '.' id= identifier )* (star= '.*' )? ;
     public final String import_name(ImportDescr importDecl) throws RecognitionException {
         String name = null;
 
@@ -790,8 +796,8 @@
         		name = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:253:3: (id= identifier ( '.' id= identifier )* (star= '.*' )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:253:3: id= identifier ( '.' id= identifier )* (star= '.*' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:257:3: (id= identifier ( '.' id= identifier )* (star= '.*' )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:257:3: id= identifier ( '.' id= identifier )* (star= '.*' )?
             {
             pushFollow(FOLLOW_identifier_in_import_name379);
             id=identifier();
@@ -804,22 +810,22 @@
               		    importDecl.setEndCharacter( ((CommonToken)id).getStopIndex() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:259:3: ( '.' id= identifier )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:263:3: ( '.' id= identifier )*
             loop8:
             do {
                 int alt8=2;
                 int LA8_0 = input.LA(1);
 
-                if ( (LA8_0==69) ) {
+                if ( (LA8_0==71) ) {
                     alt8=1;
                 }
 
 
                 switch (alt8) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:259:5: '.' id= identifier
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:263:5: '.' id= identifier
             	    {
-            	    match(input,69,FOLLOW_69_in_import_name391); if (failed) return name;
+            	    match(input,71,FOLLOW_71_in_import_name391); if (failed) return name;
             	    pushFollow(FOLLOW_identifier_in_import_name395);
             	    id=identifier();
             	    _fsp--;
@@ -840,19 +846,19 @@
                 }
             } while (true);
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:266:3: (star= '.*' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:270:3: (star= '.*' )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
-            if ( (LA9_0==70) ) {
+            if ( (LA9_0==72) ) {
                 alt9=1;
             }
             switch (alt9) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:266:5: star= '.*'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:270:5: star= '.*'
                     {
                     star=(Token)input.LT(1);
-                    match(input,70,FOLLOW_70_in_import_name419); if (failed) return name;
+                    match(input,72,FOLLOW_72_in_import_name419); if (failed) return name;
                     if ( backtracking==0 ) {
                        
                       		        name = name + star.getText(); 
@@ -882,7 +888,7 @@
 
 
     // $ANTLR start global
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:276:1: global : loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:280:1: global : loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon ;
     public final void global() throws RecognitionException {
         Token loc=null;
         String type = null;
@@ -894,8 +900,8 @@
         	    GlobalDescr global = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:3: (loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:3: loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:285:3: (loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:285:3: loc= GLOBAL type= dotted_name[null] id= identifier opt_semicolon
             {
             loc=(Token)input.LT(1);
             match(input,GLOBAL,FOLLOW_GLOBAL_in_global455); if (failed) return ;
@@ -945,7 +951,7 @@
 
 
     // $ANTLR start function
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:1: function : loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:303:1: function : loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f] ;
     public final void function() throws RecognitionException {
         Token loc=null;
         String retType = null;
@@ -963,25 +969,25 @@
         		FunctionDescr f = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:3: (loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:3: loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:3: (loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:3: loc= FUNCTION (retType= dotted_name[null] )? n= identifier '(' ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )? ')' body= curly_chunk[f]
             {
             loc=(Token)input.LT(1);
             match(input,FUNCTION,FOLLOW_FUNCTION_in_function507); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:16: (retType= dotted_name[null] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:16: (retType= dotted_name[null] )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
             if ( (LA10_0==ID) ) {
                 int LA10_1 = input.LA(2);
 
-                if ( ((LA10_1>=ATTRIBUTES && LA10_1<=WHEN)||LA10_1==ENABLED||LA10_1==SALIENCE||LA10_1==DURATION||(LA10_1>=ACCUMULATE && LA10_1<=OR)||(LA10_1>=CONTAINS && LA10_1<=IN)||LA10_1==NULL||LA10_1==LEFT_SQUARE||(LA10_1>=AND && LA10_1<=THEN)||LA10_1==69) ) {
+                if ( ((LA10_1>=ATTRIBUTES && LA10_1<=WHEN)||LA10_1==ENABLED||LA10_1==SALIENCE||LA10_1==DURATION||(LA10_1>=ACCUMULATE && LA10_1<=ID)||LA10_1==OR||(LA10_1>=EVAL && LA10_1<=IN)||LA10_1==NULL||LA10_1==LEFT_SQUARE||(LA10_1>=AND && LA10_1<=THEN)||LA10_1==71) ) {
                     alt10=1;
                 }
             }
             switch (alt10) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:17: retType= dotted_name[null]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:17: retType= dotted_name[null]
                     {
                     pushFollow(FOLLOW_dotted_name_in_function512);
                     retType=dotted_name(null);
@@ -1007,23 +1013,23 @@
               		
             }
             match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_function528); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:313:4: ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:4: ( (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )* )?
             int alt14=2;
             int LA14_0 = input.LA(1);
 
-            if ( ((LA14_0>=ATTRIBUTES && LA14_0<=WHEN)||LA14_0==ENABLED||LA14_0==SALIENCE||LA14_0==DURATION||(LA14_0>=ACCUMULATE && LA14_0<=OR)||(LA14_0>=CONTAINS && LA14_0<=IN)||LA14_0==NULL||(LA14_0>=AND && LA14_0<=THEN)) ) {
+            if ( ((LA14_0>=ATTRIBUTES && LA14_0<=WHEN)||LA14_0==ENABLED||LA14_0==SALIENCE||LA14_0==DURATION||(LA14_0>=ACCUMULATE && LA14_0<=ID)||LA14_0==OR||(LA14_0>=EVAL && LA14_0<=IN)||LA14_0==NULL||(LA14_0>=AND && LA14_0<=THEN)) ) {
                 alt14=1;
             }
             switch (alt14) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:313:6: (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:6: (paramType= dotted_name[null] )? paramName= argument ( ',' (paramType= dotted_name[null] )? paramName= argument )*
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:313:6: (paramType= dotted_name[null] )?
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:6: (paramType= dotted_name[null] )?
                     int alt11=2;
                     alt11 = dfa11.predict(input);
                     switch (alt11) {
                         case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:313:7: paramType= dotted_name[null]
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:7: paramType= dotted_name[null]
                             {
                             pushFollow(FOLLOW_dotted_name_in_function538);
                             paramType=dotted_name(null);
@@ -1044,7 +1050,7 @@
                       					f.addParameter( paramType, paramName );
                       				
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:5: ( ',' (paramType= dotted_name[null] )? paramName= argument )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:5: ( ',' (paramType= dotted_name[null] )? paramName= argument )*
                     loop13:
                     do {
                         int alt13=2;
@@ -1057,15 +1063,15 @@
 
                         switch (alt13) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:7: ',' (paramType= dotted_name[null] )? paramName= argument
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:7: ',' (paramType= dotted_name[null] )? paramName= argument
                     	    {
                     	    match(input,COMMA,FOLLOW_COMMA_in_function559); if (failed) return ;
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:11: (paramType= dotted_name[null] )?
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:11: (paramType= dotted_name[null] )?
                     	    int alt12=2;
                     	    alt12 = dfa12.predict(input);
                     	    switch (alt12) {
                     	        case 1 :
-                    	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:12: paramType= dotted_name[null]
+                    	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:12: paramType= dotted_name[null]
                     	            {
                     	            pushFollow(FOLLOW_dotted_name_in_function564);
                     	            paramType=dotted_name(null);
@@ -1128,7 +1134,7 @@
 
 
     // $ANTLR start query
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:1: query returns [QueryDescr query] : loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:337:1: query returns [QueryDescr query] : loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END ;
     public final QueryDescr query() throws RecognitionException {
         QueryDescr query = null;
 
@@ -1141,8 +1147,8 @@
         		AndDescr lhs = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:3: (loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:3: loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:343:3: (loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:343:3: loc= QUERY queryName= name ( normal_lhs_block[lhs] ) loc= END
             {
             loc=(Token)input.LT(1);
             match(input,QUERY,FOLLOW_QUERY_in_query633); if (failed) return query;
@@ -1159,8 +1165,8 @@
               			lhs.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:347:3: ( normal_lhs_block[lhs] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:348:4: normal_lhs_block[lhs]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:3: ( normal_lhs_block[lhs] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:352:4: normal_lhs_block[lhs]
             {
             pushFollow(FOLLOW_normal_lhs_block_in_query650);
             normal_lhs_block(lhs);
@@ -1192,7 +1198,7 @@
 
 
     // $ANTLR start template
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:358:1: template returns [FactTemplateDescr template] : loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:362:1: template returns [FactTemplateDescr template] : loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon ;
     public final FactTemplateDescr template() throws RecognitionException {
         FactTemplateDescr template = null;
 
@@ -1206,8 +1212,8 @@
         		template = null;		
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:363:3: (loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:363:3: loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:3: (loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:3: loc= TEMPLATE templateName= identifier opt_semicolon (slot= template_slot )+ loc= END opt_semicolon
             {
             loc=(Token)input.LT(1);
             match(input,TEMPLATE,FOLLOW_TEMPLATE_in_template697); if (failed) return template;
@@ -1226,7 +1232,7 @@
               			template.setStartCharacter( ((CommonToken)loc).getStartIndex() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:369:3: (slot= template_slot )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:373:3: (slot= template_slot )+
             int cnt15=0;
             loop15:
             do {
@@ -1240,7 +1246,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:370:4: slot= template_slot
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:374:4: slot= template_slot
             	    {
             	    pushFollow(FOLLOW_template_slot_in_template718);
             	    slot=template_slot();
@@ -1292,7 +1298,7 @@
 
 
     // $ANTLR start template_slot
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:381:1: template_slot returns [FieldTemplateDescr field] : fieldType= dotted_name[field] n= identifier opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:385:1: template_slot returns [FieldTemplateDescr field] : fieldType= dotted_name[field] n= identifier opt_semicolon ;
     public final FieldTemplateDescr template_slot() throws RecognitionException {
         FieldTemplateDescr field = null;
 
@@ -1305,8 +1311,8 @@
         		field = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:11: (fieldType= dotted_name[field] n= identifier opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:11: fieldType= dotted_name[field] n= identifier opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:11: (fieldType= dotted_name[field] n= identifier opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:11: fieldType= dotted_name[field] n= identifier opt_semicolon
             {
             if ( backtracking==0 ) {
 
@@ -1353,7 +1359,7 @@
 
 
     // $ANTLR start rule
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:1: rule returns [RuleDescr rule] : loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:1: rule returns [RuleDescr rule] : loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule] ;
     public final RuleDescr rule() throws RecognitionException {
         RuleDescr rule = null;
 
@@ -1367,8 +1373,8 @@
         		AndDescr lhs = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:409:3: (loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:409:3: loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:3: (loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:3: loc= RULE ruleName= name rule_attributes[rule] (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )? rhs_chunk[rule]
             {
             loc=(Token)input.LT(1);
             match(input,RULE,FOLLOW_RULE_in_rule836); if (failed) return rule;
@@ -1388,7 +1394,7 @@
             rule_attributes(rule);
             _fsp--;
             if (failed) return rule;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:3: (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:3: (loc= WHEN ( ':' )? ( normal_lhs_block[lhs] ) )?
             int alt17=2;
             int LA17_0 = input.LA(1);
 
@@ -1397,22 +1403,22 @@
             }
             switch (alt17) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:5: loc= WHEN ( ':' )? ( normal_lhs_block[lhs] )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:5: loc= WHEN ( ':' )? ( normal_lhs_block[lhs] )
                     {
                     loc=(Token)input.LT(1);
                     match(input,WHEN,FOLLOW_WHEN_in_rule858); if (failed) return rule;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:14: ( ':' )?
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:14: ( ':' )?
                     int alt16=2;
                     int LA16_0 = input.LA(1);
 
-                    if ( (LA16_0==68) ) {
+                    if ( (LA16_0==70) ) {
                         alt16=1;
                     }
                     switch (alt16) {
                         case 1 :
                             // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:0:0: ':'
                             {
-                            match(input,68,FOLLOW_68_in_rule860); if (failed) return rule;
+                            match(input,70,FOLLOW_70_in_rule860); if (failed) return rule;
 
                             }
                             break;
@@ -1426,8 +1432,8 @@
                       				lhs.setStartCharacter( ((CommonToken)loc).getStartIndex() );
                       			
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:423:4: ( normal_lhs_block[lhs] )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:425:5: normal_lhs_block[lhs]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:4: ( normal_lhs_block[lhs] )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:5: normal_lhs_block[lhs]
                     {
                     pushFollow(FOLLOW_normal_lhs_block_in_rule878);
                     normal_lhs_block(lhs);
@@ -1462,16 +1468,16 @@
 
 
     // $ANTLR start rule_attributes
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:1: rule_attributes[RuleDescr rule] : ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:438:1: rule_attributes[RuleDescr rule] : ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* ;
     public final void rule_attributes(RuleDescr rule) throws RecognitionException {
         AttributeDescr a = null;
 
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:4: ( ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:4: ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:4: ( ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:4: ( ATTRIBUTES ':' )? ( ( ',' )? a= rule_attribute )*
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:4: ( ATTRIBUTES ':' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:4: ( ATTRIBUTES ':' )?
             int alt18=2;
             int LA18_0 = input.LA(1);
 
@@ -1480,17 +1486,17 @@
             }
             switch (alt18) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:5: ATTRIBUTES ':'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:5: ATTRIBUTES ':'
                     {
                     match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_rule_attributes920); if (failed) return ;
-                    match(input,68,FOLLOW_68_in_rule_attributes922); if (failed) return ;
+                    match(input,70,FOLLOW_70_in_rule_attributes922); if (failed) return ;
 
                     }
                     break;
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:437:4: ( ( ',' )? a= rule_attribute )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:4: ( ( ',' )? a= rule_attribute )*
             loop20:
             do {
                 int alt20=2;
@@ -1503,9 +1509,9 @@
 
                 switch (alt20) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:437:6: ( ',' )? a= rule_attribute
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:6: ( ',' )? a= rule_attribute
             	    {
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:437:6: ( ',' )?
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:6: ( ',' )?
             	    int alt19=2;
             	    int LA19_0 = input.LA(1);
 
@@ -1557,7 +1563,7 @@
 
 
     // $ANTLR start rule_attribute
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:446:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:450:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect );
     public final AttributeDescr rule_attribute() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1568,7 +1574,7 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:4: (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:455:4: (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect )
             int alt21=12;
             switch ( input.LA(1) ) {
             case SALIENCE:
@@ -1634,14 +1640,14 @@
             default:
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("446:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect );", 21, 0, input);
+                    new NoViableAltException("450:1: rule_attribute returns [AttributeDescr d] : (a= salience | a= no_loop | a= agenda_group | a= duration | a= activation_group | a= auto_focus | a= date_effective | a= date_expires | a= enabled | a= ruleflow_group | a= lock_on_active | a= dialect );", 21, 0, input);
 
                 throw nvae;
             }
 
             switch (alt21) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:4: a= salience
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:455:4: a= salience
                     {
                     pushFollow(FOLLOW_salience_in_rule_attribute977);
                     a=salience();
@@ -1654,7 +1660,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:5: a= no_loop
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:5: a= no_loop
                     {
                     pushFollow(FOLLOW_no_loop_in_rule_attribute987);
                     a=no_loop();
@@ -1667,7 +1673,7 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:453:5: a= agenda_group
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:5: a= agenda_group
                     {
                     pushFollow(FOLLOW_agenda_group_in_rule_attribute998);
                     a=agenda_group();
@@ -1680,7 +1686,7 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:454:5: a= duration
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:458:5: a= duration
                     {
                     pushFollow(FOLLOW_duration_in_rule_attribute1011);
                     a=duration();
@@ -1693,7 +1699,7 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:455:5: a= activation_group
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:459:5: a= activation_group
                     {
                     pushFollow(FOLLOW_activation_group_in_rule_attribute1025);
                     a=activation_group();
@@ -1706,7 +1712,7 @@
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:5: a= auto_focus
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:5: a= auto_focus
                     {
                     pushFollow(FOLLOW_auto_focus_in_rule_attribute1036);
                     a=auto_focus();
@@ -1719,7 +1725,7 @@
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:5: a= date_effective
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:5: a= date_effective
                     {
                     pushFollow(FOLLOW_date_effective_in_rule_attribute1047);
                     a=date_effective();
@@ -1732,7 +1738,7 @@
                     }
                     break;
                 case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:458:5: a= date_expires
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:462:5: a= date_expires
                     {
                     pushFollow(FOLLOW_date_expires_in_rule_attribute1057);
                     a=date_expires();
@@ -1745,7 +1751,7 @@
                     }
                     break;
                 case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:459:5: a= enabled
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:463:5: a= enabled
                     {
                     pushFollow(FOLLOW_enabled_in_rule_attribute1067);
                     a=enabled();
@@ -1758,7 +1764,7 @@
                     }
                     break;
                 case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:5: a= ruleflow_group
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:5: a= ruleflow_group
                     {
                     pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1077);
                     a=ruleflow_group();
@@ -1771,7 +1777,7 @@
                     }
                     break;
                 case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:5: a= lock_on_active
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:465:5: a= lock_on_active
                     {
                     pushFollow(FOLLOW_lock_on_active_in_rule_attribute1087);
                     a=lock_on_active();
@@ -1784,7 +1790,7 @@
                     }
                     break;
                 case 12 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:462:5: a= dialect
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:466:5: a= dialect
                     {
                     pushFollow(FOLLOW_dialect_in_rule_attribute1096);
                     a=dialect();
@@ -1811,7 +1817,7 @@
 
 
     // $ANTLR start date_effective
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:466:1: date_effective returns [AttributeDescr d] : loc= DATE_EFFECTIVE val= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:470:1: date_effective returns [AttributeDescr d] : loc= DATE_EFFECTIVE val= STRING ;
     public final AttributeDescr date_effective() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1822,8 +1828,8 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:471:3: (loc= DATE_EFFECTIVE val= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:471:3: loc= DATE_EFFECTIVE val= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:3: (loc= DATE_EFFECTIVE val= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:3: loc= DATE_EFFECTIVE val= STRING
             {
             loc=(Token)input.LT(1);
             match(input,DATE_EFFECTIVE,FOLLOW_DATE_EFFECTIVE_in_date_effective1128); if (failed) return d;
@@ -1853,7 +1859,7 @@
 
 
     // $ANTLR start date_expires
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:481:1: date_expires returns [AttributeDescr d] : loc= DATE_EXPIRES val= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:1: date_expires returns [AttributeDescr d] : loc= DATE_EXPIRES val= STRING ;
     public final AttributeDescr date_expires() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1864,8 +1870,8 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:3: (loc= DATE_EXPIRES val= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:3: loc= DATE_EXPIRES val= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:490:3: (loc= DATE_EXPIRES val= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:490:3: loc= DATE_EXPIRES val= STRING
             {
             loc=(Token)input.LT(1);
             match(input,DATE_EXPIRES,FOLLOW_DATE_EXPIRES_in_date_expires1165); if (failed) return d;
@@ -1895,7 +1901,7 @@
 
 
     // $ANTLR start enabled
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:497:1: enabled returns [AttributeDescr d] : loc= ENABLED t= BOOL ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:1: enabled returns [AttributeDescr d] : loc= ENABLED t= BOOL ;
     public final AttributeDescr enabled() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1906,8 +1912,8 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:4: (loc= ENABLED t= BOOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:4: loc= ENABLED t= BOOL
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506:4: (loc= ENABLED t= BOOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506:4: loc= ENABLED t= BOOL
             {
             loc=(Token)input.LT(1);
             match(input,ENABLED,FOLLOW_ENABLED_in_enabled1204); if (failed) return d;
@@ -1937,7 +1943,7 @@
 
 
     // $ANTLR start salience
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:515:1: salience returns [AttributeDescr d ] : loc= SALIENCE i= INT ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:519:1: salience returns [AttributeDescr d ] : loc= SALIENCE i= INT ;
     public final AttributeDescr salience() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1948,8 +1954,8 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:3: (loc= SALIENCE i= INT )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:3: loc= SALIENCE i= INT
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:3: (loc= SALIENCE i= INT )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:3: loc= SALIENCE i= INT
             {
             loc=(Token)input.LT(1);
             match(input,SALIENCE,FOLLOW_SALIENCE_in_salience1253); if (failed) return d;
@@ -1979,7 +1985,7 @@
 
 
     // $ANTLR start no_loop
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:533:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );
     public final AttributeDescr no_loop() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -1990,7 +1996,7 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534:3: ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:3: ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) )
             int alt22=2;
             int LA22_0 = input.LA(1);
 
@@ -2006,7 +2012,7 @@
                 else {
                     if (backtracking>0) {failed=true; return d;}
                     NoViableAltException nvae =
-                        new NoViableAltException("529:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );", 22, 1, input);
+                        new NoViableAltException("533:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );", 22, 1, input);
 
                     throw nvae;
                 }
@@ -2014,16 +2020,16 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("529:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );", 22, 0, input);
+                    new NoViableAltException("533:1: no_loop returns [AttributeDescr d] : ( (loc= NO_LOOP ) | (loc= NO_LOOP t= BOOL ) );", 22, 0, input);
 
                 throw nvae;
             }
             switch (alt22) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534:3: (loc= NO_LOOP )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:3: (loc= NO_LOOP )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534:3: (loc= NO_LOOP )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:4: loc= NO_LOOP
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:3: (loc= NO_LOOP )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:539:4: loc= NO_LOOP
                     {
                     loc=(Token)input.LT(1);
                     match(input,NO_LOOP,FOLLOW_NO_LOOP_in_no_loop1295); if (failed) return d;
@@ -2042,10 +2048,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:3: (loc= NO_LOOP t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:3: (loc= NO_LOOP t= BOOL )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:3: (loc= NO_LOOP t= BOOL )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:545:4: loc= NO_LOOP t= BOOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:3: (loc= NO_LOOP t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:549:4: loc= NO_LOOP t= BOOL
                     {
                     loc=(Token)input.LT(1);
                     match(input,NO_LOOP,FOLLOW_NO_LOOP_in_no_loop1323); if (failed) return d;
@@ -2080,7 +2086,7 @@
 
 
     // $ANTLR start auto_focus
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:557:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:561:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );
     public final AttributeDescr auto_focus() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2091,7 +2097,7 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:3: ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:3: ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) )
             int alt23=2;
             int LA23_0 = input.LA(1);
 
@@ -2107,7 +2113,7 @@
                 else {
                     if (backtracking>0) {failed=true; return d;}
                     NoViableAltException nvae =
-                        new NoViableAltException("557:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );", 23, 1, input);
+                        new NoViableAltException("561:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );", 23, 1, input);
 
                     throw nvae;
                 }
@@ -2115,16 +2121,16 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("557:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );", 23, 0, input);
+                    new NoViableAltException("561:1: auto_focus returns [AttributeDescr d] : ( (loc= AUTO_FOCUS ) | (loc= AUTO_FOCUS t= BOOL ) );", 23, 0, input);
 
                 throw nvae;
             }
             switch (alt23) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:3: (loc= AUTO_FOCUS )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:3: (loc= AUTO_FOCUS )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:3: (loc= AUTO_FOCUS )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563:4: loc= AUTO_FOCUS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:3: (loc= AUTO_FOCUS )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:4: loc= AUTO_FOCUS
                     {
                     loc=(Token)input.LT(1);
                     match(input,AUTO_FOCUS,FOLLOW_AUTO_FOCUS_in_auto_focus1376); if (failed) return d;
@@ -2143,10 +2149,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:3: (loc= AUTO_FOCUS t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:3: (loc= AUTO_FOCUS t= BOOL )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:3: (loc= AUTO_FOCUS t= BOOL )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:4: loc= AUTO_FOCUS t= BOOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:3: (loc= AUTO_FOCUS t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:4: loc= AUTO_FOCUS t= BOOL
                     {
                     loc=(Token)input.LT(1);
                     match(input,AUTO_FOCUS,FOLLOW_AUTO_FOCUS_in_auto_focus1404); if (failed) return d;
@@ -2181,7 +2187,7 @@
 
 
     // $ANTLR start activation_group
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:585:1: activation_group returns [AttributeDescr d] : loc= ACTIVATION_GROUP n= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:1: activation_group returns [AttributeDescr d] : loc= ACTIVATION_GROUP n= STRING ;
     public final AttributeDescr activation_group() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2192,8 +2198,8 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:590:3: (loc= ACTIVATION_GROUP n= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:590:3: loc= ACTIVATION_GROUP n= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:3: (loc= ACTIVATION_GROUP n= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:3: loc= ACTIVATION_GROUP n= STRING
             {
             loc=(Token)input.LT(1);
             match(input,ACTIVATION_GROUP,FOLLOW_ACTIVATION_GROUP_in_activation_group1453); if (failed) return d;
@@ -2223,7 +2229,7 @@
 
 
     // $ANTLR start ruleflow_group
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:599:1: ruleflow_group returns [AttributeDescr d] : loc= RULEFLOW_GROUP n= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:1: ruleflow_group returns [AttributeDescr d] : loc= RULEFLOW_GROUP n= STRING ;
     public final AttributeDescr ruleflow_group() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2234,8 +2240,8 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:3: (loc= RULEFLOW_GROUP n= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:3: loc= RULEFLOW_GROUP n= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:3: (loc= RULEFLOW_GROUP n= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:3: loc= RULEFLOW_GROUP n= STRING
             {
             loc=(Token)input.LT(1);
             match(input,RULEFLOW_GROUP,FOLLOW_RULEFLOW_GROUP_in_ruleflow_group1489); if (failed) return d;
@@ -2265,7 +2271,7 @@
 
 
     // $ANTLR start agenda_group
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:1: agenda_group returns [AttributeDescr d] : loc= AGENDA_GROUP n= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:1: agenda_group returns [AttributeDescr d] : loc= AGENDA_GROUP n= STRING ;
     public final AttributeDescr agenda_group() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2276,8 +2282,8 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:3: (loc= AGENDA_GROUP n= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:3: loc= AGENDA_GROUP n= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:3: (loc= AGENDA_GROUP n= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:3: loc= AGENDA_GROUP n= STRING
             {
             loc=(Token)input.LT(1);
             match(input,AGENDA_GROUP,FOLLOW_AGENDA_GROUP_in_agenda_group1525); if (failed) return d;
@@ -2307,7 +2313,7 @@
 
 
     // $ANTLR start duration
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:1: duration returns [AttributeDescr d] : loc= DURATION i= INT ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:1: duration returns [AttributeDescr d] : loc= DURATION i= INT ;
     public final AttributeDescr duration() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2318,8 +2324,8 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:3: (loc= DURATION i= INT )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:3: loc= DURATION i= INT
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:3: (loc= DURATION i= INT )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:3: loc= DURATION i= INT
             {
             loc=(Token)input.LT(1);
             match(input,DURATION,FOLLOW_DURATION_in_duration1563); if (failed) return d;
@@ -2349,7 +2355,7 @@
 
 
     // $ANTLR start dialect
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:1: dialect returns [AttributeDescr d] : loc= DIALECT n= STRING ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:1: dialect returns [AttributeDescr d] : loc= DIALECT n= STRING ;
     public final AttributeDescr dialect() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2360,8 +2366,8 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:3: (loc= DIALECT n= STRING )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:3: loc= DIALECT n= STRING
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:3: (loc= DIALECT n= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:3: loc= DIALECT n= STRING
             {
             loc=(Token)input.LT(1);
             match(input,DIALECT,FOLLOW_DIALECT_in_dialect1599); if (failed) return d;
@@ -2391,7 +2397,7 @@
 
 
     // $ANTLR start lock_on_active
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:661:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );
     public final AttributeDescr lock_on_active() throws RecognitionException {
         AttributeDescr d = null;
 
@@ -2402,7 +2408,7 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:3: ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:3: ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) )
             int alt24=2;
             int LA24_0 = input.LA(1);
 
@@ -2418,7 +2424,7 @@
                 else {
                     if (backtracking>0) {failed=true; return d;}
                     NoViableAltException nvae =
-                        new NoViableAltException("661:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );", 24, 1, input);
+                        new NoViableAltException("665:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );", 24, 1, input);
 
                     throw nvae;
                 }
@@ -2426,16 +2432,16 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("661:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );", 24, 0, input);
+                    new NoViableAltException("665:1: lock_on_active returns [AttributeDescr d] : ( (loc= LOCK_ON_ACTIVE ) | (loc= LOCK_ON_ACTIVE t= BOOL ) );", 24, 0, input);
 
                 throw nvae;
             }
             switch (alt24) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:3: (loc= LOCK_ON_ACTIVE )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:3: (loc= LOCK_ON_ACTIVE )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:3: (loc= LOCK_ON_ACTIVE )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:667:4: loc= LOCK_ON_ACTIVE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:3: (loc= LOCK_ON_ACTIVE )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:671:4: loc= LOCK_ON_ACTIVE
                     {
                     loc=(Token)input.LT(1);
                     match(input,LOCK_ON_ACTIVE,FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1652); if (failed) return d;
@@ -2454,10 +2460,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:3: (loc= LOCK_ON_ACTIVE t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:3: (loc= LOCK_ON_ACTIVE t= BOOL )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:3: (loc= LOCK_ON_ACTIVE t= BOOL )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:4: loc= LOCK_ON_ACTIVE t= BOOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:3: (loc= LOCK_ON_ACTIVE t= BOOL )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:681:4: loc= LOCK_ON_ACTIVE t= BOOL
                     {
                     loc=(Token)input.LT(1);
                     match(input,LOCK_ON_ACTIVE,FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1680); if (failed) return d;
@@ -2492,29 +2498,29 @@
 
 
     // $ANTLR start normal_lhs_block
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:1: normal_lhs_block[AndDescr descr] : (d= lhs[descr] )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:1: normal_lhs_block[AndDescr descr] : (d= lhs[descr] )* ;
     public final void normal_lhs_block(AndDescr descr) throws RecognitionException {
         BaseDescr d = null;
 
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:3: ( (d= lhs[descr] )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:3: (d= lhs[descr] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:3: ( (d= lhs[descr] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:3: (d= lhs[descr] )*
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:3: (d= lhs[descr] )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:3: (d= lhs[descr] )*
             loop25:
             do {
                 int alt25=2;
                 int LA25_0 = input.LA(1);
 
-                if ( (LA25_0==ID||LA25_0==LEFT_PAREN||LA25_0==NOT||(LA25_0>=EXISTS && LA25_0<=FORALL)) ) {
+                if ( ((LA25_0>=ID && LA25_0<=LEFT_PAREN)||LA25_0==EVAL||LA25_0==NOT||(LA25_0>=EXISTS && LA25_0<=FORALL)) ) {
                     alt25=1;
                 }
 
 
                 switch (alt25) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:5: d= lhs[descr]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:5: d= lhs[descr]
             	    {
             	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1722);
             	    d=lhs(descr);
@@ -2548,7 +2554,7 @@
 
 
     // $ANTLR start lhs
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:1: lhs[ConditionalElementDescr ce] returns [BaseDescr d] : l= lhs_or ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:1: lhs[ConditionalElementDescr ce] returns [BaseDescr d] : l= lhs_or ;
     public final BaseDescr lhs(ConditionalElementDescr ce) throws RecognitionException {
         BaseDescr d = null;
 
@@ -2559,8 +2565,8 @@
         		d=null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:4: (l= lhs_or )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:4: l= lhs_or
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:705:4: (l= lhs_or )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:705:4: l= lhs_or
             {
             pushFollow(FOLLOW_lhs_or_in_lhs1759);
             l=lhs_or();
@@ -2585,7 +2591,7 @@
 
 
     // $ANTLR start lhs_pattern
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:705:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );
     public final BaseDescr lhs_pattern() throws RecognitionException {
         BaseDescr d = null;
 
@@ -2596,23 +2602,23 @@
         		d=null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:4: (f= fact_binding | f= fact )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:4: (f= fact_binding | f= fact )
             int alt26=2;
             int LA26_0 = input.LA(1);
 
             if ( (LA26_0==ID) ) {
                 int LA26_1 = input.LA(2);
 
-                if ( (LA26_1==68) ) {
+                if ( (LA26_1==70) ) {
                     alt26=1;
                 }
-                else if ( (LA26_1==LEFT_PAREN||LA26_1==LEFT_SQUARE||LA26_1==69) ) {
+                else if ( (LA26_1==LEFT_PAREN||LA26_1==LEFT_SQUARE||LA26_1==71) ) {
                     alt26=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return d;}
                     NoViableAltException nvae =
-                        new NoViableAltException("705:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );", 26, 1, input);
+                        new NoViableAltException("709:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );", 26, 1, input);
 
                     throw nvae;
                 }
@@ -2620,13 +2626,13 @@
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("705:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );", 26, 0, input);
+                    new NoViableAltException("709:1: lhs_pattern returns [BaseDescr d] : (f= fact_binding | f= fact );", 26, 0, input);
 
                 throw nvae;
             }
             switch (alt26) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:4: f= fact_binding
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:4: f= fact_binding
                     {
                     pushFollow(FOLLOW_fact_binding_in_lhs_pattern1787);
                     f=fact_binding();
@@ -2639,7 +2645,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:4: f= fact
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:4: f= fact
                     {
                     pushFollow(FOLLOW_fact_in_lhs_pattern1796);
                     f=fact();
@@ -2666,7 +2672,7 @@
 
 
     // $ANTLR start from_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:1: from_statement returns [FromDescr d] : ds= from_source[d] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:717:1: from_statement returns [FromDescr d] : ds= from_source[d] ;
     public final FromDescr from_statement() throws RecognitionException {
         FromDescr d = null;
 
@@ -2677,8 +2683,8 @@
         		d=factory.createFrom();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:718:2: (ds= from_source[d] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:718:2: ds= from_source[d]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:722:2: (ds= from_source[d] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:722:2: ds= from_source[d]
             {
             pushFollow(FOLLOW_from_source_in_from_statement1823);
             ds=from_source(d);
@@ -2706,7 +2712,7 @@
 
 
     // $ANTLR start from_source
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:1: from_source[FromDescr from] returns [DeclarativeInvokerDescr ds] : ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )? ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:1: from_source[FromDescr from] returns [DeclarativeInvokerDescr ds] : ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )? ;
     public final DeclarativeInvokerDescr from_source(FromDescr from) throws RecognitionException {
         DeclarativeInvokerDescr ds = null;
 
@@ -2720,8 +2726,8 @@
         		AccessorDescr ad = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:3: (ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:3: ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:3: (ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:3: ident= identifier (args= paren_chunk[from] )? ( expression_chain[from, ad] )?
             {
             pushFollow(FOLLOW_identifier_in_from_source1865);
             ident=identifier();
@@ -2736,7 +2742,7 @@
               			ds = ad;
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:3: (args= paren_chunk[from] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:3: (args= paren_chunk[from] )?
             int alt27=2;
             int LA27_0 = input.LA(1);
 
@@ -2749,7 +2755,7 @@
             }
             switch (alt27) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:4: args= paren_chunk[from]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:4: args= paren_chunk[from]
                     {
                     pushFollow(FOLLOW_paren_chunk_in_from_source1876);
                     args=paren_chunk(from);
@@ -2774,11 +2780,11 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:3: ( expression_chain[from, ad] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:3: ( expression_chain[from, ad] )?
             int alt28=2;
             int LA28_0 = input.LA(1);
 
-            if ( (LA28_0==69) ) {
+            if ( (LA28_0==71) ) {
                 alt28=1;
             }
             switch (alt28) {
@@ -2811,7 +2817,7 @@
 
 
     // $ANTLR start expression_chain
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:1: expression_chain[FromDescr from, AccessorDescr as] : ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:1: expression_chain[FromDescr from, AccessorDescr as] : ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? ) ;
     public final void expression_chain(FromDescr from, AccessorDescr as) throws RecognitionException {
         Token field = null;
 
@@ -2825,13 +2831,13 @@
         	    	MethodAccessDescr ma = null;	
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:2: ( ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:2: ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:2: ( ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:2: ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:2: ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:4: '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:2: ( '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:4: '.' field= identifier ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )? ( expression_chain[from, as] )?
             {
-            match(input,69,FOLLOW_69_in_expression_chain1915); if (failed) return ;
+            match(input,71,FOLLOW_71_in_expression_chain1915); if (failed) return ;
             pushFollow(FOLLOW_identifier_in_expression_chain1919);
             field=identifier();
             _fsp--;
@@ -2844,7 +2850,7 @@
               		fa.setEndCharacter( ((CommonToken)field).getStopIndex() );
               	    
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:771:4: ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:4: ( ( LEFT_SQUARE )=>sqarg= square_chunk[from] | ( LEFT_PAREN )=>paarg= paren_chunk[from] )?
             int alt29=3;
             int LA29_0 = input.LA(1);
 
@@ -2860,7 +2866,7 @@
             }
             switch (alt29) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:6: ( LEFT_SQUARE )=>sqarg= square_chunk[from]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:6: ( LEFT_SQUARE )=>sqarg= square_chunk[from]
                     {
                     pushFollow(FOLLOW_square_chunk_in_expression_chain1950);
                     sqarg=square_chunk(from);
@@ -2875,7 +2881,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:777:6: ( LEFT_PAREN )=>paarg= paren_chunk[from]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:6: ( LEFT_PAREN )=>paarg= paren_chunk[from]
                     {
                     pushFollow(FOLLOW_paren_chunk_in_expression_chain1984);
                     paarg=paren_chunk(from);
@@ -2903,11 +2909,11 @@
               	      }
               	  
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:4: ( expression_chain[from, as] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:795:4: ( expression_chain[from, as] )?
             int alt30=2;
             int LA30_0 = input.LA(1);
 
-            if ( (LA30_0==69) ) {
+            if ( (LA30_0==71) ) {
                 alt30=1;
             }
             switch (alt30) {
@@ -2943,7 +2949,7 @@
 
 
     // $ANTLR start accumulate_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:795:1: accumulate_statement returns [AccumulateDescr d] : loc= ACCUMULATE '(' pattern= lhs_pattern ',' INIT text= paren_chunk[null] ',' ACTION text= paren_chunk[null] ',' RESULT text= paren_chunk[null] loc= ')' ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:799:1: accumulate_statement returns [AccumulateDescr d] : loc= ACCUMULATE '(' pattern= lhs_pattern ',' INIT text= paren_chunk[null] ',' ACTION text= paren_chunk[null] ',' RESULT text= paren_chunk[null] loc= ')' ;
     public final AccumulateDescr accumulate_statement() throws RecognitionException {
         AccumulateDescr d = null;
 
@@ -2957,8 +2963,8 @@
         		d = factory.createAccumulate();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:800:10: (loc= ACCUMULATE '(' pattern= lhs_pattern ',' INIT text= paren_chunk[null] ',' ACTION text= paren_chunk[null] ',' RESULT text= paren_chunk[null] loc= ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:800:10: loc= ACCUMULATE '(' pattern= lhs_pattern ',' INIT text= paren_chunk[null] ',' ACTION text= paren_chunk[null] ',' RESULT text= paren_chunk[null] loc= ')'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:804:10: (loc= ACCUMULATE '(' pattern= lhs_pattern ',' INIT text= paren_chunk[null] ',' ACTION text= paren_chunk[null] ',' RESULT text= paren_chunk[null] loc= ')' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:804:10: loc= ACCUMULATE '(' pattern= lhs_pattern ',' INIT text= paren_chunk[null] ',' ACTION text= paren_chunk[null] ',' RESULT text= paren_chunk[null] loc= ')'
             {
             loc=(Token)input.LT(1);
             match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_accumulate_statement2046); if (failed) return d;
@@ -3030,7 +3036,7 @@
 
 
     // $ANTLR start collect_statement
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:824:1: collect_statement returns [CollectDescr d] : loc= COLLECT '(' pattern= lhs_pattern loc= ')' ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:1: collect_statement returns [CollectDescr d] : loc= COLLECT '(' pattern= lhs_pattern loc= ')' ;
     public final CollectDescr collect_statement() throws RecognitionException {
         CollectDescr d = null;
 
@@ -3042,8 +3048,8 @@
         		d = factory.createCollect();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:10: (loc= COLLECT '(' pattern= lhs_pattern loc= ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:10: loc= COLLECT '(' pattern= lhs_pattern loc= ')'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:10: (loc= COLLECT '(' pattern= lhs_pattern loc= ')' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:10: loc= COLLECT '(' pattern= lhs_pattern loc= ')'
             {
             loc=(Token)input.LT(1);
             match(input,COLLECT,FOLLOW_COLLECT_in_collect_statement2155); if (failed) return d;
@@ -3082,7 +3088,7 @@
 
 
     // $ANTLR start fact_binding
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:841:1: fact_binding returns [BaseDescr d] : id= ID ':' fe= fact_expression[id.getText()] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:845:1: fact_binding returns [BaseDescr d] : id= ID ':' fe= fact_expression[id.getText()] ;
     public final BaseDescr fact_binding() throws RecognitionException {
         BaseDescr d = null;
 
@@ -3095,12 +3101,12 @@
         		boolean multi=false;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:4: (id= ID ':' fe= fact_expression[id.getText()] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:4: id= ID ':' fe= fact_expression[id.getText()]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:851:4: (id= ID ':' fe= fact_expression[id.getText()] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:851:4: id= ID ':' fe= fact_expression[id.getText()]
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_fact_binding2207); if (failed) return d;
-            match(input,68,FOLLOW_68_in_fact_binding2209); if (failed) return d;
+            match(input,70,FOLLOW_70_in_fact_binding2209); if (failed) return d;
             if ( backtracking==0 ) {
 
                		        // handling incomplete parsing
@@ -3137,7 +3143,7 @@
 
 
     // $ANTLR start fact_expression
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:863:2: fact_expression[String id] returns [BaseDescr pd] : ( '(' fe= fact_expression[id] ')' | f= fact ( ( OR | '||' ) f= fact )* );
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867:2: fact_expression[String id] returns [BaseDescr pd] : ( LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN | f= fact ( ( OR | DOUBLE_PIPE ) f= fact )* );
     public final BaseDescr fact_expression(String id) throws RecognitionException {
         BaseDescr pd = null;
 
@@ -3151,7 +3157,7 @@
          		boolean multi = false;
          	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:868:5: ( '(' fe= fact_expression[id] ')' | f= fact ( ( OR | '||' ) f= fact )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:872:5: ( LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN | f= fact ( ( OR | DOUBLE_PIPE ) f= fact )* )
             int alt32=2;
             int LA32_0 = input.LA(1);
 
@@ -3164,13 +3170,13 @@
             else {
                 if (backtracking>0) {failed=true; return pd;}
                 NoViableAltException nvae =
-                    new NoViableAltException("863:2: fact_expression[String id] returns [BaseDescr pd] : ( '(' fe= fact_expression[id] ')' | f= fact ( ( OR | '||' ) f= fact )* );", 32, 0, input);
+                    new NoViableAltException("867:2: fact_expression[String id] returns [BaseDescr pd] : ( LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN | f= fact ( ( OR | DOUBLE_PIPE ) f= fact )* );", 32, 0, input);
 
                 throw nvae;
             }
             switch (alt32) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:868:5: '(' fe= fact_expression[id] ')'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:872:5: LEFT_PAREN fe= fact_expression[id] RIGHT_PAREN
                     {
                     match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_expression2254); if (failed) return pd;
                     pushFollow(FOLLOW_fact_expression_in_fact_expression2258);
@@ -3185,7 +3191,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:869:6: f= fact ( ( OR | '||' ) f= fact )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:6: f= fact ( ( OR | DOUBLE_PIPE ) f= fact )*
                     {
                     pushFollow(FOLLOW_fact_in_fact_expression2272);
                     f=fact();
@@ -3197,13 +3203,13 @@
                        			pd = f;
                        		
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874:4: ( ( OR | '||' ) f= fact )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:4: ( ( OR | DOUBLE_PIPE ) f= fact )*
                     loop31:
                     do {
                         int alt31=2;
                         int LA31_0 = input.LA(1);
 
-                        if ( (LA31_0==OR||LA31_0==71) ) {
+                        if ( ((LA31_0>=OR && LA31_0<=DOUBLE_PIPE)) ) {
                             int LA31_6 = input.LA(2);
 
                             if ( (synpred49()) ) {
@@ -3216,9 +3222,9 @@
 
                         switch (alt31) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874:6: ( OR | '||' ) f= fact
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:6: ( OR | DOUBLE_PIPE ) f= fact
                     	    {
-                    	    if ( input.LA(1)==OR||input.LA(1)==71 ) {
+                    	    if ( (input.LA(1)>=OR && input.LA(1)<=DOUBLE_PIPE) ) {
                     	        input.consume();
                     	        errorRecovery=false;failed=false;
                     	    }
@@ -3275,7 +3281,7 @@
 
 
     // $ANTLR start fact
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:890:1: fact returns [BaseDescr d] : id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:894:1: fact returns [BaseDescr d] : id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN ;
     public final BaseDescr fact() throws RecognitionException {
         BaseDescr d = null;
 
@@ -3289,8 +3295,8 @@
         		PatternDescr pattern = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:896:11: (id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:896:11: id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:11: (id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:11: id= dotted_name[d] loc= LEFT_PAREN ( constraints[pattern] )? endLoc= RIGHT_PAREN
             {
             if ( backtracking==0 ) {
 
@@ -3316,16 +3322,16 @@
                			        pattern.setLeftParentCharacter( ((CommonToken)loc).getStartIndex() );
                			
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:909:4: ( constraints[pattern] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:4: ( constraints[pattern] )?
             int alt33=2;
             int LA33_0 = input.LA(1);
 
-            if ( ((LA33_0>=ATTRIBUTES && LA33_0<=WHEN)||LA33_0==ENABLED||LA33_0==SALIENCE||LA33_0==DURATION||(LA33_0>=ACCUMULATE && LA33_0<=LEFT_PAREN)||(LA33_0>=CONTAINS && LA33_0<=IN)||LA33_0==NULL||(LA33_0>=AND && LA33_0<=THEN)) ) {
+            if ( ((LA33_0>=ATTRIBUTES && LA33_0<=WHEN)||LA33_0==ENABLED||LA33_0==SALIENCE||LA33_0==DURATION||(LA33_0>=ACCUMULATE && LA33_0<=LEFT_PAREN)||LA33_0==OR||(LA33_0>=EVAL && LA33_0<=IN)||LA33_0==NULL||(LA33_0>=AND && LA33_0<=THEN)) ) {
                 alt33=1;
             }
             switch (alt33) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:909:6: constraints[pattern]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:6: constraints[pattern]
                     {
                     pushFollow(FOLLOW_constraints_in_fact2387);
                     constraints(pattern);
@@ -3364,122 +3370,352 @@
 
 
     // $ANTLR start constraints
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:921:1: constraints[PatternDescr pattern] : ( constraint[pattern] | predicate[pattern] ) ( ',' ( constraint[pattern] | predicate[pattern] ) )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:925:1: constraints[PatternDescr pattern] : constraint[pattern] ( ',' constraint[pattern] )* ;
     public final void constraints(PatternDescr pattern) throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:922:4: ( ( constraint[pattern] | predicate[pattern] ) ( ',' ( constraint[pattern] | predicate[pattern] ) )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:922:4: ( constraint[pattern] | predicate[pattern] ) ( ',' ( constraint[pattern] | predicate[pattern] ) )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:926:4: ( constraint[pattern] ( ',' constraint[pattern] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:926:4: constraint[pattern] ( ',' constraint[pattern] )*
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:922:4: ( constraint[pattern] | predicate[pattern] )
-            int alt34=2;
-            int LA34_0 = input.LA(1);
+            pushFollow(FOLLOW_constraint_in_constraints2420);
+            constraint(pattern);
+            _fsp--;
+            if (failed) return ;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:3: ( ',' constraint[pattern] )*
+            loop34:
+            do {
+                int alt34=2;
+                int LA34_0 = input.LA(1);
 
-            if ( ((LA34_0>=ATTRIBUTES && LA34_0<=WHEN)||LA34_0==ENABLED||LA34_0==SALIENCE||LA34_0==DURATION||(LA34_0>=ACCUMULATE && LA34_0<=OR)||(LA34_0>=CONTAINS && LA34_0<=IN)||LA34_0==NULL||(LA34_0>=AND && LA34_0<=THEN)) ) {
-                alt34=1;
+                if ( (LA34_0==COMMA) ) {
+                    alt34=1;
+                }
+
+
+                switch (alt34) {
+            	case 1 :
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:5: ',' constraint[pattern]
+            	    {
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2427); if (failed) return ;
+            	    pushFollow(FOLLOW_constraint_in_constraints2429);
+            	    constraint(pattern);
+            	    _fsp--;
+            	    if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop34;
+                }
+            } while (true);
+
+
             }
-            else if ( (LA34_0==LEFT_PAREN) ) {
-                alt34=2;
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end constraints
+
+
+    // $ANTLR start constraint
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:930:1: constraint[PatternDescr pattern] : or_constr[top] ;
+    public final void constraint(PatternDescr pattern) throws RecognitionException {
+
+        		ConditionalElementDescr top = null;
+        	
+        try {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:3: ( or_constr[top] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:3: or_constr[top]
+            {
+            if ( backtracking==0 ) {
+
+              			top = pattern.getConstraint();
+              		
             }
-            else {
-                if (backtracking>0) {failed=true; return ;}
-                NoViableAltException nvae =
-                    new NoViableAltException("922:4: ( constraint[pattern] | predicate[pattern] )", 34, 0, input);
+            pushFollow(FOLLOW_or_constr_in_constraint2459);
+            or_constr(top);
+            _fsp--;
+            if (failed) return ;
 
-                throw nvae;
             }
-            switch (alt34) {
-                case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:922:5: constraint[pattern]
-                    {
-                    pushFollow(FOLLOW_constraint_in_constraints2421);
-                    constraint(pattern);
-                    _fsp--;
-                    if (failed) return ;
 
-                    }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:922:25: predicate[pattern]
-                    {
-                    pushFollow(FOLLOW_predicate_in_constraints2424);
-                    predicate(pattern);
-                    _fsp--;
-                    if (failed) return ;
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end constraint
 
-                    }
-                    break;
 
+    // $ANTLR start or_constr
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:941:1: or_constr[ConditionalElementDescr base] : and_constr[or] (t= DOUBLE_PIPE and_constr[or] )* ;
+    public final void or_constr(ConditionalElementDescr base) throws RecognitionException {
+        Token t=null;
+
+
+        		OrDescr or = new OrDescr();
+        	
+        try {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:3: ( and_constr[or] (t= DOUBLE_PIPE and_constr[or] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:3: and_constr[or] (t= DOUBLE_PIPE and_constr[or] )*
+            {
+            pushFollow(FOLLOW_and_constr_in_or_constr2482);
+            and_constr(or);
+            _fsp--;
+            if (failed) return ;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:18: (t= DOUBLE_PIPE and_constr[or] )*
+            loop35:
+            do {
+                int alt35=2;
+                int LA35_0 = input.LA(1);
+
+                if ( (LA35_0==DOUBLE_PIPE) ) {
+                    alt35=1;
+                }
+
+
+                switch (alt35) {
+            	case 1 :
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:20: t= DOUBLE_PIPE and_constr[or]
+            	    {
+            	    t=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr2489); if (failed) return ;
+            	    pushFollow(FOLLOW_and_constr_in_or_constr2491);
+            	    and_constr(or);
+            	    _fsp--;
+            	    if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop35;
+                }
+            } while (true);
+
+            if ( backtracking==0 ) {
+
+              		        if( or.getDescrs().size() == 1 ) {
+              		                base.addOrMerge( (BaseDescr) or.getDescrs().get(0) );
+              		        } else if ( or.getDescrs().size() > 1 ) {
+              		        	base.addDescr( or );
+              		        }
+              		
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:3: ( ',' ( constraint[pattern] | predicate[pattern] ) )*
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end or_constr
+
+
+    // $ANTLR start and_constr
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:956:1: and_constr[ConditionalElementDescr base] : unary_constr[and] (t= DOUBLE_AMPER unary_constr[and] )* ;
+    public final void and_constr(ConditionalElementDescr base) throws RecognitionException {
+        Token t=null;
+
+
+        		AndDescr and = new AndDescr();
+        	
+        try {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:3: ( unary_constr[and] (t= DOUBLE_AMPER unary_constr[and] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:3: unary_constr[and] (t= DOUBLE_AMPER unary_constr[and] )*
+            {
+            pushFollow(FOLLOW_unary_constr_in_and_constr2520);
+            unary_constr(and);
+            _fsp--;
+            if (failed) return ;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:21: (t= DOUBLE_AMPER unary_constr[and] )*
             loop36:
             do {
                 int alt36=2;
                 int LA36_0 = input.LA(1);
 
-                if ( (LA36_0==COMMA) ) {
+                if ( (LA36_0==DOUBLE_AMPER) ) {
                     alt36=1;
                 }
 
 
                 switch (alt36) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:5: ',' ( constraint[pattern] | predicate[pattern] )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:23: t= DOUBLE_AMPER unary_constr[and]
             	    {
-            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2432); if (failed) return ;
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:9: ( constraint[pattern] | predicate[pattern] )
-            	    int alt35=2;
-            	    int LA35_0 = input.LA(1);
+            	    t=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr2527); if (failed) return ;
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr2529);
+            	    unary_constr(and);
+            	    _fsp--;
+            	    if (failed) return ;
 
-            	    if ( ((LA35_0>=ATTRIBUTES && LA35_0<=WHEN)||LA35_0==ENABLED||LA35_0==SALIENCE||LA35_0==DURATION||(LA35_0>=ACCUMULATE && LA35_0<=OR)||(LA35_0>=CONTAINS && LA35_0<=IN)||LA35_0==NULL||(LA35_0>=AND && LA35_0<=THEN)) ) {
-            	        alt35=1;
             	    }
-            	    else if ( (LA35_0==LEFT_PAREN) ) {
-            	        alt35=2;
-            	    }
-            	    else {
-            	        if (backtracking>0) {failed=true; return ;}
-            	        NoViableAltException nvae =
-            	            new NoViableAltException("923:9: ( constraint[pattern] | predicate[pattern] )", 35, 0, input);
+            	    break;
 
-            	        throw nvae;
-            	    }
-            	    switch (alt35) {
-            	        case 1 :
-            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:10: constraint[pattern]
-            	            {
-            	            pushFollow(FOLLOW_constraint_in_constraints2435);
-            	            constraint(pattern);
-            	            _fsp--;
-            	            if (failed) return ;
+            	default :
+            	    break loop36;
+                }
+            } while (true);
 
-            	            }
-            	            break;
-            	        case 2 :
-            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:30: predicate[pattern]
-            	            {
-            	            pushFollow(FOLLOW_predicate_in_constraints2438);
-            	            predicate(pattern);
-            	            _fsp--;
-            	            if (failed) return ;
+            if ( backtracking==0 ) {
 
-            	            }
-            	            break;
+              		        if( and.getDescrs().size() == 1) {
+              		                base.addOrMerge( (BaseDescr) and.getDescrs().get(0) );
+              		        } else if( and.getDescrs().size() > 1) {
+              		        	base.addDescr( and );
+              		        }
+              		
+            }
 
-            	    }
+            }
 
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end and_constr
 
-            	    }
-            	    break;
 
-            	default :
-            	    break loop36;
+    // $ANTLR start unary_constr
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:1: unary_constr[ConditionalElementDescr base] : ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] ) ;
+    public final void unary_constr(ConditionalElementDescr base) throws RecognitionException {
+        try {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:3: ( ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )
+            {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )
+            int alt37=3;
+            switch ( input.LA(1) ) {
+            case ATTRIBUTES:
+            case PACKAGE:
+            case IMPORT:
+            case FUNCTION:
+            case GLOBAL:
+            case QUERY:
+            case END:
+            case TEMPLATE:
+            case RULE:
+            case WHEN:
+            case ENABLED:
+            case SALIENCE:
+            case DURATION:
+            case ACCUMULATE:
+            case INIT:
+            case ACTION:
+            case RESULT:
+            case COLLECT:
+            case ID:
+            case OR:
+            case CONTAINS:
+            case MATCHES:
+            case EXCLUDES:
+            case MEMBEROF:
+            case NOT:
+            case IN:
+            case NULL:
+            case AND:
+            case FROM:
+            case EXISTS:
+            case FORALL:
+            case THEN:
+                {
+                alt37=1;
                 }
-            } while (true);
+                break;
+            case EVAL:
+                {
+                int LA37_28 = input.LA(2);
 
+                if ( (synpred54()) ) {
+                    alt37=1;
+                }
+                else if ( (true) ) {
+                    alt37=3;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return ;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("973:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )", 37, 28, input);
 
+                    throw nvae;
+                }
+                }
+                break;
+            case LEFT_PAREN:
+                {
+                alt37=2;
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("973:3: ( field_constraint[base] | LEFT_PAREN or_constr[base] RIGHT_PAREN | EVAL predicate[base] )", 37, 0, input);
+
+                throw nvae;
             }
 
+            switch (alt37) {
+                case 1 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:5: field_constraint[base]
+                    {
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr2554);
+                    field_constraint(base);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+                case 2 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:5: LEFT_PAREN or_constr[base] RIGHT_PAREN
+                    {
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr2562); if (failed) return ;
+                    pushFollow(FOLLOW_or_constr_in_unary_constr2564);
+                    or_constr(base);
+                    _fsp--;
+                    if (failed) return ;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr2567); if (failed) return ;
+
+                    }
+                    break;
+                case 3 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:5: EVAL predicate[base]
+                    {
+                    match(input,EVAL,FOLLOW_EVAL_in_unary_constr2573); if (failed) return ;
+                    pushFollow(FOLLOW_predicate_in_unary_constr2575);
+                    predicate(base);
+                    _fsp--;
+                    if (failed) return ;
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -3489,50 +3725,50 @@
         }
         return ;
     }
-    // $ANTLR end constraints
+    // $ANTLR end unary_constr
 
 
-    // $ANTLR start constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:926:1: constraint[PatternDescr pattern] : (fb= ID ':' )? f= identifier ( ( constraint_expression[fc] (con= ( '&' | '|' ) constraint_expression[fc] )* ) | '->' predicate[pattern] )? ;
-    public final void constraint(PatternDescr pattern) throws RecognitionException {
+    // $ANTLR start field_constraint
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:1: field_constraint[ConditionalElementDescr base] : (fb= ID ':' )? f= identifier ( or_restr_connective[top] | '->' predicate[base] )? ;
+    public final void field_constraint(ConditionalElementDescr base) throws RecognitionException {
         Token fb=null;
-        Token con=null;
         Token f = null;
 
 
 
         		FieldBindingDescr fbd = null;
         		FieldConstraintDescr fc = null;
+        		RestrictionConnectiveDescr top = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:3: ( (fb= ID ':' )? f= identifier ( ( constraint_expression[fc] (con= ( '&' | '|' ) constraint_expression[fc] )* ) | '->' predicate[pattern] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:3: (fb= ID ':' )? f= identifier ( ( constraint_expression[fc] (con= ( '&' | '|' ) constraint_expression[fc] )* ) | '->' predicate[pattern] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:3: ( (fb= ID ':' )? f= identifier ( or_restr_connective[top] | '->' predicate[base] )? )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:3: (fb= ID ':' )? f= identifier ( or_restr_connective[top] | '->' predicate[base] )?
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:3: (fb= ID ':' )?
-            int alt37=2;
-            int LA37_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:3: (fb= ID ':' )?
+            int alt38=2;
+            int LA38_0 = input.LA(1);
 
-            if ( (LA37_0==ID) ) {
-                int LA37_1 = input.LA(2);
+            if ( (LA38_0==ID) ) {
+                int LA38_1 = input.LA(2);
 
-                if ( (LA37_1==68) ) {
-                    alt37=1;
+                if ( (LA38_1==70) ) {
+                    alt38=1;
                 }
             }
-            switch (alt37) {
+            switch (alt38) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:5: fb= ID ':'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:5: fb= ID ':'
                     {
                     fb=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_constraint2467); if (failed) return ;
-                    match(input,68,FOLLOW_68_in_constraint2469); if (failed) return ;
+                    match(input,ID,FOLLOW_ID_in_field_constraint2607); if (failed) return ;
+                    match(input,70,FOLLOW_70_in_field_constraint2609); if (failed) return ;
                     if ( backtracking==0 ) {
                        
                       			fbd = new FieldBindingDescr();
                       			fbd.setIdentifier( fb.getText() );
                       			fbd.setLocation( offset(fb.getLine()), fb.getCharPositionInLine() );
                       			fbd.setStartCharacter( ((CommonToken)fb).getStartIndex() );
-                      			pattern.addDescr( fbd );
+                      			base.addDescr( fbd );
 
                       		    
                     }
@@ -3542,7 +3778,7 @@
 
             }
 
-            pushFollow(FOLLOW_identifier_in_constraint2490);
+            pushFollow(FOLLOW_identifier_in_field_constraint2630);
             f=identifier();
             _fsp--;
             if (failed) return ;
@@ -3557,115 +3793,134 @@
               			fc = new FieldConstraintDescr(f.getText());
               			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
               			fc.setStartCharacter( ((CommonToken)f).getStartIndex() );
+              			top = fc.getRestriction();
               			
               			// it must be a field constraint, as it is not a binding
               			if( fb == null ) {
-              			    pattern.addDescr( fc );
+              			    base.addDescr( fc );
               			}
               		    }
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:960:3: ( ( constraint_expression[fc] (con= ( '&' | '|' ) constraint_expression[fc] )* ) | '->' predicate[pattern] )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:3: ( or_restr_connective[top] | '->' predicate[base] )?
             int alt39=3;
             int LA39_0 = input.LA(1);
 
-            if ( ((LA39_0>=CONTAINS && LA39_0<=IN)||(LA39_0>=75 && LA39_0<=80)) ) {
+            if ( (LA39_0==LEFT_PAREN||(LA39_0>=CONTAINS && LA39_0<=IN)||(LA39_0>=74 && LA39_0<=79)) ) {
                 alt39=1;
             }
-            else if ( (LA39_0==74) ) {
+            else if ( (LA39_0==73) ) {
                 alt39=2;
             }
             switch (alt39) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:4: ( constraint_expression[fc] (con= ( '&' | '|' ) constraint_expression[fc] )* )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1016:4: or_restr_connective[top]
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:4: ( constraint_expression[fc] (con= ( '&' | '|' ) constraint_expression[fc] )* )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:6: constraint_expression[fc] (con= ( '&' | '|' ) constraint_expression[fc] )*
-                    {
-                    pushFollow(FOLLOW_constraint_expression_in_constraint2506);
-                    constraint_expression(fc);
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint2644);
+                    or_restr_connective(top);
                     _fsp--;
                     if (failed) return ;
                     if ( backtracking==0 ) {
 
-                      					// we must add now as we didn't before
-                      					if( fb != null) {
-                      					    pattern.addDescr( fc );
-                      					}
-                      				
+                      				// we must add now as we didn't before
+                      				if( fb != null) {
+                      				    base.addDescr( fc );
+                      				}
+                      			
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:968:5: (con= ( '&' | '|' ) constraint_expression[fc] )*
-                    loop38:
-                    do {
-                        int alt38=2;
-                        int LA38_0 = input.LA(1);
 
-                        if ( ((LA38_0>=72 && LA38_0<=73)) ) {
-                            alt38=1;
-                        }
+                    }
+                    break;
+                case 2 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1024:4: '->' predicate[base]
+                    {
+                    match(input,73,FOLLOW_73_in_field_constraint2659); if (failed) return ;
+                    pushFollow(FOLLOW_predicate_in_field_constraint2661);
+                    predicate(base);
+                    _fsp--;
+                    if (failed) return ;
 
+                    }
+                    break;
 
-                        switch (alt38) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:969:6: con= ( '&' | '|' ) constraint_expression[fc]
-                    	    {
-                    	    con=(Token)input.LT(1);
-                    	    if ( (input.LA(1)>=72 && input.LA(1)<=73) ) {
-                    	        input.consume();
-                    	        errorRecovery=false;failed=false;
-                    	    }
-                    	    else {
-                    	        if (backtracking>0) {failed=true; return ;}
-                    	        MismatchedSetException mse =
-                    	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint2528);    throw mse;
-                    	    }
+            }
 
-                    	    if ( backtracking==0 ) {
 
-                    	      						if (con.getText().equals("&") ) {								
-                    	      							fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));	
-                    	      						} else {
-                    	      							fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
-                    	      						}							
-                    	      					
-                    	    }
-                    	    pushFollow(FOLLOW_constraint_expression_in_constraint2546);
-                    	    constraint_expression(fc);
-                    	    _fsp--;
-                    	    if (failed) return ;
+            }
 
-                    	    }
-                    	    break;
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end field_constraint
 
-                    	default :
-                    	    break loop38;
-                        }
-                    } while (true);
 
+    // $ANTLR start or_restr_connective
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:1: or_restr_connective[ RestrictionConnectiveDescr base ] : and_restr_connective[or] ( DOUBLE_PIPE and_restr_connective[or] )* ;
+    public final void or_restr_connective(RestrictionConnectiveDescr base) throws RecognitionException {
 
-                    }
+        		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
+        	
+        try {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:3: ( and_restr_connective[or] ( DOUBLE_PIPE and_restr_connective[or] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:3: and_restr_connective[or] ( DOUBLE_PIPE and_restr_connective[or] )*
+            {
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2689);
+            and_restr_connective(or);
+            _fsp--;
+            if (failed) return ;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:28: ( DOUBLE_PIPE and_restr_connective[or] )*
+            loop40:
+            do {
+                int alt40=2;
+                int LA40_0 = input.LA(1);
 
+                if ( (LA40_0==DOUBLE_PIPE) ) {
+                    int LA40_2 = input.LA(2);
 
+                    if ( (synpred59()) ) {
+                        alt40=1;
                     }
-                    break;
-                case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:981:4: '->' predicate[pattern]
-                    {
-                    match(input,74,FOLLOW_74_in_constraint2568); if (failed) return ;
-                    pushFollow(FOLLOW_predicate_in_constraint2570);
-                    predicate(pattern);
-                    _fsp--;
-                    if (failed) return ;
 
-                    }
-                    break;
 
-            }
+                }
 
 
+                switch (alt40) {
+            	case 1 :
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:30: DOUBLE_PIPE and_restr_connective[or]
+            	    {
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective2694); if (failed) return ;
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2696);
+            	    and_restr_connective(or);
+            	    _fsp--;
+            	    if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop40;
+                }
+            } while (true);
+
+            if ( backtracking==0 ) {
+
+              		        if( or.getRestrictions().size() == 1 ) {
+              		                base.addOrMerge( (RestrictionDescr) or.getRestrictions().get( 0 ) );
+              		        } else if ( or.getRestrictions().size() > 1 ) {
+              		        	base.addRestriction( or );
+              		        }
+              		
             }
 
+            }
+
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -3675,40 +3930,114 @@
         }
         return ;
     }
-    // $ANTLR end constraint
+    // $ANTLR end or_restr_connective
 
 
-    // $ANTLR start constraint_expression
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:985:1: constraint_expression[FieldConstraintDescr fc] : ( ( compound_operator[fc] ) | (op= simple_operator rd= expression_value[op] ) );
-    public final void constraint_expression(FieldConstraintDescr fc) throws RecognitionException {
-        String op = null;
+    // $ANTLR start and_restr_connective
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:1: and_restr_connective[ RestrictionConnectiveDescr base ] : constraint_expression[and] (t= DOUBLE_AMPER constraint_expression[and] )* ;
+    public final void and_restr_connective(RestrictionConnectiveDescr base) throws RecognitionException {
+        Token t=null;
 
-        RestrictionDescr rd = null;
 
+        		RestrictionConnectiveDescr and = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
+        	
+        try {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:3: ( constraint_expression[and] (t= DOUBLE_AMPER constraint_expression[and] )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:3: constraint_expression[and] (t= DOUBLE_AMPER constraint_expression[and] )*
+            {
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2727);
+            constraint_expression(and);
+            _fsp--;
+            if (failed) return ;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:30: (t= DOUBLE_AMPER constraint_expression[and] )*
+            loop41:
+            do {
+                int alt41=2;
+                int LA41_0 = input.LA(1);
 
+                if ( (LA41_0==DOUBLE_AMPER) ) {
+                    int LA41_2 = input.LA(2);
+
+                    if ( (synpred60()) ) {
+                        alt41=1;
+                    }
+
+
+                }
+
+
+                switch (alt41) {
+            	case 1 :
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:32: t= DOUBLE_AMPER constraint_expression[and]
+            	    {
+            	    t=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective2734); if (failed) return ;
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2736);
+            	    constraint_expression(and);
+            	    _fsp--;
+            	    if (failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop41;
+                }
+            } while (true);
+
+            if ( backtracking==0 ) {
+
+              		        if( and.getRestrictions().size() == 1) {
+              		                base.addOrMerge( (RestrictionDescr) and.getRestrictions().get( 0 ) );
+              		        } else if ( and.getRestrictions().size() > 1 ) {
+              		        	base.addRestriction( and );
+              		        }
+              		
+            }
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end and_restr_connective
+
+
+    // $ANTLR start constraint_expression
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:1: constraint_expression[RestrictionConnectiveDescr base] : ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN ) ;
+    public final void constraint_expression(RestrictionConnectiveDescr base) throws RecognitionException {
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:3: ( ( compound_operator[fc] ) | (op= simple_operator rd= expression_value[op] ) )
-            int alt40=2;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1061:3: ( ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1061:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )
+            {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1061:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )
+            int alt42=3;
             switch ( input.LA(1) ) {
             case IN:
                 {
-                alt40=1;
+                alt42=1;
                 }
                 break;
             case NOT:
                 {
-                int LA40_2 = input.LA(2);
+                int LA42_2 = input.LA(2);
 
-                if ( (LA40_2==MEMBEROF) ) {
-                    alt40=2;
+                if ( (LA42_2==MEMBEROF) ) {
+                    alt42=2;
                 }
-                else if ( (LA40_2==IN) ) {
-                    alt40=1;
+                else if ( (LA42_2==IN) ) {
+                    alt42=1;
                 }
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("985:1: constraint_expression[FieldConstraintDescr fc] : ( ( compound_operator[fc] ) | (op= simple_operator rd= expression_value[op] ) );", 40, 2, input);
+                        new NoViableAltException("1061:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )", 42, 2, input);
 
                     throw nvae;
                 }
@@ -3718,72 +4047,68 @@
             case MATCHES:
             case EXCLUDES:
             case MEMBEROF:
+            case 74:
             case 75:
             case 76:
             case 77:
             case 78:
             case 79:
-            case 80:
                 {
-                alt40=2;
+                alt42=2;
                 }
                 break;
+            case LEFT_PAREN:
+                {
+                alt42=3;
+                }
+                break;
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("985:1: constraint_expression[FieldConstraintDescr fc] : ( ( compound_operator[fc] ) | (op= simple_operator rd= expression_value[op] ) );", 40, 0, input);
+                    new NoViableAltException("1061:3: ( compound_operator[base] | simple_operator[base] | LEFT_PAREN or_restr_connective[base] RIGHT_PAREN )", 42, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt40) {
+            switch (alt42) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:3: ( compound_operator[fc] )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1061:5: compound_operator[base]
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:3: ( compound_operator[fc] )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:988:4: compound_operator[fc]
-                    {
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression2605);
-                    compound_operator(fc);
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression2768);
+                    compound_operator(base);
                     _fsp--;
                     if (failed) return ;
 
                     }
-
-
-                    }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:3: (op= simple_operator rd= expression_value[op] )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:5: simple_operator[base]
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:3: (op= simple_operator rd= expression_value[op] )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:992:4: op= simple_operator rd= expression_value[op]
-                    {
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression2625);
-                    op=simple_operator();
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression2775);
+                    simple_operator(base);
                     _fsp--;
                     if (failed) return ;
-                    pushFollow(FOLLOW_expression_value_in_constraint_expression2629);
-                    rd=expression_value(op);
+
+                    }
+                    break;
+                case 3 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:5: LEFT_PAREN or_restr_connective[base] RIGHT_PAREN
+                    {
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression2782); if (failed) return ;
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression2784);
+                    or_restr_connective(base);
                     _fsp--;
                     if (failed) return ;
-                    if ( backtracking==0 ) {
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression2787); if (failed) return ;
 
-                      			    if( rd != null ) {
-                      			        fc.addRestriction( rd );
-                      			    } else if ( rd == null && op != null ) {
-                      			        fc.addRestriction( new LiteralRestrictionDescr(op, null) );
-                      			    }
-                      			
                     }
+                    break;
 
-                    }
+            }
 
 
-                    }
-                    break;
+            }
 
-            }
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -3797,171 +4122,174 @@
 
 
     // $ANTLR start simple_operator
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:1: simple_operator returns [String op] : (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) ;
-    public final String simple_operator() throws RecognitionException {
-        String op = null;
-
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1067:1: simple_operator[RestrictionConnectiveDescr base] : (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[op] ;
+    public final void simple_operator(RestrictionConnectiveDescr base) throws RecognitionException {
         Token t=null;
         Token n=null;
+        RestrictionDescr rd = null;
 
+
+
+        		String op = null;
+        	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1005:3: ( (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1005:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072:3: ( (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[op] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF ) rd= expression_value[op]
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1005:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )
-            int alt41=11;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )
+            int alt43=11;
             switch ( input.LA(1) ) {
+            case 74:
+                {
+                alt43=1;
+                }
+                break;
             case 75:
                 {
-                alt41=1;
+                alt43=2;
                 }
                 break;
             case 76:
                 {
-                alt41=2;
+                alt43=3;
                 }
                 break;
             case 77:
                 {
-                alt41=3;
+                alt43=4;
                 }
                 break;
             case 78:
                 {
-                alt41=4;
+                alt43=5;
                 }
                 break;
             case 79:
                 {
-                alt41=5;
+                alt43=6;
                 }
                 break;
-            case 80:
-                {
-                alt41=6;
-                }
-                break;
             case CONTAINS:
                 {
-                alt41=7;
+                alt43=7;
                 }
                 break;
             case MATCHES:
                 {
-                alt41=8;
+                alt43=8;
                 }
                 break;
             case EXCLUDES:
                 {
-                alt41=9;
+                alt43=9;
                 }
                 break;
             case MEMBEROF:
                 {
-                alt41=10;
+                alt43=10;
                 }
                 break;
             case NOT:
                 {
-                alt41=11;
+                alt43=11;
                 }
                 break;
             default:
-                if (backtracking>0) {failed=true; return op;}
+                if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1005:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )", 41, 0, input);
+                    new NoViableAltException("1072:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )", 43, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt41) {
+            switch (alt43) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1005:5: t= '=='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072:5: t= '=='
                     {
                     t=(Token)input.LT(1);
-                    match(input,75,FOLLOW_75_in_simple_operator2663); if (failed) return op;
+                    match(input,74,FOLLOW_74_in_simple_operator2818); if (failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:5: t= '>'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1073:5: t= '>'
                     {
                     t=(Token)input.LT(1);
-                    match(input,76,FOLLOW_76_in_simple_operator2671); if (failed) return op;
+                    match(input,75,FOLLOW_75_in_simple_operator2826); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:5: t= '>='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074:5: t= '>='
                     {
                     t=(Token)input.LT(1);
-                    match(input,77,FOLLOW_77_in_simple_operator2679); if (failed) return op;
+                    match(input,76,FOLLOW_76_in_simple_operator2834); if (failed) return ;
 
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:5: t= '<'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1075:5: t= '<'
                     {
                     t=(Token)input.LT(1);
-                    match(input,78,FOLLOW_78_in_simple_operator2687); if (failed) return op;
+                    match(input,77,FOLLOW_77_in_simple_operator2842); if (failed) return ;
 
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:5: t= '<='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:5: t= '<='
                     {
                     t=(Token)input.LT(1);
-                    match(input,79,FOLLOW_79_in_simple_operator2695); if (failed) return op;
+                    match(input,78,FOLLOW_78_in_simple_operator2850); if (failed) return ;
 
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:5: t= '!='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077:5: t= '!='
                     {
                     t=(Token)input.LT(1);
-                    match(input,80,FOLLOW_80_in_simple_operator2703); if (failed) return op;
+                    match(input,79,FOLLOW_79_in_simple_operator2858); if (failed) return ;
 
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:5: t= CONTAINS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1078:5: t= CONTAINS
                     {
                     t=(Token)input.LT(1);
-                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator2711); if (failed) return op;
+                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator2866); if (failed) return ;
 
                     }
                     break;
                 case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1012:5: t= MATCHES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1079:5: t= MATCHES
                     {
                     t=(Token)input.LT(1);
-                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator2719); if (failed) return op;
+                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator2874); if (failed) return ;
 
                     }
                     break;
                 case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1013:5: t= EXCLUDES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1080:5: t= EXCLUDES
                     {
                     t=(Token)input.LT(1);
-                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_simple_operator2727); if (failed) return op;
+                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_simple_operator2882); if (failed) return ;
 
                     }
                     break;
                 case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:5: t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:5: t= MEMBEROF
                     {
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator2735); if (failed) return op;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator2890); if (failed) return ;
 
                     }
                     break;
                 case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:5: n= NOT t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:5: n= NOT t= MEMBEROF
                     {
                     n=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_simple_operator2743); if (failed) return op;
+                    match(input,NOT,FOLLOW_NOT_in_simple_operator2898); if (failed) return ;
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator2747); if (failed) return op;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator2902); if (failed) return ;
 
                     }
                     break;
@@ -3977,9 +4305,22 @@
               		    }
               		
             }
+            pushFollow(FOLLOW_expression_value_in_simple_operator2916);
+            rd=expression_value(op);
+            _fsp--;
+            if (failed) return ;
+            if ( backtracking==0 ) {
 
+              			    if( rd != null ) {
+              			        base.addRestriction( rd );
+              			    } else if ( rd == null && op != null ) {
+              			        base.addRestriction( new LiteralRestrictionDescr(op, null) );
+              			    }
+              		
             }
 
+            }
+
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -3987,22 +4328,26 @@
         }
         finally {
         }
-        return op;
+        return ;
     }
     // $ANTLR end simple_operator
 
 
     // $ANTLR start compound_operator
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1026:1: compound_operator[FieldConstraintDescr fc] : ( ( IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN ) | ( NOT IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN ) );
-    public final void compound_operator(FieldConstraintDescr fc) throws RecognitionException {
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:1: compound_operator[RestrictionConnectiveDescr base] : ( IN | NOT IN ) LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN ;
+    public final void compound_operator(RestrictionConnectiveDescr base) throws RecognitionException {
         RestrictionDescr rd = null;
 
 
 
         		String op = null;
+        		RestrictionConnectiveDescr group = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:3: ( ( IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN ) | ( NOT IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:3: ( ( IN | NOT IN ) LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:3: ( IN | NOT IN ) LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN
+            {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:3: ( IN | NOT IN )
             int alt44=2;
             int LA44_0 = input.LA(1);
 
@@ -4015,150 +4360,95 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1026:1: compound_operator[FieldConstraintDescr fc] : ( ( IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN ) | ( NOT IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN ) );", 44, 0, input);
+                    new NoViableAltException("1107:3: ( IN | NOT IN )", 44, 0, input);
 
                 throw nvae;
             }
             switch (alt44) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:3: ( IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:5: IN
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:3: ( IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:5: IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN
-                    {
-                    match(input,IN,FOLLOW_IN_in_compound_operator2779); if (failed) return ;
+                    match(input,IN,FOLLOW_IN_in_compound_operator2945); if (failed) return ;
                     if ( backtracking==0 ) {
 
-                      		  op = "==";
-                      		
+                      			  op = "==";
+                      			  group = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
+                      			  base.addRestriction( group );
+                      			
                     }
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator2790); if (failed) return ;
-                    pushFollow(FOLLOW_expression_value_in_compound_operator2794);
-                    rd=expression_value(op);
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
 
-                      		    if( rd != null ) {
-                      		        fc.addRestriction( rd );
-                      		    }
-                      		
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1041:3: ( COMMA rd= expression_value[op] )*
-                    loop42:
-                    do {
-                        int alt42=2;
-                        int LA42_0 = input.LA(1);
-
-                        if ( (LA42_0==COMMA) ) {
-                            alt42=1;
-                        }
-
-
-                        switch (alt42) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1041:5: COMMA rd= expression_value[op]
-                    	    {
-                    	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator2805); if (failed) return ;
-                    	    pushFollow(FOLLOW_expression_value_in_compound_operator2809);
-                    	    rd=expression_value(op);
-                    	    _fsp--;
-                    	    if (failed) return ;
-                    	    if ( backtracking==0 ) {
-
-                    	      		    if( rd != null ) {
-                    	      			fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
-                    	      		        fc.addRestriction( rd );
-                    	      		    }
-                    	      		
-                    	    }
-
-                    	    }
-                    	    break;
-
-                    	default :
-                    	    break loop42;
-                        }
-                    } while (true);
-
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator2824); if (failed) return ;
-
-                    }
-
-
-                    }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1052:3: ( NOT IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1113:5: NOT IN
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1052:3: ( NOT IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1052:5: NOT IN LEFT_PAREN rd= expression_value[op] ( COMMA rd= expression_value[op] )* RIGHT_PAREN
-                    {
-                    match(input,NOT,FOLLOW_NOT_in_compound_operator2839); if (failed) return ;
-                    match(input,IN,FOLLOW_IN_in_compound_operator2841); if (failed) return ;
+                    match(input,NOT,FOLLOW_NOT_in_compound_operator2957); if (failed) return ;
+                    match(input,IN,FOLLOW_IN_in_compound_operator2959); if (failed) return ;
                     if ( backtracking==0 ) {
 
-                      		  op = "!=";
-                      		
+                      			  op = "!=";
+                      			  group = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
+                      			  base.addRestriction( group );
+                      			
                     }
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator2852); if (failed) return ;
-                    pushFollow(FOLLOW_expression_value_in_compound_operator2856);
-                    rd=expression_value(op);
-                    _fsp--;
-                    if (failed) return ;
-                    if ( backtracking==0 ) {
 
-                      		    if( rd != null ) {
-                      		        fc.addRestriction( rd );
-                      		    }
-                      		
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:3: ( COMMA rd= expression_value[op] )*
-                    loop43:
-                    do {
-                        int alt43=2;
-                        int LA43_0 = input.LA(1);
+                    break;
 
-                        if ( (LA43_0==COMMA) ) {
-                            alt43=1;
-                        }
+            }
 
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator2974); if (failed) return ;
+            pushFollow(FOLLOW_expression_value_in_compound_operator2978);
+            rd=expression_value(op);
+            _fsp--;
+            if (failed) return ;
+            if ( backtracking==0 ) {
 
-                        switch (alt43) {
-                    	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:5: COMMA rd= expression_value[op]
-                    	    {
-                    	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator2867); if (failed) return ;
-                    	    pushFollow(FOLLOW_expression_value_in_compound_operator2871);
-                    	    rd=expression_value(op);
-                    	    _fsp--;
-                    	    if (failed) return ;
-                    	    if ( backtracking==0 ) {
+              			    if( rd != null ) {
+              			        group.addRestriction( rd );
+              			    }
+              			
+            }
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:3: ( COMMA rd= expression_value[op] )*
+            loop45:
+            do {
+                int alt45=2;
+                int LA45_0 = input.LA(1);
 
-                    	      		    if( rd != null ) {
-                    	      			fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));	
-                    	      		        fc.addRestriction( rd );
-                    	      		    }
-                    	      		
-                    	    }
+                if ( (LA45_0==COMMA) ) {
+                    alt45=1;
+                }
 
-                    	    }
-                    	    break;
 
-                    	default :
-                    	    break loop43;
-                        }
-                    } while (true);
+                switch (alt45) {
+            	case 1 :
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:5: COMMA rd= expression_value[op]
+            	    {
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator2990); if (failed) return ;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator2994);
+            	    rd=expression_value(op);
+            	    _fsp--;
+            	    if (failed) return ;
+            	    if ( backtracking==0 ) {
 
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator2886); if (failed) return ;
+            	      			    if( rd != null ) {
+            	      		        	group.addRestriction( rd );
+            	      			    }
+            	      			
+            	    }
 
-                    }
+            	    }
+            	    break;
 
+            	default :
+            	    break loop45;
+                }
+            } while (true);
 
-                    }
-                    break;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3010); if (failed) return ;
 
             }
+
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -4172,7 +4462,7 @@
 
 
     // $ANTLR start expression_value
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074:1: expression_value[String op] returns [RestrictionDescr rd] : (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:1: expression_value[String op] returns [RestrictionDescr rd] : (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) ;
     public final RestrictionDescr expression_value(String op) throws RecognitionException {
         RestrictionDescr rd = null;
 
@@ -4183,26 +4473,26 @@
 
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:3: ( (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:3: ( (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
-            int alt45=4;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+            int alt46=4;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                int LA45_1 = input.LA(2);
+                int LA46_1 = input.LA(2);
 
-                if ( (LA45_1==EOF||LA45_1==RIGHT_PAREN||LA45_1==COMMA||(LA45_1>=72 && LA45_1<=73)) ) {
-                    alt45=1;
+                if ( (LA46_1==71) ) {
+                    alt46=2;
                 }
-                else if ( (LA45_1==69) ) {
-                    alt45=2;
+                else if ( (LA46_1==EOF||LA46_1==RIGHT_PAREN||(LA46_1>=DOUBLE_PIPE && LA46_1<=DOUBLE_AMPER)||LA46_1==COMMA) ) {
+                    alt46=1;
                 }
                 else {
                     if (backtracking>0) {failed=true; return rd;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1076:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 45, 1, input);
+                        new NoViableAltException("1138:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 46, 1, input);
 
                     throw nvae;
                 }
@@ -4214,28 +4504,28 @@
             case FLOAT:
             case NULL:
                 {
-                alt45=3;
+                alt46=3;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt45=4;
+                alt46=4;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return rd;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1076:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 45, 0, input);
+                    new NoViableAltException("1138:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 46, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt45) {
+            switch (alt46) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:5: bvc= ID
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1138:5: bvc= ID
                     {
                     bvc=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_expression_value2914); if (failed) return rd;
+                    match(input,ID,FOLLOW_ID_in_expression_value3034); if (failed) return rd;
                     if ( backtracking==0 ) {
 
                       				rd = new VariableRestrictionDescr(op, bvc.getText());
@@ -4245,9 +4535,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:4: lc= enum_constraint
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1143:4: lc= enum_constraint
                     {
-                    pushFollow(FOLLOW_enum_constraint_in_expression_value2930);
+                    pushFollow(FOLLOW_enum_constraint_in_expression_value3050);
                     lc=enum_constraint();
                     _fsp--;
                     if (failed) return rd;
@@ -4260,9 +4550,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1086:4: lc= literal_constraint
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1148:4: lc= literal_constraint
                     {
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value2953);
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value3073);
                     lc=literal_constraint();
                     _fsp--;
                     if (failed) return rd;
@@ -4275,9 +4565,9 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1090:5: rvc= retval_constraint
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:5: rvc= retval_constraint
                     {
-                    pushFollow(FOLLOW_retval_constraint_in_expression_value2967);
+                    pushFollow(FOLLOW_retval_constraint_in_expression_value3087);
                     rvc=retval_constraint();
                     _fsp--;
                     if (failed) return rd;
@@ -4308,7 +4598,7 @@
 
 
     // $ANTLR start literal_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1097:1: literal_constraint returns [String text] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1159:1: literal_constraint returns [String text] : (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) ;
     public final String literal_constraint() throws RecognitionException {
         String text = null;
 
@@ -4318,51 +4608,51 @@
         		text = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:4: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:4: ( (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
-            int alt46=5;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
+            int alt47=5;
             switch ( input.LA(1) ) {
             case STRING:
                 {
-                alt46=1;
+                alt47=1;
                 }
                 break;
             case INT:
                 {
-                alt46=2;
+                alt47=2;
                 }
                 break;
             case FLOAT:
                 {
-                alt46=3;
+                alt47=3;
                 }
                 break;
             case BOOL:
                 {
-                alt46=4;
+                alt47=4;
                 }
                 break;
             case NULL:
                 {
-                alt46=5;
+                alt47=5;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return text;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1101:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )", 46, 0, input);
+                    new NoViableAltException("1163:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )", 47, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt46) {
+            switch (alt47) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:6: t= STRING
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:6: t= STRING
                     {
                     t=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_literal_constraint3006); if (failed) return text;
+                    match(input,STRING,FOLLOW_STRING_in_literal_constraint3126); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = getString( t ); 
                     }
@@ -4370,10 +4660,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:5: t= INT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1164:5: t= INT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_literal_constraint3017); if (failed) return text;
+                    match(input,INT,FOLLOW_INT_in_literal_constraint3137); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -4381,10 +4671,10 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1103:5: t= FLOAT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1165:5: t= FLOAT
                     {
                     t=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint3030); if (failed) return text;
+                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint3150); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -4392,10 +4682,10 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1104:5: t= BOOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1166:5: t= BOOL
                     {
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint3041); if (failed) return text;
+                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint3161); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -4403,10 +4693,10 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1105:5: t= NULL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1167:5: t= NULL
                     {
                     t=(Token)input.LT(1);
-                    match(input,NULL,FOLLOW_NULL_in_literal_constraint3053); if (failed) return text;
+                    match(input,NULL,FOLLOW_NULL_in_literal_constraint3173); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = null; 
                     }
@@ -4432,7 +4722,7 @@
 
 
     // $ANTLR start enum_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1109:1: enum_constraint returns [String text] : id= ID ( '.' ident= identifier )+ ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1171:1: enum_constraint returns [String text] : id= ID ( '.' ident= identifier )+ ;
     public final String enum_constraint() throws RecognitionException {
         String text = null;
 
@@ -4444,32 +4734,32 @@
         		text = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:3: (id= ID ( '.' ident= identifier )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:3: id= ID ( '.' ident= identifier )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1176:3: (id= ID ( '.' ident= identifier )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1176:3: id= ID ( '.' ident= identifier )+
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint3088); if (failed) return text;
+            match(input,ID,FOLLOW_ID_in_enum_constraint3208); if (failed) return text;
             if ( backtracking==0 ) {
                text=id.getText(); 
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:32: ( '.' ident= identifier )+
-            int cnt47=0;
-            loop47:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1176:32: ( '.' ident= identifier )+
+            int cnt48=0;
+            loop48:
             do {
-                int alt47=2;
-                int LA47_0 = input.LA(1);
+                int alt48=2;
+                int LA48_0 = input.LA(1);
 
-                if ( (LA47_0==69) ) {
-                    alt47=1;
+                if ( (LA48_0==71) ) {
+                    alt48=1;
                 }
 
 
-                switch (alt47) {
+                switch (alt48) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:34: '.' ident= identifier
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1176:34: '.' ident= identifier
             	    {
-            	    match(input,69,FOLLOW_69_in_enum_constraint3094); if (failed) return text;
-            	    pushFollow(FOLLOW_identifier_in_enum_constraint3098);
+            	    match(input,71,FOLLOW_71_in_enum_constraint3214); if (failed) return text;
+            	    pushFollow(FOLLOW_identifier_in_enum_constraint3218);
             	    ident=identifier();
             	    _fsp--;
             	    if (failed) return text;
@@ -4481,13 +4771,13 @@
             	    break;
 
             	default :
-            	    if ( cnt47 >= 1 ) break loop47;
+            	    if ( cnt48 >= 1 ) break loop48;
             	    if (backtracking>0) {failed=true; return text;}
                         EarlyExitException eee =
-                            new EarlyExitException(47, input);
+                            new EarlyExitException(48, input);
                         throw eee;
                 }
-                cnt47++;
+                cnt48++;
             } while (true);
 
 
@@ -4506,8 +4796,8 @@
 
 
     // $ANTLR start predicate
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1118:1: predicate[PatternDescr pattern] : text= paren_chunk[d] ;
-    public final void predicate(PatternDescr pattern) throws RecognitionException {
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1180:1: predicate[ConditionalElementDescr base] : text= paren_chunk[d] ;
+    public final void predicate(ConditionalElementDescr base) throws RecognitionException {
         String text = null;
 
 
@@ -4515,15 +4805,15 @@
         		PredicateDescr d = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1123:3: (text= paren_chunk[d] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1123:3: text= paren_chunk[d]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1185:3: (text= paren_chunk[d] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1185:3: text= paren_chunk[d]
             {
             if ( backtracking==0 ) {
 
               			d = new PredicateDescr( );
               		
             }
-            pushFollow(FOLLOW_paren_chunk_in_predicate3140);
+            pushFollow(FOLLOW_paren_chunk_in_predicate3260);
             text=paren_chunk(d);
             _fsp--;
             if (failed) return ;
@@ -4532,7 +4822,7 @@
               		        if( text != null ) {
               			        String body = text.substring(1, text.length()-1);
               			        d.setContent( body );
-              				pattern.addDescr( d );
+              				base.addDescr( d );
               		        }
               		
             }
@@ -4552,7 +4842,7 @@
 
 
     // $ANTLR start paren_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:1: paren_chunk[BaseDescr descr] returns [String text] : loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1198:1: paren_chunk[BaseDescr descr] returns [String text] : loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN ;
     public final String paren_chunk(BaseDescr descr) throws RecognitionException {
         String text = null;
 
@@ -4565,8 +4855,8 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1142:10: (loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1142:10: loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1204:10: (loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1204:10: loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN
             {
             if ( backtracking==0 ) {
 
@@ -4576,32 +4866,32 @@
               	        
             }
             loc=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk3189); if (failed) return text;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk3309); if (failed) return text;
             if ( backtracking==0 ) {
 
               		    buf.append( loc.getText());
                
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:3: (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )*
-            loop48:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1214:3: (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )*
+            loop49:
             do {
-                int alt48=3;
-                int LA48_0 = input.LA(1);
+                int alt49=3;
+                int LA49_0 = input.LA(1);
 
-                if ( ((LA48_0>=ATTRIBUTES && LA48_0<=OR)||(LA48_0>=CONTAINS && LA48_0<=81)) ) {
-                    alt48=1;
+                if ( ((LA49_0>=ATTRIBUTES && LA49_0<=ID)||(LA49_0>=OR && LA49_0<=79)) ) {
+                    alt49=1;
                 }
-                else if ( (LA48_0==LEFT_PAREN) ) {
-                    alt48=2;
+                else if ( (LA49_0==LEFT_PAREN) ) {
+                    alt49=2;
                 }
 
 
-                switch (alt48) {
+                switch (alt49) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1153:4: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1215:4: ~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
-            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=OR)||(input.LA(1)>=CONTAINS && input.LA(1)<=81) ) {
+            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=ID)||(input.LA(1)>=OR && input.LA(1)<=79) ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -4609,7 +4899,7 @@
             	        if (backtracking>0) {failed=true; return text;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk3205);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk3325);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -4621,9 +4911,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1158:4: chunk= paren_chunk[null]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1220:4: chunk= paren_chunk[null]
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_in_paren_chunk3229);
+            	    pushFollow(FOLLOW_paren_chunk_in_paren_chunk3349);
             	    chunk=paren_chunk(null);
             	    _fsp--;
             	    if (failed) return text;
@@ -4637,7 +4927,7 @@
             	    break;
 
             	default :
-            	    break loop48;
+            	    break loop49;
                 }
             } while (true);
 
@@ -4651,7 +4941,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk3266); if (failed) return text;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk3386); if (failed) return text;
             if ( backtracking==0 ) {
 
                                   buf.append( loc.getText() );
@@ -4677,7 +4967,7 @@
 
 
     // $ANTLR start curly_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1180:1: curly_chunk[BaseDescr descr] returns [String text] : loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1242:1: curly_chunk[BaseDescr descr] returns [String text] : loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY ;
     public final String curly_chunk(BaseDescr descr) throws RecognitionException {
         String text = null;
 
@@ -4690,11 +4980,11 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1186:3: (loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1186:3: loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1248:3: (loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1248:3: loc= LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )* loc= RIGHT_CURLY
             {
             loc=(Token)input.LT(1);
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk3317); if (failed) return text;
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk3437); if (failed) return text;
             if ( backtracking==0 ) {
 
               	            channel = ((SwitchingCommonTokenStream)input).getTokenTypeChannel( WS ); 
@@ -4704,25 +4994,25 @@
               		    buf.append( loc.getText() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1194:3: (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )*
-            loop49:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1256:3: (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )*
+            loop50:
             do {
-                int alt49=3;
-                int LA49_0 = input.LA(1);
+                int alt50=3;
+                int LA50_0 = input.LA(1);
 
-                if ( ((LA49_0>=ATTRIBUTES && LA49_0<=NULL)||(LA49_0>=LEFT_SQUARE && LA49_0<=81)) ) {
-                    alt49=1;
+                if ( ((LA50_0>=ATTRIBUTES && LA50_0<=NULL)||(LA50_0>=LEFT_SQUARE && LA50_0<=79)) ) {
+                    alt50=1;
                 }
-                else if ( (LA49_0==LEFT_CURLY) ) {
-                    alt49=2;
+                else if ( (LA50_0==LEFT_CURLY) ) {
+                    alt50=2;
                 }
 
 
-                switch (alt49) {
+                switch (alt50) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1195:4: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1257:4: ~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
-            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=NULL)||(input.LA(1)>=LEFT_SQUARE && input.LA(1)<=81) ) {
+            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=NULL)||(input.LA(1)>=LEFT_SQUARE && input.LA(1)<=79) ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -4730,7 +5020,7 @@
             	        if (backtracking>0) {failed=true; return text;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk3333);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk3453);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -4742,9 +5032,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1200:4: chunk= curly_chunk[descr]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1262:4: chunk= curly_chunk[descr]
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_in_curly_chunk3357);
+            	    pushFollow(FOLLOW_curly_chunk_in_curly_chunk3477);
             	    chunk=curly_chunk(descr);
             	    _fsp--;
             	    if (failed) return text;
@@ -4758,7 +5048,7 @@
             	    break;
 
             	default :
-            	    break loop49;
+            	    break loop50;
                 }
             } while (true);
 
@@ -4772,7 +5062,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk3394); if (failed) return text;
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk3514); if (failed) return text;
             if ( backtracking==0 ) {
 
                                   buf.append( loc.getText() );
@@ -4798,7 +5088,7 @@
 
 
     // $ANTLR start square_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1222:1: square_chunk[BaseDescr descr] returns [String text] : loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1284:1: square_chunk[BaseDescr descr] returns [String text] : loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE ;
     public final String square_chunk(BaseDescr descr) throws RecognitionException {
         String text = null;
 
@@ -4811,8 +5101,8 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1228:10: (loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1228:10: loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1290:10: (loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1290:10: loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE
             {
             if ( backtracking==0 ) {
 
@@ -4822,32 +5112,32 @@
               	        
             }
             loc=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk3457); if (failed) return text;
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk3577); if (failed) return text;
             if ( backtracking==0 ) {
 
               		    buf.append( loc.getText());
                
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1238:3: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )*
-            loop50:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1300:3: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )*
+            loop51:
             do {
-                int alt50=3;
-                int LA50_0 = input.LA(1);
+                int alt51=3;
+                int LA51_0 = input.LA(1);
 
-                if ( ((LA50_0>=ATTRIBUTES && LA50_0<=RIGHT_CURLY)||(LA50_0>=AND && LA50_0<=81)) ) {
-                    alt50=1;
+                if ( ((LA51_0>=ATTRIBUTES && LA51_0<=RIGHT_CURLY)||(LA51_0>=AND && LA51_0<=79)) ) {
+                    alt51=1;
                 }
-                else if ( (LA50_0==LEFT_SQUARE) ) {
-                    alt50=2;
+                else if ( (LA51_0==LEFT_SQUARE) ) {
+                    alt51=2;
                 }
 
 
-                switch (alt50) {
+                switch (alt51) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1239:4: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1301:4: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
-            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=RIGHT_CURLY)||(input.LA(1)>=AND && input.LA(1)<=81) ) {
+            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=RIGHT_CURLY)||(input.LA(1)>=AND && input.LA(1)<=79) ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -4855,7 +5145,7 @@
             	        if (backtracking>0) {failed=true; return text;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk3473);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk3593);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -4867,9 +5157,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1244:4: chunk= square_chunk[null]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1306:4: chunk= square_chunk[null]
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_square_chunk3497);
+            	    pushFollow(FOLLOW_square_chunk_in_square_chunk3617);
             	    chunk=square_chunk(null);
             	    _fsp--;
             	    if (failed) return text;
@@ -4883,7 +5173,7 @@
             	    break;
 
             	default :
-            	    break loop50;
+            	    break loop51;
                 }
             } while (true);
 
@@ -4897,7 +5187,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk3534); if (failed) return text;
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk3654); if (failed) return text;
             if ( backtracking==0 ) {
 
                                   buf.append( loc.getText() );
@@ -4923,7 +5213,7 @@
 
 
     // $ANTLR start retval_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1266:1: retval_constraint returns [String text] : c= paren_chunk[null] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1328:1: retval_constraint returns [String text] : c= paren_chunk[null] ;
     public final String retval_constraint() throws RecognitionException {
         String text = null;
 
@@ -4934,10 +5224,10 @@
         		text = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1271:3: (c= paren_chunk[null] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1271:3: c= paren_chunk[null]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1333:3: (c= paren_chunk[null] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1333:3: c= paren_chunk[null]
             {
-            pushFollow(FOLLOW_paren_chunk_in_retval_constraint3579);
+            pushFollow(FOLLOW_paren_chunk_in_retval_constraint3699);
             c=paren_chunk(null);
             _fsp--;
             if (failed) return text;
@@ -4960,7 +5250,7 @@
 
 
     // $ANTLR start lhs_or
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1274:1: lhs_or returns [BaseDescr d] : left= lhs_and ( ( OR | '||' ) right= lhs_and )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1336:1: lhs_or returns [BaseDescr d] : left= lhs_and ( ( OR | '||' ) right= lhs_and )* ;
     public final BaseDescr lhs_or() throws RecognitionException {
         BaseDescr d = null;
 
@@ -4974,32 +5264,32 @@
         		OrDescr or = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1280:3: (left= lhs_and ( ( OR | '||' ) right= lhs_and )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1280:3: left= lhs_and ( ( OR | '||' ) right= lhs_and )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1342:3: (left= lhs_and ( ( OR | '||' ) right= lhs_and )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1342:3: left= lhs_and ( ( OR | '||' ) right= lhs_and )*
             {
-            pushFollow(FOLLOW_lhs_and_in_lhs_or3607);
+            pushFollow(FOLLOW_lhs_and_in_lhs_or3727);
             left=lhs_and();
             _fsp--;
             if (failed) return d;
             if ( backtracking==0 ) {
               d = left; 
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1281:3: ( ( OR | '||' ) right= lhs_and )*
-            loop51:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1343:3: ( ( OR | '||' ) right= lhs_and )*
+            loop52:
             do {
-                int alt51=2;
-                int LA51_0 = input.LA(1);
+                int alt52=2;
+                int LA52_0 = input.LA(1);
 
-                if ( (LA51_0==OR||LA51_0==71) ) {
-                    alt51=1;
+                if ( ((LA52_0>=OR && LA52_0<=DOUBLE_PIPE)) ) {
+                    alt52=1;
                 }
 
 
-                switch (alt51) {
+                switch (alt52) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1281:5: ( OR | '||' ) right= lhs_and
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1343:5: ( OR | '||' ) right= lhs_and
             	    {
-            	    if ( input.LA(1)==OR||input.LA(1)==71 ) {
+            	    if ( (input.LA(1)>=OR && input.LA(1)<=DOUBLE_PIPE) ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -5007,10 +5297,10 @@
             	        if (backtracking>0) {failed=true; return d;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or3615);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or3735);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_lhs_and_in_lhs_or3626);
+            	    pushFollow(FOLLOW_lhs_and_in_lhs_or3746);
             	    right=lhs_and();
             	    _fsp--;
             	    if (failed) return d;
@@ -5030,7 +5320,7 @@
             	    break;
 
             	default :
-            	    break loop51;
+            	    break loop52;
                 }
             } while (true);
 
@@ -5050,7 +5340,7 @@
 
 
     // $ANTLR start lhs_and
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1295:1: lhs_and returns [BaseDescr d] : left= lhs_unary ( ( AND | '&&' ) right= lhs_unary )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1357:1: lhs_and returns [BaseDescr d] : left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )* ;
     public final BaseDescr lhs_and() throws RecognitionException {
         BaseDescr d = null;
 
@@ -5064,32 +5354,32 @@
         		AndDescr and = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1301:3: (left= lhs_unary ( ( AND | '&&' ) right= lhs_unary )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1301:3: left= lhs_unary ( ( AND | '&&' ) right= lhs_unary )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1363:3: (left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1363:3: left= lhs_unary ( ( AND | DOUBLE_AMPER ) right= lhs_unary )*
             {
-            pushFollow(FOLLOW_lhs_unary_in_lhs_and3662);
+            pushFollow(FOLLOW_lhs_unary_in_lhs_and3782);
             left=lhs_unary();
             _fsp--;
             if (failed) return d;
             if ( backtracking==0 ) {
                d = left; 
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1302:3: ( ( AND | '&&' ) right= lhs_unary )*
-            loop52:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1364:3: ( ( AND | DOUBLE_AMPER ) right= lhs_unary )*
+            loop53:
             do {
-                int alt52=2;
-                int LA52_0 = input.LA(1);
+                int alt53=2;
+                int LA53_0 = input.LA(1);
 
-                if ( (LA52_0==AND||LA52_0==81) ) {
-                    alt52=1;
+                if ( (LA53_0==DOUBLE_AMPER||LA53_0==AND) ) {
+                    alt53=1;
                 }
 
 
-                switch (alt52) {
+                switch (alt53) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1302:5: ( AND | '&&' ) right= lhs_unary
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1364:5: ( AND | DOUBLE_AMPER ) right= lhs_unary
             	    {
-            	    if ( input.LA(1)==AND||input.LA(1)==81 ) {
+            	    if ( input.LA(1)==DOUBLE_AMPER||input.LA(1)==AND ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -5097,10 +5387,10 @@
             	        if (backtracking>0) {failed=true; return d;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and3670);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and3790);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_lhs_unary_in_lhs_and3681);
+            	    pushFollow(FOLLOW_lhs_unary_in_lhs_and3801);
             	    right=lhs_unary();
             	    _fsp--;
             	    if (failed) return d;
@@ -5120,7 +5410,7 @@
             	    break;
 
             	default :
-            	    break loop52;
+            	    break loop53;
                 }
             } while (true);
 
@@ -5140,7 +5430,7 @@
 
 
     // $ANTLR start lhs_unary
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1316:1: lhs_unary returns [BaseDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1378:1: lhs_unary returns [BaseDescr d] : (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon ;
     public final BaseDescr lhs_unary() throws RecognitionException {
         BaseDescr d = null;
 
@@ -5157,55 +5447,55 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1320:4: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1320:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1382:4: ( (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1382:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' ) opt_semicolon
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1320:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' )
-            int alt55=6;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1382:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' )
+            int alt56=6;
             switch ( input.LA(1) ) {
             case EXISTS:
                 {
-                alt55=1;
+                alt56=1;
                 }
                 break;
             case NOT:
                 {
-                alt55=2;
+                alt56=2;
                 }
                 break;
             case EVAL:
                 {
-                alt55=3;
+                alt56=3;
                 }
                 break;
             case ID:
                 {
-                alt55=4;
+                alt56=4;
                 }
                 break;
             case FORALL:
                 {
-                alt55=5;
+                alt56=5;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt55=6;
+                alt56=6;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1320:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' )", 55, 0, input);
+                    new NoViableAltException("1382:4: (u= lhs_exist | u= lhs_not | u= lhs_eval | u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )? | u= lhs_forall | '(' u= lhs_or ')' )", 56, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt55) {
+            switch (alt56) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1320:6: u= lhs_exist
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1382:6: u= lhs_exist
                     {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary3718);
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary3838);
                     u=lhs_exist();
                     _fsp--;
                     if (failed) return d;
@@ -5213,9 +5503,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1321:5: u= lhs_not
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1383:5: u= lhs_not
                     {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary3726);
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary3846);
                     u=lhs_not();
                     _fsp--;
                     if (failed) return d;
@@ -5223,9 +5513,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1322:5: u= lhs_eval
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1384:5: u= lhs_eval
                     {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary3734);
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary3854);
                     u=lhs_eval();
                     _fsp--;
                     if (failed) return d;
@@ -5233,80 +5523,80 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1323:5: u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1385:5: u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_unary3742);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_unary3862);
                     u=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1323:19: ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
-                    int alt54=2;
-                    int LA54_0 = input.LA(1);
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1385:19: ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
+                    int alt55=2;
+                    int LA55_0 = input.LA(1);
 
-                    if ( (LA54_0==FROM) ) {
-                        alt54=1;
+                    if ( (LA55_0==FROM) ) {
+                        alt55=1;
                     }
-                    switch (alt54) {
+                    switch (alt55) {
                         case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1324:13: FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1386:13: FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
                             {
-                            match(input,FROM,FOLLOW_FROM_in_lhs_unary3758); if (failed) return d;
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1324:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
-                            int alt53=3;
-                            int LA53_0 = input.LA(1);
+                            match(input,FROM,FOLLOW_FROM_in_lhs_unary3878); if (failed) return d;
+                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1386:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
+                            int alt54=3;
+                            int LA54_0 = input.LA(1);
 
-                            if ( (LA53_0==ACCUMULATE) && ((synpred100()||synpred97()))) {
-                                int LA53_1 = input.LA(2);
+                            if ( (LA54_0==ACCUMULATE) && ((synpred99()||synpred102()))) {
+                                int LA54_1 = input.LA(2);
 
-                                if ( (synpred97()) ) {
-                                    alt53=1;
+                                if ( (synpred99()) ) {
+                                    alt54=1;
                                 }
-                                else if ( (synpred100()) ) {
-                                    alt53=3;
+                                else if ( (synpred102()) ) {
+                                    alt54=3;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return d;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("1324:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 53, 1, input);
+                                        new NoViableAltException("1386:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 54, 1, input);
 
                                     throw nvae;
                                 }
                             }
-                            else if ( (LA53_0==COLLECT) && ((synpred98()||synpred100()))) {
-                                int LA53_2 = input.LA(2);
+                            else if ( (LA54_0==COLLECT) && ((synpred100()||synpred102()))) {
+                                int LA54_2 = input.LA(2);
 
-                                if ( (synpred98()) ) {
-                                    alt53=2;
+                                if ( (synpred100()) ) {
+                                    alt54=2;
                                 }
-                                else if ( (synpred100()) ) {
-                                    alt53=3;
+                                else if ( (synpred102()) ) {
+                                    alt54=3;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return d;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("1324:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 53, 2, input);
+                                        new NoViableAltException("1386:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 54, 2, input);
 
                                     throw nvae;
                                 }
                             }
-                            else if ( ((LA53_0>=ATTRIBUTES && LA53_0<=WHEN)||LA53_0==ENABLED||LA53_0==SALIENCE||LA53_0==DURATION||(LA53_0>=INIT && LA53_0<=RESULT)||(LA53_0>=ID && LA53_0<=OR)||(LA53_0>=CONTAINS && LA53_0<=IN)||LA53_0==NULL||(LA53_0>=AND && LA53_0<=THEN)) && (synpred100())) {
-                                alt53=3;
+                            else if ( ((LA54_0>=ATTRIBUTES && LA54_0<=WHEN)||LA54_0==ENABLED||LA54_0==SALIENCE||LA54_0==DURATION||(LA54_0>=INIT && LA54_0<=RESULT)||LA54_0==ID||LA54_0==OR||(LA54_0>=EVAL && LA54_0<=IN)||LA54_0==NULL||(LA54_0>=AND && LA54_0<=THEN)) && (synpred102())) {
+                                alt54=3;
                             }
                             else {
                                 if (backtracking>0) {failed=true; return d;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("1324:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 53, 0, input);
+                                    new NoViableAltException("1386:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 54, 0, input);
 
                                 throw nvae;
                             }
-                            switch (alt53) {
+                            switch (alt54) {
                                 case 1 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1325:14: ( ACCUMULATE )=> (ac= accumulate_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:14: ( ACCUMULATE )=> (ac= accumulate_statement )
                                     {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1325:32: (ac= accumulate_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1325:33: ac= accumulate_statement
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:32: (ac= accumulate_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:33: ac= accumulate_statement
                                     {
-                                    pushFollow(FOLLOW_accumulate_statement_in_lhs_unary3786);
+                                    pushFollow(FOLLOW_accumulate_statement_in_lhs_unary3906);
                                     ac=accumulate_statement();
                                     _fsp--;
                                     if (failed) return d;
@@ -5320,12 +5610,12 @@
                                     }
                                     break;
                                 case 2 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1326:14: ( COLLECT )=> (cs= collect_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:14: ( COLLECT )=> (cs= collect_statement )
                                     {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1326:29: (cs= collect_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1326:30: cs= collect_statement
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:29: (cs= collect_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:30: cs= collect_statement
                                     {
-                                    pushFollow(FOLLOW_collect_statement_in_lhs_unary3815);
+                                    pushFollow(FOLLOW_collect_statement_in_lhs_unary3935);
                                     cs=collect_statement();
                                     _fsp--;
                                     if (failed) return d;
@@ -5339,12 +5629,12 @@
                                     }
                                     break;
                                 case 3 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1327:14: (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:14: (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement )
                                     {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1327:43: (fm= from_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1327:44: fm= from_statement
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:43: (fm= from_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:44: fm= from_statement
                                     {
-                                    pushFollow(FOLLOW_from_statement_in_lhs_unary3850);
+                                    pushFollow(FOLLOW_from_statement_in_lhs_unary3970);
                                     fm=from_statement();
                                     _fsp--;
                                     if (failed) return d;
@@ -5370,9 +5660,9 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1330:5: u= lhs_forall
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1392:5: u= lhs_forall
                     {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary3889);
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary4009);
                     u=lhs_forall();
                     _fsp--;
                     if (failed) return d;
@@ -5380,14 +5670,14 @@
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1331:5: '(' u= lhs_or ')'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1393:5: '(' u= lhs_or ')'
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary3897); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary3901);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary4017); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary4021);
                     u=lhs_or();
                     _fsp--;
                     if (failed) return d;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary3903); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary4023); if (failed) return d;
 
                     }
                     break;
@@ -5397,7 +5687,7 @@
             if ( backtracking==0 ) {
                d = u; 
             }
-            pushFollow(FOLLOW_opt_semicolon_in_lhs_unary3913);
+            pushFollow(FOLLOW_opt_semicolon_in_lhs_unary4033);
             opt_semicolon();
             _fsp--;
             if (failed) return d;
@@ -5417,7 +5707,7 @@
 
 
     // $ANTLR start lhs_exist
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1336:1: lhs_exist returns [BaseDescr d] : loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1398:1: lhs_exist returns [BaseDescr d] : loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) ;
     public final BaseDescr lhs_exist() throws RecognitionException {
         BaseDescr d = null;
 
@@ -5430,11 +5720,11 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1340:4: (loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1340:4: loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1402:4: (loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1402:4: loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
             {
             loc=(Token)input.LT(1);
-            match(input,EXISTS,FOLLOW_EXISTS_in_lhs_exist3937); if (failed) return d;
+            match(input,EXISTS,FOLLOW_EXISTS_in_lhs_exist4057); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new ExistsDescr( ); 
@@ -5442,32 +5732,32 @@
               			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1346:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
-            int alt56=2;
-            int LA56_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1408:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
+            int alt57=2;
+            int LA57_0 = input.LA(1);
 
-            if ( (LA56_0==LEFT_PAREN) ) {
-                alt56=1;
+            if ( (LA57_0==LEFT_PAREN) ) {
+                alt57=1;
             }
-            else if ( (LA56_0==ID) ) {
-                alt56=2;
+            else if ( (LA57_0==ID) ) {
+                alt57=2;
             }
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1346:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 56, 0, input);
+                    new NoViableAltException("1408:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 57, 0, input);
 
                 throw nvae;
             }
-            switch (alt56) {
+            switch (alt57) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1346:12: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1408:12: ( '(' pattern= lhs_or end= ')' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1346:12: ( '(' pattern= lhs_or end= ')' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1346:14: '(' pattern= lhs_or end= ')'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1408:12: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1408:14: '(' pattern= lhs_or end= ')'
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist3957); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist3961);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist4077); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist4081);
                     pattern=lhs_or();
                     _fsp--;
                     if (failed) return d;
@@ -5475,7 +5765,7 @@
                        if ( pattern != null ) ((ExistsDescr)d).addDescr( pattern ); 
                     }
                     end=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist3993); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist4113); if (failed) return d;
                     if ( backtracking==0 ) {
                        if ( end != null ) d.setEndCharacter( ((CommonToken)end).getStopIndex() ); 
                     }
@@ -5486,9 +5776,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1351:12: pattern= lhs_pattern
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1413:12: pattern= lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist4043);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist4163);
                     pattern=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
@@ -5522,7 +5812,7 @@
 
 
     // $ANTLR start lhs_not
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1361:1: lhs_not returns [NotDescr d] : loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1423:1: lhs_not returns [NotDescr d] : loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) ;
     public final NotDescr lhs_not() throws RecognitionException {
         NotDescr d = null;
 
@@ -5535,11 +5825,11 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1365:4: (loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1365:4: loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1427:4: (loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1427:4: loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
             {
             loc=(Token)input.LT(1);
-            match(input,NOT,FOLLOW_NOT_in_lhs_not4097); if (failed) return d;
+            match(input,NOT,FOLLOW_NOT_in_lhs_not4217); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new NotDescr( ); 
@@ -5547,32 +5837,32 @@
               			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1371:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
-            int alt57=2;
-            int LA57_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
+            int alt58=2;
+            int LA58_0 = input.LA(1);
 
-            if ( (LA57_0==LEFT_PAREN) ) {
-                alt57=1;
+            if ( (LA58_0==LEFT_PAREN) ) {
+                alt58=1;
             }
-            else if ( (LA57_0==ID) ) {
-                alt57=2;
+            else if ( (LA58_0==ID) ) {
+                alt58=2;
             }
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1371:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 57, 0, input);
+                    new NoViableAltException("1433:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 58, 0, input);
 
                 throw nvae;
             }
-            switch (alt57) {
+            switch (alt58) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1371:5: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:5: ( '(' pattern= lhs_or end= ')' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1371:5: ( '(' pattern= lhs_or end= ')' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1371:7: '(' pattern= lhs_or end= ')'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:5: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1433:7: '(' pattern= lhs_or end= ')'
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not4110); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not4114);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not4230); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not4234);
                     pattern=lhs_or();
                     _fsp--;
                     if (failed) return d;
@@ -5580,7 +5870,7 @@
                        if ( pattern != null ) d.addDescr( pattern ); 
                     }
                     end=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not4147); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not4267); if (failed) return d;
                     if ( backtracking==0 ) {
                        if ( end != null ) d.setEndCharacter( ((CommonToken)end).getStopIndex() ); 
                     }
@@ -5591,9 +5881,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1377:3: pattern= lhs_pattern
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1439:3: pattern= lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not4184);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not4304);
                     pattern=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
@@ -5627,7 +5917,7 @@
 
 
     // $ANTLR start lhs_eval
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:1: lhs_eval returns [BaseDescr d] : loc= EVAL c= paren_chunk[d] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1449:1: lhs_eval returns [BaseDescr d] : loc= EVAL c= paren_chunk[d] ;
     public final BaseDescr lhs_eval() throws RecognitionException {
         BaseDescr d = null;
 
@@ -5639,12 +5929,12 @@
         		d = new EvalDescr( );
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1392:3: (loc= EVAL c= paren_chunk[d] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1392:3: loc= EVAL c= paren_chunk[d]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1454:3: (loc= EVAL c= paren_chunk[d] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1454:3: loc= EVAL c= paren_chunk[d]
             {
             loc=(Token)input.LT(1);
-            match(input,EVAL,FOLLOW_EVAL_in_lhs_eval4232); if (failed) return d;
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval4236);
+            match(input,EVAL,FOLLOW_EVAL_in_lhs_eval4352); if (failed) return d;
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval4356);
             c=paren_chunk(d);
             _fsp--;
             if (failed) return d;
@@ -5674,7 +5964,7 @@
 
 
     // $ANTLR start lhs_forall
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1403:1: lhs_forall returns [ForallDescr d] : loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')' ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1465:1: lhs_forall returns [ForallDescr d] : loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')' ;
     public final ForallDescr lhs_forall() throws RecognitionException {
         ForallDescr d = null;
 
@@ -5689,13 +5979,13 @@
         		d = factory.createForall();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1407:4: (loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1407:4: loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1469:4: (loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1469:4: loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')'
             {
             loc=(Token)input.LT(1);
-            match(input,FORALL,FOLLOW_FORALL_in_lhs_forall4265); if (failed) return d;
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall4267); if (failed) return d;
-            pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4271);
+            match(input,FORALL,FOLLOW_FORALL_in_lhs_forall4385); if (failed) return d;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall4387); if (failed) return d;
+            pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4391);
             base=lhs_pattern();
             _fsp--;
             if (failed) return d;
@@ -5707,41 +5997,41 @@
               			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1414:3: ( ( ',' )? pattern= lhs_pattern )+
-            int cnt59=0;
-            loop59:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:3: ( ( ',' )? pattern= lhs_pattern )+
+            int cnt60=0;
+            loop60:
             do {
-                int alt59=2;
-                int LA59_0 = input.LA(1);
+                int alt60=2;
+                int LA60_0 = input.LA(1);
 
-                if ( (LA59_0==ID||LA59_0==COMMA) ) {
-                    alt59=1;
+                if ( (LA60_0==ID||LA60_0==COMMA) ) {
+                    alt60=1;
                 }
 
 
-                switch (alt59) {
+                switch (alt60) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1414:5: ( ',' )? pattern= lhs_pattern
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:5: ( ',' )? pattern= lhs_pattern
             	    {
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1414:5: ( ',' )?
-            	    int alt58=2;
-            	    int LA58_0 = input.LA(1);
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:5: ( ',' )?
+            	    int alt59=2;
+            	    int LA59_0 = input.LA(1);
 
-            	    if ( (LA58_0==COMMA) ) {
-            	        alt58=1;
+            	    if ( (LA59_0==COMMA) ) {
+            	        alt59=1;
             	    }
-            	    switch (alt58) {
+            	    switch (alt59) {
             	        case 1 :
-            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1414:6: ','
+            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:6: ','
             	            {
-            	            match(input,COMMA,FOLLOW_COMMA_in_lhs_forall4285); if (failed) return d;
+            	            match(input,COMMA,FOLLOW_COMMA_in_lhs_forall4405); if (failed) return d;
 
             	            }
             	            break;
 
             	    }
 
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4291);
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4411);
             	    pattern=lhs_pattern();
             	    _fsp--;
             	    if (failed) return d;
@@ -5756,17 +6046,17 @@
             	    break;
 
             	default :
-            	    if ( cnt59 >= 1 ) break loop59;
+            	    if ( cnt60 >= 1 ) break loop60;
             	    if (backtracking>0) {failed=true; return d;}
                         EarlyExitException eee =
-                            new EarlyExitException(59, input);
+                            new EarlyExitException(60, input);
                         throw eee;
                 }
-                cnt59++;
+                cnt60++;
             } while (true);
 
             end=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall4306); if (failed) return d;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall4426); if (failed) return d;
             if ( backtracking==0 ) {
 
               		        if ( end != null ) d.setEndCharacter( ((CommonToken)end).getStopIndex() );
@@ -5788,7 +6078,7 @@
 
 
     // $ANTLR start dotted_name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1426:1: dotted_name[BaseDescr descr] returns [String name] : id= ID ( '.' ident= identifier )* ( '[' loc= ']' )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:1: dotted_name[BaseDescr descr] returns [String name] : id= ID ( '.' ident= identifier )* ( '[' loc= ']' )* ;
     public final String dotted_name(BaseDescr descr) throws RecognitionException {
         String name = null;
 
@@ -5801,11 +6091,11 @@
         		name = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1431:3: (id= ID ( '.' ident= identifier )* ( '[' loc= ']' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1431:3: id= ID ( '.' ident= identifier )* ( '[' loc= ']' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1493:3: (id= ID ( '.' ident= identifier )* ( '[' loc= ']' )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1493:3: id= ID ( '.' ident= identifier )* ( '[' loc= ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dotted_name4337); if (failed) return name;
+            match(input,ID,FOLLOW_ID_in_dotted_name4457); if (failed) return name;
             if ( backtracking==0 ) {
                
               		    name=id.getText(); 
@@ -5815,23 +6105,23 @@
               		    }
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1439:3: ( '.' ident= identifier )*
-            loop60:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1501:3: ( '.' ident= identifier )*
+            loop61:
             do {
-                int alt60=2;
-                int LA60_0 = input.LA(1);
+                int alt61=2;
+                int LA61_0 = input.LA(1);
 
-                if ( (LA60_0==69) ) {
-                    alt60=1;
+                if ( (LA61_0==71) ) {
+                    alt61=1;
                 }
 
 
-                switch (alt60) {
+                switch (alt61) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1439:5: '.' ident= identifier
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1501:5: '.' ident= identifier
             	    {
-            	    match(input,69,FOLLOW_69_in_dotted_name4349); if (failed) return name;
-            	    pushFollow(FOLLOW_identifier_in_dotted_name4353);
+            	    match(input,71,FOLLOW_71_in_dotted_name4469); if (failed) return name;
+            	    pushFollow(FOLLOW_identifier_in_dotted_name4473);
             	    ident=identifier();
             	    _fsp--;
             	    if (failed) return name;
@@ -5848,28 +6138,28 @@
             	    break;
 
             	default :
-            	    break loop60;
+            	    break loop61;
                 }
             } while (true);
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1447:3: ( '[' loc= ']' )*
-            loop61:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1509:3: ( '[' loc= ']' )*
+            loop62:
             do {
-                int alt61=2;
-                int LA61_0 = input.LA(1);
+                int alt62=2;
+                int LA62_0 = input.LA(1);
 
-                if ( (LA61_0==LEFT_SQUARE) ) {
-                    alt61=1;
+                if ( (LA62_0==LEFT_SQUARE) ) {
+                    alt62=1;
                 }
 
 
-                switch (alt61) {
+                switch (alt62) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1447:5: '[' loc= ']'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1509:5: '[' loc= ']'
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dotted_name4375); if (failed) return name;
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dotted_name4495); if (failed) return name;
             	    loc=(Token)input.LT(1);
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dotted_name4379); if (failed) return name;
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dotted_name4499); if (failed) return name;
             	    if ( backtracking==0 ) {
             	       
             	      		        name = name + "[]";
@@ -5883,7 +6173,7 @@
             	    break;
 
             	default :
-            	    break loop61;
+            	    break loop62;
                 }
             } while (true);
 
@@ -5903,7 +6193,7 @@
 
 
     // $ANTLR start argument
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1457:1: argument returns [String name] : id= identifier ( '[' ']' )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1519:1: argument returns [String name] : id= identifier ( '[' ']' )* ;
     public final String argument() throws RecognitionException {
         String name = null;
 
@@ -5914,33 +6204,33 @@
         		name = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1462:3: (id= identifier ( '[' ']' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1462:3: id= identifier ( '[' ']' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1524:3: (id= identifier ( '[' ']' )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1524:3: id= identifier ( '[' ']' )*
             {
-            pushFollow(FOLLOW_identifier_in_argument4418);
+            pushFollow(FOLLOW_identifier_in_argument4538);
             id=identifier();
             _fsp--;
             if (failed) return name;
             if ( backtracking==0 ) {
                name=id.getText(); 
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1462:40: ( '[' ']' )*
-            loop62:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1524:40: ( '[' ']' )*
+            loop63:
             do {
-                int alt62=2;
-                int LA62_0 = input.LA(1);
+                int alt63=2;
+                int LA63_0 = input.LA(1);
 
-                if ( (LA62_0==LEFT_SQUARE) ) {
-                    alt62=1;
+                if ( (LA63_0==LEFT_SQUARE) ) {
+                    alt63=1;
                 }
 
 
-                switch (alt62) {
+                switch (alt63) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1462:42: '[' ']'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1524:42: '[' ']'
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_argument4424); if (failed) return name;
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_argument4426); if (failed) return name;
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_argument4544); if (failed) return name;
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_argument4546); if (failed) return name;
             	    if ( backtracking==0 ) {
             	       name = name + "[]";
             	    }
@@ -5949,7 +6239,7 @@
             	    break;
 
             	default :
-            	    break loop62;
+            	    break loop63;
                 }
             } while (true);
 
@@ -5969,7 +6259,7 @@
 
 
     // $ANTLR start rhs_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1465:1: rhs_chunk[RuleDescr rule] : start= THEN (~ END )* loc= END ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1527:1: rhs_chunk[RuleDescr rule] : start= THEN (~ END )* loc= END ;
     public final void rhs_chunk(RuleDescr rule) throws RecognitionException {
         Token start=null;
         Token loc=null;
@@ -5979,8 +6269,8 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1471:10: (start= THEN (~ END )* loc= END )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1471:10: start= THEN (~ END )* loc= END
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:10: (start= THEN (~ END )* loc= END )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:10: start= THEN (~ END )* loc= END
             {
             if ( backtracking==0 ) {
 
@@ -5990,23 +6280,23 @@
               	        
             }
             start=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk4470); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1477:3: (~ END )*
-            loop63:
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk4590); if (failed) return ;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1539:3: (~ END )*
+            loop64:
             do {
-                int alt63=2;
-                int LA63_0 = input.LA(1);
+                int alt64=2;
+                int LA64_0 = input.LA(1);
 
-                if ( ((LA63_0>=ATTRIBUTES && LA63_0<=QUERY)||(LA63_0>=TEMPLATE && LA63_0<=81)) ) {
-                    alt63=1;
+                if ( ((LA64_0>=ATTRIBUTES && LA64_0<=QUERY)||(LA64_0>=TEMPLATE && LA64_0<=79)) ) {
+                    alt64=1;
                 }
 
 
-                switch (alt63) {
+                switch (alt64) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1478:6: ~ END
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1540:6: ~ END
             	    {
-            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=QUERY)||(input.LA(1)>=TEMPLATE && input.LA(1)<=81) ) {
+            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=QUERY)||(input.LA(1)>=TEMPLATE && input.LA(1)<=79) ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -6014,7 +6304,7 @@
             	        if (backtracking>0) {failed=true; return ;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk4482);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk4602);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -6027,7 +6317,7 @@
             	    break;
 
             	default :
-            	    break loop63;
+            	    break loop64;
                 }
             } while (true);
 
@@ -6041,7 +6331,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk4519); if (failed) return ;
+            match(input,END,FOLLOW_END_in_rhs_chunk4639); if (failed) return ;
             if ( backtracking==0 ) {
 
                                   // ignoring first line in the consequence
@@ -6075,7 +6365,7 @@
 
 
     // $ANTLR start name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1508:1: name returns [String s] : (tok= ID | str= STRING ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1570:1: name returns [String s] : (tok= ID | str= STRING ) ;
     public final String name() throws RecognitionException {
         String s = null;
 
@@ -6083,32 +6373,32 @@
         Token str=null;
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:2: ( (tok= ID | str= STRING ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:2: (tok= ID | str= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:2: ( (tok= ID | str= STRING ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:2: (tok= ID | str= STRING )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1510:2: (tok= ID | str= STRING )
-            int alt64=2;
-            int LA64_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:2: (tok= ID | str= STRING )
+            int alt65=2;
+            int LA65_0 = input.LA(1);
 
-            if ( (LA64_0==ID) ) {
-                alt64=1;
+            if ( (LA65_0==ID) ) {
+                alt65=1;
             }
-            else if ( (LA64_0==STRING) ) {
-                alt64=2;
+            else if ( (LA65_0==STRING) ) {
+                alt65=2;
             }
             else {
                 if (backtracking>0) {failed=true; return s;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1510:2: (tok= ID | str= STRING )", 64, 0, input);
+                    new NoViableAltException("1572:2: (tok= ID | str= STRING )", 65, 0, input);
 
                 throw nvae;
             }
-            switch (alt64) {
+            switch (alt65) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1511:6: tok= ID
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1573:6: tok= ID
                     {
                     tok=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_name4563); if (failed) return s;
+                    match(input,ID,FOLLOW_ID_in_name4683); if (failed) return s;
                     if ( backtracking==0 ) {
 
                       	        s = tok.getText();
@@ -6118,10 +6408,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1516:6: str= STRING
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1578:6: str= STRING
                     {
                     str=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_name4582); if (failed) return s;
+                    match(input,STRING,FOLLOW_STRING_in_name4702); if (failed) return s;
                     if ( backtracking==0 ) {
 
                       	       s = getString( str );
@@ -6149,454 +6439,454 @@
 
 
     // $ANTLR start identifier
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1523:1: identifier returns [Token tok] : (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1585:1: identifier returns [Token tok] : (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN ) ;
     public final Token identifier() throws RecognitionException {
         Token tok = null;
 
         Token t=null;
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:2: ( (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:2: ( (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )
-            int alt65=33;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )
+            int alt66=33;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                alt65=1;
+                alt66=1;
                 }
                 break;
             case PACKAGE:
                 {
-                alt65=2;
+                alt66=2;
                 }
                 break;
             case FUNCTION:
                 {
-                alt65=3;
+                alt66=3;
                 }
                 break;
             case GLOBAL:
                 {
-                alt65=4;
+                alt66=4;
                 }
                 break;
             case IMPORT:
                 {
-                alt65=5;
+                alt66=5;
                 }
                 break;
             case RULE:
                 {
-                alt65=6;
+                alt66=6;
                 }
                 break;
             case QUERY:
                 {
-                alt65=7;
+                alt66=7;
                 }
                 break;
             case TEMPLATE:
                 {
-                alt65=8;
+                alt66=8;
                 }
                 break;
             case ATTRIBUTES:
                 {
-                alt65=9;
+                alt66=9;
                 }
                 break;
             case ENABLED:
                 {
-                alt65=10;
+                alt66=10;
                 }
                 break;
             case SALIENCE:
                 {
-                alt65=11;
+                alt66=11;
                 }
                 break;
             case DURATION:
                 {
-                alt65=12;
+                alt66=12;
                 }
                 break;
             case FROM:
                 {
-                alt65=13;
+                alt66=13;
                 }
                 break;
             case ACCUMULATE:
                 {
-                alt65=14;
+                alt66=14;
                 }
                 break;
             case INIT:
                 {
-                alt65=15;
+                alt66=15;
                 }
                 break;
             case ACTION:
                 {
-                alt65=16;
+                alt66=16;
                 }
                 break;
             case RESULT:
                 {
-                alt65=17;
+                alt66=17;
                 }
                 break;
             case COLLECT:
                 {
-                alt65=18;
+                alt66=18;
                 }
                 break;
             case OR:
                 {
-                alt65=19;
+                alt66=19;
                 }
                 break;
             case AND:
                 {
-                alt65=20;
+                alt66=20;
                 }
                 break;
             case CONTAINS:
                 {
-                alt65=21;
+                alt66=21;
                 }
                 break;
             case EXCLUDES:
                 {
-                alt65=22;
+                alt66=22;
                 }
                 break;
             case MEMBEROF:
                 {
-                alt65=23;
+                alt66=23;
                 }
                 break;
             case MATCHES:
                 {
-                alt65=24;
+                alt66=24;
                 }
                 break;
             case NULL:
                 {
-                alt65=25;
+                alt66=25;
                 }
                 break;
             case EXISTS:
                 {
-                alt65=26;
+                alt66=26;
                 }
                 break;
             case NOT:
                 {
-                alt65=27;
+                alt66=27;
                 }
                 break;
             case EVAL:
                 {
-                alt65=28;
+                alt66=28;
                 }
                 break;
             case FORALL:
                 {
-                alt65=29;
+                alt66=29;
                 }
                 break;
             case WHEN:
                 {
-                alt65=30;
+                alt66=30;
                 }
                 break;
             case THEN:
                 {
-                alt65=31;
+                alt66=31;
                 }
                 break;
             case END:
                 {
-                alt65=32;
+                alt66=32;
                 }
                 break;
             case IN:
                 {
-                alt65=33;
+                alt66=33;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return tok;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1525:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )", 65, 0, input);
+                    new NoViableAltException("1587:2: (t= ID | t= PACKAGE | t= FUNCTION | t= GLOBAL | t= IMPORT | t= RULE | t= QUERY | t= TEMPLATE | t= ATTRIBUTES | t= ENABLED | t= SALIENCE | t= DURATION | t= FROM | t= ACCUMULATE | t= INIT | t= ACTION | t= RESULT | t= COLLECT | t= OR | t= AND | t= CONTAINS | t= EXCLUDES | t= MEMBEROF | t= MATCHES | t= NULL | t= EXISTS | t= NOT | t= EVAL | t= FORALL | t= WHEN | t= THEN | t= END | t= IN )", 66, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt65) {
+            switch (alt66) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:10: t= ID
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:10: t= ID
                     {
                     t=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_identifier4620); if (failed) return tok;
+                    match(input,ID,FOLLOW_ID_in_identifier4740); if (failed) return tok;
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1526:4: t= PACKAGE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1588:4: t= PACKAGE
                     {
                     t=(Token)input.LT(1);
-                    match(input,PACKAGE,FOLLOW_PACKAGE_in_identifier4633); if (failed) return tok;
+                    match(input,PACKAGE,FOLLOW_PACKAGE_in_identifier4753); if (failed) return tok;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1527:4: t= FUNCTION
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:4: t= FUNCTION
                     {
                     t=(Token)input.LT(1);
-                    match(input,FUNCTION,FOLLOW_FUNCTION_in_identifier4640); if (failed) return tok;
+                    match(input,FUNCTION,FOLLOW_FUNCTION_in_identifier4760); if (failed) return tok;
 
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1528:4: t= GLOBAL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1590:4: t= GLOBAL
                     {
                     t=(Token)input.LT(1);
-                    match(input,GLOBAL,FOLLOW_GLOBAL_in_identifier4647); if (failed) return tok;
+                    match(input,GLOBAL,FOLLOW_GLOBAL_in_identifier4767); if (failed) return tok;
 
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:4: t= IMPORT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1591:4: t= IMPORT
                     {
                     t=(Token)input.LT(1);
-                    match(input,IMPORT,FOLLOW_IMPORT_in_identifier4654); if (failed) return tok;
+                    match(input,IMPORT,FOLLOW_IMPORT_in_identifier4774); if (failed) return tok;
 
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1530:4: t= RULE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1592:4: t= RULE
                     {
                     t=(Token)input.LT(1);
-                    match(input,RULE,FOLLOW_RULE_in_identifier4663); if (failed) return tok;
+                    match(input,RULE,FOLLOW_RULE_in_identifier4783); if (failed) return tok;
 
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1531:4: t= QUERY
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1593:4: t= QUERY
                     {
                     t=(Token)input.LT(1);
-                    match(input,QUERY,FOLLOW_QUERY_in_identifier4670); if (failed) return tok;
+                    match(input,QUERY,FOLLOW_QUERY_in_identifier4790); if (failed) return tok;
 
                     }
                     break;
                 case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1532:17: t= TEMPLATE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1594:17: t= TEMPLATE
                     {
                     t=(Token)input.LT(1);
-                    match(input,TEMPLATE,FOLLOW_TEMPLATE_in_identifier4691); if (failed) return tok;
+                    match(input,TEMPLATE,FOLLOW_TEMPLATE_in_identifier4811); if (failed) return tok;
 
                     }
                     break;
                 case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:17: t= ATTRIBUTES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1595:17: t= ATTRIBUTES
                     {
                     t=(Token)input.LT(1);
-                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_identifier4719); if (failed) return tok;
+                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_identifier4839); if (failed) return tok;
 
                     }
                     break;
                 case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1534:17: t= ENABLED
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:17: t= ENABLED
                     {
                     t=(Token)input.LT(1);
-                    match(input,ENABLED,FOLLOW_ENABLED_in_identifier4745); if (failed) return tok;
+                    match(input,ENABLED,FOLLOW_ENABLED_in_identifier4865); if (failed) return tok;
 
                     }
                     break;
                 case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1535:17: t= SALIENCE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1597:17: t= SALIENCE
                     {
                     t=(Token)input.LT(1);
-                    match(input,SALIENCE,FOLLOW_SALIENCE_in_identifier4774); if (failed) return tok;
+                    match(input,SALIENCE,FOLLOW_SALIENCE_in_identifier4894); if (failed) return tok;
 
                     }
                     break;
                 case 12 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1536:17: t= DURATION
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1598:17: t= DURATION
                     {
                     t=(Token)input.LT(1);
-                    match(input,DURATION,FOLLOW_DURATION_in_identifier4796); if (failed) return tok;
+                    match(input,DURATION,FOLLOW_DURATION_in_identifier4916); if (failed) return tok;
 
                     }
                     break;
                 case 13 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1537:17: t= FROM
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1599:17: t= FROM
                     {
                     t=(Token)input.LT(1);
-                    match(input,FROM,FOLLOW_FROM_in_identifier4818); if (failed) return tok;
+                    match(input,FROM,FOLLOW_FROM_in_identifier4938); if (failed) return tok;
 
                     }
                     break;
                 case 14 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1538:17: t= ACCUMULATE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1600:17: t= ACCUMULATE
                     {
                     t=(Token)input.LT(1);
-                    match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_identifier4847); if (failed) return tok;
+                    match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_identifier4967); if (failed) return tok;
 
                     }
                     break;
                 case 15 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1539:17: t= INIT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1601:17: t= INIT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INIT,FOLLOW_INIT_in_identifier4869); if (failed) return tok;
+                    match(input,INIT,FOLLOW_INIT_in_identifier4989); if (failed) return tok;
 
                     }
                     break;
                 case 16 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1540:17: t= ACTION
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1602:17: t= ACTION
                     {
                     t=(Token)input.LT(1);
-                    match(input,ACTION,FOLLOW_ACTION_in_identifier4898); if (failed) return tok;
+                    match(input,ACTION,FOLLOW_ACTION_in_identifier5018); if (failed) return tok;
 
                     }
                     break;
                 case 17 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1541:17: t= RESULT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:17: t= RESULT
                     {
                     t=(Token)input.LT(1);
-                    match(input,RESULT,FOLLOW_RESULT_in_identifier4927); if (failed) return tok;
+                    match(input,RESULT,FOLLOW_RESULT_in_identifier5047); if (failed) return tok;
 
                     }
                     break;
                 case 18 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1542:17: t= COLLECT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1604:17: t= COLLECT
                     {
                     t=(Token)input.LT(1);
-                    match(input,COLLECT,FOLLOW_COLLECT_in_identifier4956); if (failed) return tok;
+                    match(input,COLLECT,FOLLOW_COLLECT_in_identifier5076); if (failed) return tok;
 
                     }
                     break;
                 case 19 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1543:17: t= OR
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:17: t= OR
                     {
                     t=(Token)input.LT(1);
-                    match(input,OR,FOLLOW_OR_in_identifier4985); if (failed) return tok;
+                    match(input,OR,FOLLOW_OR_in_identifier5105); if (failed) return tok;
 
                     }
                     break;
                 case 20 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1544:17: t= AND
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1606:17: t= AND
                     {
                     t=(Token)input.LT(1);
-                    match(input,AND,FOLLOW_AND_in_identifier5014); if (failed) return tok;
+                    match(input,AND,FOLLOW_AND_in_identifier5134); if (failed) return tok;
 
                     }
                     break;
                 case 21 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1545:17: t= CONTAINS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:17: t= CONTAINS
                     {
                     t=(Token)input.LT(1);
-                    match(input,CONTAINS,FOLLOW_CONTAINS_in_identifier5043); if (failed) return tok;
+                    match(input,CONTAINS,FOLLOW_CONTAINS_in_identifier5163); if (failed) return tok;
 
                     }
                     break;
                 case 22 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1546:17: t= EXCLUDES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1608:17: t= EXCLUDES
                     {
                     t=(Token)input.LT(1);
-                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_identifier5065); if (failed) return tok;
+                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_identifier5185); if (failed) return tok;
 
                     }
                     break;
                 case 23 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1547:17: t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1609:17: t= MEMBEROF
                     {
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_identifier5087); if (failed) return tok;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_identifier5207); if (failed) return tok;
 
                     }
                     break;
                 case 24 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1548:17: t= MATCHES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1610:17: t= MATCHES
                     {
                     t=(Token)input.LT(1);
-                    match(input,MATCHES,FOLLOW_MATCHES_in_identifier5107); if (failed) return tok;
+                    match(input,MATCHES,FOLLOW_MATCHES_in_identifier5227); if (failed) return tok;
 
                     }
                     break;
                 case 25 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1549:17: t= NULL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1611:17: t= NULL
                     {
                     t=(Token)input.LT(1);
-                    match(input,NULL,FOLLOW_NULL_in_identifier5136); if (failed) return tok;
+                    match(input,NULL,FOLLOW_NULL_in_identifier5256); if (failed) return tok;
 
                     }
                     break;
                 case 26 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1550:17: t= EXISTS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:17: t= EXISTS
                     {
                     t=(Token)input.LT(1);
-                    match(input,EXISTS,FOLLOW_EXISTS_in_identifier5165); if (failed) return tok;
+                    match(input,EXISTS,FOLLOW_EXISTS_in_identifier5285); if (failed) return tok;
 
                     }
                     break;
                 case 27 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1551:17: t= NOT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1613:17: t= NOT
                     {
                     t=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_identifier5194); if (failed) return tok;
+                    match(input,NOT,FOLLOW_NOT_in_identifier5314); if (failed) return tok;
 
                     }
                     break;
                 case 28 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1552:17: t= EVAL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1614:17: t= EVAL
                     {
                     t=(Token)input.LT(1);
-                    match(input,EVAL,FOLLOW_EVAL_in_identifier5223); if (failed) return tok;
+                    match(input,EVAL,FOLLOW_EVAL_in_identifier5343); if (failed) return tok;
 
                     }
                     break;
                 case 29 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1553:17: t= FORALL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1615:17: t= FORALL
                     {
                     t=(Token)input.LT(1);
-                    match(input,FORALL,FOLLOW_FORALL_in_identifier5252); if (failed) return tok;
+                    match(input,FORALL,FOLLOW_FORALL_in_identifier5372); if (failed) return tok;
 
                     }
                     break;
                 case 30 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1554:17: t= WHEN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1616:17: t= WHEN
                     {
                     t=(Token)input.LT(1);
-                    match(input,WHEN,FOLLOW_WHEN_in_identifier5290); if (failed) return tok;
+                    match(input,WHEN,FOLLOW_WHEN_in_identifier5410); if (failed) return tok;
 
                     }
                     break;
                 case 31 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1555:17: t= THEN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1617:17: t= THEN
                     {
                     t=(Token)input.LT(1);
-                    match(input,THEN,FOLLOW_THEN_in_identifier5322); if (failed) return tok;
+                    match(input,THEN,FOLLOW_THEN_in_identifier5442); if (failed) return tok;
 
                     }
                     break;
                 case 32 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1556:17: t= END
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:17: t= END
                     {
                     t=(Token)input.LT(1);
-                    match(input,END,FOLLOW_END_in_identifier5351); if (failed) return tok;
+                    match(input,END,FOLLOW_END_in_identifier5471); if (failed) return tok;
 
                     }
                     break;
                 case 33 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1557:11: t= IN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1619:11: t= IN
                     {
                     t=(Token)input.LT(1);
-                    match(input,IN,FOLLOW_IN_in_identifier5370); if (failed) return tok;
+                    match(input,IN,FOLLOW_IN_in_identifier5490); if (failed) return tok;
 
                     }
                     break;
@@ -6624,8 +6914,8 @@
 
     // $ANTLR start synpred7
     public final void synpred7_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:195:4: ( function_import_statement )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:195:4: function_import_statement
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:4: ( function_import_statement )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:199:4: function_import_statement
         {
         pushFollow(FOLLOW_function_import_statement_in_synpred7150);
         function_import_statement();
@@ -6638,8 +6928,8 @@
 
     // $ANTLR start synpred8
     public final void synpred8_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:196:4: ( import_statement )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:196:4: import_statement
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:200:4: ( import_statement )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:200:4: import_statement
         {
         pushFollow(FOLLOW_import_statement_in_synpred8156);
         import_statement();
@@ -6652,8 +6942,8 @@
 
     // $ANTLR start synpred42
     public final void synpred42_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:4: ( paren_chunk[from] )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:4: paren_chunk[from]
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:4: ( paren_chunk[from] )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:4: paren_chunk[from]
         {
         pushFollow(FOLLOW_paren_chunk_in_synpred421876);
         paren_chunk(from);
@@ -6666,8 +6956,8 @@
 
     // $ANTLR start synpred44
     public final void synpred44_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:6: ( LEFT_SQUARE )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:8: LEFT_SQUARE
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:6: ( LEFT_SQUARE )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:8: LEFT_SQUARE
         {
         match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred441942); if (failed) return ;
 
@@ -6677,8 +6967,8 @@
 
     // $ANTLR start synpred45
     public final void synpred45_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:777:6: ( LEFT_PAREN )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:777:8: LEFT_PAREN
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:6: ( LEFT_PAREN )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:8: LEFT_PAREN
         {
         match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred451976); if (failed) return ;
 
@@ -6688,10 +6978,10 @@
 
     // $ANTLR start synpred49
     public final void synpred49_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874:6: ( ( OR | '||' ) fact )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874:6: ( OR | '||' ) fact
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:6: ( ( OR | DOUBLE_PIPE ) fact )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:6: ( OR | DOUBLE_PIPE ) fact
         {
-        if ( input.LA(1)==OR||input.LA(1)==71 ) {
+        if ( (input.LA(1)>=OR && input.LA(1)<=DOUBLE_PIPE) ) {
             input.consume();
             errorRecovery=false;failed=false;
         }
@@ -6711,34 +7001,78 @@
     }
     // $ANTLR end synpred49
 
-    // $ANTLR start synpred97
-    public final void synpred97_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1325:14: ( ACCUMULATE )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1325:16: ACCUMULATE
+    // $ANTLR start synpred54
+    public final void synpred54_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:5: ( field_constraint[base] )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:5: field_constraint[base]
         {
-        match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_synpred973777); if (failed) return ;
+        pushFollow(FOLLOW_field_constraint_in_synpred542554);
+        field_constraint(base);
+        _fsp--;
+        if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred97
+    // $ANTLR end synpred54
 
-    // $ANTLR start synpred98
-    public final void synpred98_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1326:14: ( COLLECT )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1326:16: COLLECT
+    // $ANTLR start synpred59
+    public final void synpred59_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:30: ( DOUBLE_PIPE and_restr_connective[or] )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:30: DOUBLE_PIPE and_restr_connective[or]
         {
-        match(input,COLLECT,FOLLOW_COLLECT_in_synpred983806); if (failed) return ;
+        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred592694); if (failed) return ;
+        pushFollow(FOLLOW_and_restr_connective_in_synpred592696);
+        and_restr_connective(or);
+        _fsp--;
+        if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred98
+    // $ANTLR end synpred59
 
+    // $ANTLR start synpred60
+    public final void synpred60_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:32: ( DOUBLE_AMPER constraint_expression[and] )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049:32: DOUBLE_AMPER constraint_expression[and]
+        {
+        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred602734); if (failed) return ;
+        pushFollow(FOLLOW_constraint_expression_in_synpred602736);
+        constraint_expression(and);
+        _fsp--;
+        if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred60
+
+    // $ANTLR start synpred99
+    public final void synpred99_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:14: ( ACCUMULATE )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1387:16: ACCUMULATE
+        {
+        match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_synpred993897); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred99
+
     // $ANTLR start synpred100
     public final void synpred100_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1327:14: (~ ( ACCUMULATE | COLLECT ) )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1327:16: ~ ( ACCUMULATE | COLLECT )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:14: ( COLLECT )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:16: COLLECT
         {
-        if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=LOCK_ON_ACTIVE)||(input.LA(1)>=INIT && input.LA(1)<=RESULT)||(input.LA(1)>=ID && input.LA(1)<=81) ) {
+        match(input,COLLECT,FOLLOW_COLLECT_in_synpred1003926); if (failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred100
+
+    // $ANTLR start synpred102
+    public final void synpred102_fragment() throws RecognitionException {   
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:14: (~ ( ACCUMULATE | COLLECT ) )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1389:16: ~ ( ACCUMULATE | COLLECT )
+        {
+        if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=LOCK_ON_ACTIVE)||(input.LA(1)>=INIT && input.LA(1)<=RESULT)||(input.LA(1)>=ID && input.LA(1)<=79) ) {
             input.consume();
             errorRecovery=false;failed=false;
         }
@@ -6746,13 +7080,13 @@
             if (backtracking>0) {failed=true; return ;}
             MismatchedSetException mse =
                 new MismatchedSetException(null,input);
-            recoverFromMismatchedSet(input,mse,FOLLOW_set_in_synpred1003836);    throw mse;
+            recoverFromMismatchedSet(input,mse,FOLLOW_set_in_synpred1023956);    throw mse;
         }
 
 
         }
     }
-    // $ANTLR end synpred100
+    // $ANTLR end synpred102
 
     public final boolean synpred44() {
         backtracking++;
@@ -6782,11 +7116,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred98() {
+    public final boolean synpred7() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred98_fragment(); // can never throw exception
+            synpred7_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -6796,11 +7130,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred7() {
+    public final boolean synpred100() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred7_fragment(); // can never throw exception
+            synpred100_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -6810,11 +7144,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred100() {
+    public final boolean synpred99() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred100_fragment(); // can never throw exception
+            synpred99_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -6838,11 +7172,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred97() {
+    public final boolean synpred59() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred97_fragment(); // can never throw exception
+            synpred59_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -6852,6 +7186,48 @@
         failed=false;
         return success;
     }
+    public final boolean synpred54() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred54_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred102() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred102_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
+    public final boolean synpred60() {
+        backtracking++;
+        int start = input.mark();
+        try {
+            synpred60_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !failed;
+        input.rewind(start);
+        backtracking--;
+        failed=false;
+        return success;
+    }
     public final boolean synpred8() {
         backtracking++;
         int start = input.mark();
@@ -6889,24 +7265,24 @@
     static final String DFA11_eofS =
         "\6\uffff";
     static final String DFA11_minS =
-        "\2\4\1\uffff\1\62\1\uffff\1\4";
+        "\2\4\1\uffff\1\65\1\uffff\1\4";
     static final String DFA11_maxS =
-        "\1\70\1\105\1\uffff\1\62\1\uffff\1\70";
+        "\1\72\1\107\1\uffff\1\65\1\uffff\1\72";
     static final String DFA11_acceptS =
         "\2\uffff\1\2\1\uffff\1\1\1\uffff";
     static final String DFA11_specialS =
         "\6\uffff}>";
     static final String[] DFA11_transitionS = {
-            "\12\2\3\uffff\1\2\1\uffff\1\2\6\uffff\1\2\2\uffff\5\2\1\1\1"+
-            "\2\2\uffff\6\2\2\uffff\1\2\4\uffff\6\2",
-            "\12\4\3\uffff\1\4\1\uffff\1\4\6\uffff\1\4\2\uffff\7\4\1\uffff"+
-            "\1\2\6\4\1\2\1\uffff\1\4\2\uffff\1\3\1\uffff\6\4\14\uffff\1"+
-            "\4",
+            "\12\2\3\uffff\1\2\1\uffff\1\2\6\uffff\1\2\2\uffff\5\2\1\1\2"+
+            "\uffff\1\2\2\uffff\7\2\2\uffff\1\2\4\uffff\5\2",
+            "\12\4\3\uffff\1\4\1\uffff\1\4\6\uffff\1\4\2\uffff\6\4\1\uffff"+
+            "\1\2\1\4\2\uffff\7\4\1\2\1\uffff\1\4\2\uffff\1\3\1\uffff\5\4"+
+            "\14\uffff\1\4",
             "",
             "\1\5",
             "",
-            "\12\4\3\uffff\1\4\1\uffff\1\4\6\uffff\1\4\2\uffff\7\4\1\uffff"+
-            "\1\2\6\4\1\2\1\uffff\1\4\2\uffff\1\3\1\uffff\6\4"
+            "\12\4\3\uffff\1\4\1\uffff\1\4\6\uffff\1\4\2\uffff\6\4\1\uffff"+
+            "\1\2\1\4\2\uffff\7\4\1\2\1\uffff\1\4\2\uffff\1\3\1\uffff\5\4"
     };
 
     static final short[] DFA11_eot = DFA.unpackEncodedString(DFA11_eotS);
@@ -6939,7 +7315,7 @@
             this.transition = DFA11_transition;
         }
         public String getDescription() {
-            return "313:6: (paramType= dotted_name[null] )?";
+            return "317:6: (paramType= dotted_name[null] )?";
         }
     }
     static final String DFA12_eotS =
@@ -6947,24 +7323,24 @@
     static final String DFA12_eofS =
         "\6\uffff";
     static final String DFA12_minS =
-        "\2\4\1\uffff\1\62\1\uffff\1\4";
+        "\2\4\2\uffff\1\65\1\4";
     static final String DFA12_maxS =
-        "\1\70\1\105\1\uffff\1\62\1\uffff\1\70";
+        "\1\72\1\107\2\uffff\1\65\1\72";
     static final String DFA12_acceptS =
-        "\2\uffff\1\2\1\uffff\1\1\1\uffff";
+        "\2\uffff\1\2\1\1\2\uffff";
     static final String DFA12_specialS =
         "\6\uffff}>";
     static final String[] DFA12_transitionS = {
-            "\12\2\3\uffff\1\2\1\uffff\1\2\6\uffff\1\2\2\uffff\5\2\1\1\1"+
-            "\2\2\uffff\6\2\2\uffff\1\2\4\uffff\6\2",
-            "\12\4\3\uffff\1\4\1\uffff\1\4\6\uffff\1\4\2\uffff\7\4\1\uffff"+
-            "\1\2\6\4\1\2\1\uffff\1\4\2\uffff\1\3\1\uffff\6\4\14\uffff\1"+
-            "\4",
+            "\12\2\3\uffff\1\2\1\uffff\1\2\6\uffff\1\2\2\uffff\5\2\1\1\2"+
+            "\uffff\1\2\2\uffff\7\2\2\uffff\1\2\4\uffff\5\2",
+            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\6\3\1\uffff"+
+            "\1\2\1\3\2\uffff\7\3\1\2\1\uffff\1\3\2\uffff\1\4\1\uffff\5\3"+
+            "\14\uffff\1\3",
             "",
+            "",
             "\1\5",
-            "",
-            "\12\4\3\uffff\1\4\1\uffff\1\4\6\uffff\1\4\2\uffff\7\4\1\uffff"+
-            "\1\2\6\4\1\2\1\uffff\1\4\2\uffff\1\3\1\uffff\6\4"
+            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\6\3\1\uffff"+
+            "\1\2\1\3\2\uffff\7\3\1\2\1\uffff\1\3\2\uffff\1\4\1\uffff\5\3"
     };
 
     static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
@@ -6997,19 +7373,19 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "317:11: (paramType= dotted_name[null] )?";
+            return "321:11: (paramType= dotted_name[null] )?";
         }
     }
  
 
-    public static final BitSet FOLLOW_67_in_opt_semicolon46 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_69_in_opt_semicolon46 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_prolog_in_compilation_unit58 = new BitSet(new long[]{0x0000000000001BC0L});
     public static final BitSet FOLLOW_statement_in_compilation_unit65 = new BitSet(new long[]{0x0000000000001BC2L});
-    public static final BitSet FOLLOW_package_statement_in_prolog90 = new BitSet(new long[]{0x000010001FEB4012L});
-    public static final BitSet FOLLOW_ATTRIBUTES_in_prolog105 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
-    public static final BitSet FOLLOW_68_in_prolog107 = new BitSet(new long[]{0x000010001FEB4002L});
+    public static final BitSet FOLLOW_package_statement_in_prolog90 = new BitSet(new long[]{0x000080001FEB4012L});
+    public static final BitSet FOLLOW_ATTRIBUTES_in_prolog105 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_70_in_prolog107 = new BitSet(new long[]{0x000080001FEB4002L});
     public static final BitSet FOLLOW_COMMA_in_prolog116 = new BitSet(new long[]{0x000000001FEB4000L});
-    public static final BitSet FOLLOW_rule_attribute_in_prolog121 = new BitSet(new long[]{0x000010001FEB4002L});
+    public static final BitSet FOLLOW_rule_attribute_in_prolog121 = new BitSet(new long[]{0x000080001FEB4002L});
     public static final BitSet FOLLOW_function_import_statement_in_statement150 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_import_statement_in_statement156 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_global_in_statement162 = new BitSet(new long[]{0x0000000000000002L});
@@ -7018,58 +7394,58 @@
     public static final BitSet FOLLOW_rule_in_statement191 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_query_in_statement203 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_PACKAGE_in_package_statement232 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_dotted_name_in_package_statement236 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
+    public static final BitSet FOLLOW_dotted_name_in_package_statement236 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
     public static final BitSet FOLLOW_opt_semicolon_in_package_statement239 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IMPORT_in_import_statement271 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_import_name_in_import_statement294 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
+    public static final BitSet FOLLOW_IMPORT_in_import_statement271 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_import_name_in_import_statement294 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
     public static final BitSet FOLLOW_opt_semicolon_in_import_statement297 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_IMPORT_in_function_import_statement323 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_FUNCTION_in_function_import_statement325 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_import_name_in_function_import_statement348 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
+    public static final BitSet FOLLOW_FUNCTION_in_function_import_statement325 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement348 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
     public static final BitSet FOLLOW_opt_semicolon_in_function_import_statement351 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_import_name379 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000060L});
-    public static final BitSet FOLLOW_69_in_import_name391 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_import_name395 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000060L});
-    public static final BitSet FOLLOW_70_in_import_name419 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_import_name379 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000180L});
+    public static final BitSet FOLLOW_71_in_import_name391 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_import_name395 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000180L});
+    public static final BitSet FOLLOW_72_in_import_name419 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_GLOBAL_in_global455 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_dotted_name_in_global466 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_global478 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
+    public static final BitSet FOLLOW_dotted_name_in_global466 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_global478 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
     public static final BitSet FOLLOW_opt_semicolon_in_global480 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_function507 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_dotted_name_in_function512 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_function519 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_function528 = new BitSet(new long[]{0x01F84FEFE40A3FF0L});
-    public static final BitSet FOLLOW_dotted_name_in_function538 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_argument_in_function545 = new BitSet(new long[]{0x0000102000000000L});
-    public static final BitSet FOLLOW_COMMA_in_function559 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_dotted_name_in_function564 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_argument_in_function571 = new BitSet(new long[]{0x0000102000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_function595 = new BitSet(new long[]{0x0000800000000000L});
+    public static final BitSet FOLLOW_FUNCTION_in_function507 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_dotted_name_in_function512 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_function519 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_function528 = new BitSet(new long[]{0x07C27F37E40A3FF0L});
+    public static final BitSet FOLLOW_dotted_name_in_function538 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_argument_in_function545 = new BitSet(new long[]{0x0000801000000000L});
+    public static final BitSet FOLLOW_COMMA_in_function559 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_dotted_name_in_function564 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_argument_in_function571 = new BitSet(new long[]{0x0000801000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_function595 = new BitSet(new long[]{0x0004000000000000L});
     public static final BitSet FOLLOW_curly_chunk_in_function601 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_QUERY_in_query633 = new BitSet(new long[]{0x0000000400008000L});
-    public static final BitSet FOLLOW_name_in_query637 = new BitSet(new long[]{0x00E0041400000400L});
+    public static final BitSet FOLLOW_name_in_query637 = new BitSet(new long[]{0x0300210C00000400L});
     public static final BitSet FOLLOW_normal_lhs_block_in_query650 = new BitSet(new long[]{0x0000000000000400L});
     public static final BitSet FOLLOW_END_in_query667 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_TEMPLATE_in_template697 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_template701 = new BitSet(new long[]{0x0000000400000000L,0x0000000000000008L});
+    public static final BitSet FOLLOW_TEMPLATE_in_template697 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_template701 = new BitSet(new long[]{0x0000000400000000L,0x0000000000000020L});
     public static final BitSet FOLLOW_opt_semicolon_in_template703 = new BitSet(new long[]{0x0000000400000000L});
     public static final BitSet FOLLOW_template_slot_in_template718 = new BitSet(new long[]{0x0000000400000400L});
-    public static final BitSet FOLLOW_END_in_template735 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
+    public static final BitSet FOLLOW_END_in_template735 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
     public static final BitSet FOLLOW_opt_semicolon_in_template737 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dotted_name_in_template_slot783 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_template_slot801 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
+    public static final BitSet FOLLOW_dotted_name_in_template_slot783 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_template_slot801 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
     public static final BitSet FOLLOW_opt_semicolon_in_template_slot803 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_RULE_in_rule836 = new BitSet(new long[]{0x0000000400008000L});
-    public static final BitSet FOLLOW_name_in_rule840 = new BitSet(new long[]{0x010010001FEB6010L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule849 = new BitSet(new long[]{0x0100000000002000L});
-    public static final BitSet FOLLOW_WHEN_in_rule858 = new BitSet(new long[]{0x01E0041400000000L,0x0000000000000010L});
-    public static final BitSet FOLLOW_68_in_rule860 = new BitSet(new long[]{0x01E0041400000000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_rule878 = new BitSet(new long[]{0x0100000000000000L});
+    public static final BitSet FOLLOW_name_in_rule840 = new BitSet(new long[]{0x040080001FEB6010L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule849 = new BitSet(new long[]{0x0400000000002000L});
+    public static final BitSet FOLLOW_WHEN_in_rule858 = new BitSet(new long[]{0x0700210C00000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_70_in_rule860 = new BitSet(new long[]{0x0700210C00000000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_rule878 = new BitSet(new long[]{0x0400000000000000L});
     public static final BitSet FOLLOW_rhs_chunk_in_rule899 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ATTRIBUTES_in_rule_attributes920 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
-    public static final BitSet FOLLOW_68_in_rule_attributes922 = new BitSet(new long[]{0x000010001FEB4002L});
+    public static final BitSet FOLLOW_ATTRIBUTES_in_rule_attributes920 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_70_in_rule_attributes922 = new BitSet(new long[]{0x000080001FEB4002L});
     public static final BitSet FOLLOW_COMMA_in_rule_attributes931 = new BitSet(new long[]{0x000000001FEB4000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes936 = new BitSet(new long[]{0x000010001FEB4002L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes936 = new BitSet(new long[]{0x000080001FEB4002L});
     public static final BitSet FOLLOW_salience_in_rule_attribute977 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_no_loop_in_rule_attribute987 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_agenda_group_in_rule_attribute998 = new BitSet(new long[]{0x0000000000000002L});
@@ -7109,199 +7485,212 @@
     public static final BitSet FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1652 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_LOCK_ON_ACTIVE_in_lock_on_active1680 = new BitSet(new long[]{0x0000000000040000L});
     public static final BitSet FOLLOW_BOOL_in_lock_on_active1684 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1722 = new BitSet(new long[]{0x00E0041400000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1722 = new BitSet(new long[]{0x0300210C00000002L});
     public static final BitSet FOLLOW_lhs_or_in_lhs1759 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_fact_binding_in_lhs_pattern1787 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_fact_in_lhs_pattern1796 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_from_source_in_from_statement1823 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_from_source1865 = new BitSet(new long[]{0x0000001000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source1876 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_identifier_in_from_source1865 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source1876 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
     public static final BitSet FOLLOW_expression_chain_in_from_source1890 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_69_in_expression_chain1915 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_expression_chain1919 = new BitSet(new long[]{0x0002001000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain1950 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain1984 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_71_in_expression_chain1915 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_expression_chain1919 = new BitSet(new long[]{0x0010000800000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain1950 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain1984 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
     public static final BitSet FOLLOW_expression_chain_in_expression_chain2005 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACCUMULATE_in_accumulate_statement2046 = new BitSet(new long[]{0x0000001000000000L});
+    public static final BitSet FOLLOW_ACCUMULATE_in_accumulate_statement2046 = new BitSet(new long[]{0x0000000800000000L});
     public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2056 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_accumulate_statement2060 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_accumulate_statement2060 = new BitSet(new long[]{0x0000800000000000L});
     public static final BitSet FOLLOW_COMMA_in_accumulate_statement2062 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_INIT_in_accumulate_statement2071 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2075 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_INIT_in_accumulate_statement2071 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2075 = new BitSet(new long[]{0x0000800000000000L});
     public static final BitSet FOLLOW_COMMA_in_accumulate_statement2078 = new BitSet(new long[]{0x0000000080000000L});
-    public static final BitSet FOLLOW_ACTION_in_accumulate_statement2087 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2091 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_ACTION_in_accumulate_statement2087 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2091 = new BitSet(new long[]{0x0000800000000000L});
     public static final BitSet FOLLOW_COMMA_in_accumulate_statement2094 = new BitSet(new long[]{0x0000000100000000L});
-    public static final BitSet FOLLOW_RESULT_in_accumulate_statement2103 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2107 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_RESULT_in_accumulate_statement2103 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2107 = new BitSet(new long[]{0x0000001000000000L});
     public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2112 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_collect_statement2155 = new BitSet(new long[]{0x0000001000000000L});
+    public static final BitSet FOLLOW_COLLECT_in_collect_statement2155 = new BitSet(new long[]{0x0000000800000000L});
     public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2165 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_collect_statement2169 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_collect_statement2169 = new BitSet(new long[]{0x0000001000000000L});
     public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2173 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_fact_binding2207 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
-    public static final BitSet FOLLOW_68_in_fact_binding2209 = new BitSet(new long[]{0x0000001400000000L});
+    public static final BitSet FOLLOW_ID_in_fact_binding2207 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_70_in_fact_binding2209 = new BitSet(new long[]{0x0000000C00000000L});
     public static final BitSet FOLLOW_fact_expression_in_fact_binding2222 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_expression2254 = new BitSet(new long[]{0x0000001400000000L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression2258 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_expression2254 = new BitSet(new long[]{0x0000000C00000000L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2258 = new BitSet(new long[]{0x0000001000000000L});
     public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_expression2261 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_expression2272 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_fact_in_fact_expression2272 = new BitSet(new long[]{0x0000006000000002L});
     public static final BitSet FOLLOW_set_in_fact_expression2284 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_fact_in_fact_expression2302 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_dotted_name_in_fact2363 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2377 = new BitSet(new long[]{0x01F84FFFE40A3FF0L});
-    public static final BitSet FOLLOW_constraints_in_fact2387 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_fact_in_fact_expression2302 = new BitSet(new long[]{0x0000006000000002L});
+    public static final BitSet FOLLOW_dotted_name_in_fact2363 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2377 = new BitSet(new long[]{0x07C27F3FE40A3FF0L});
+    public static final BitSet FOLLOW_constraints_in_fact2387 = new BitSet(new long[]{0x0000001000000000L});
     public static final BitSet FOLLOW_RIGHT_PAREN_in_fact2400 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints2421 = new BitSet(new long[]{0x0000100000000002L});
-    public static final BitSet FOLLOW_predicate_in_constraints2424 = new BitSet(new long[]{0x0000100000000002L});
-    public static final BitSet FOLLOW_COMMA_in_constraints2432 = new BitSet(new long[]{0x01F84FDFE40A3FF0L});
-    public static final BitSet FOLLOW_constraint_in_constraints2435 = new BitSet(new long[]{0x0000100000000002L});
-    public static final BitSet FOLLOW_predicate_in_constraints2438 = new BitSet(new long[]{0x0000100000000002L});
-    public static final BitSet FOLLOW_ID_in_constraint2467 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
-    public static final BitSet FOLLOW_68_in_constraint2469 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_constraint2490 = new BitSet(new long[]{0x00000FC000000002L,0x000000000001FC00L});
-    public static final BitSet FOLLOW_constraint_expression_in_constraint2506 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000300L});
-    public static final BitSet FOLLOW_set_in_constraint2528 = new BitSet(new long[]{0x00000FC000000000L,0x000000000001F800L});
-    public static final BitSet FOLLOW_constraint_expression_in_constraint2546 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000300L});
-    public static final BitSet FOLLOW_74_in_constraint2568 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_predicate_in_constraint2570 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression2605 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression2625 = new BitSet(new long[]{0x0000601400148000L});
-    public static final BitSet FOLLOW_expression_value_in_constraint_expression2629 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_75_in_simple_operator2663 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_76_in_simple_operator2671 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_77_in_simple_operator2679 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_78_in_simple_operator2687 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_79_in_simple_operator2695 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_80_in_simple_operator2703 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_CONTAINS_in_simple_operator2711 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MATCHES_in_simple_operator2719 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXCLUDES_in_simple_operator2727 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator2735 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_simple_operator2743 = new BitSet(new long[]{0x0000020000000000L});
-    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator2747 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IN_in_compound_operator2779 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator2790 = new BitSet(new long[]{0x0000601400148000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator2794 = new BitSet(new long[]{0x0000102000000000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator2805 = new BitSet(new long[]{0x0000601400148000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator2809 = new BitSet(new long[]{0x0000102000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator2824 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_compound_operator2839 = new BitSet(new long[]{0x0000080000000000L});
-    public static final BitSet FOLLOW_IN_in_compound_operator2841 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator2852 = new BitSet(new long[]{0x0000601400148000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator2856 = new BitSet(new long[]{0x0000102000000000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator2867 = new BitSet(new long[]{0x0000601400148000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator2871 = new BitSet(new long[]{0x0000102000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator2886 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_expression_value2914 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enum_constraint_in_expression_value2930 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value2953 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_retval_constraint_in_expression_value2967 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_literal_constraint3006 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_literal_constraint3017 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_literal_constraint3030 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_literal_constraint3041 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_literal_constraint3053 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enum_constraint3088 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
-    public static final BitSet FOLLOW_69_in_enum_constraint3094 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_enum_constraint3098 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_paren_chunk_in_predicate3140 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk3189 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_set_in_paren_chunk3205 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk3229 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk3266 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk3317 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_set_in_curly_chunk3333 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk3357 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk3394 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk3457 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_set_in_square_chunk3473 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_square_chunk_in_square_chunk3497 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk3534 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint3579 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or3607 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_set_in_lhs_or3615 = new BitSet(new long[]{0x00E0041400000000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or3626 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000080L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3662 = new BitSet(new long[]{0x0008000000000002L,0x0000000000020000L});
-    public static final BitSet FOLLOW_set_in_lhs_and3670 = new BitSet(new long[]{0x00E0041400000000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3681 = new BitSet(new long[]{0x0008000000000002L,0x0000000000020000L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary3718 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary3726 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary3734 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_unary3742 = new BitSet(new long[]{0x0010000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_FROM_in_lhs_unary3758 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_accumulate_statement_in_lhs_unary3786 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_collect_statement_in_lhs_unary3815 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_from_statement_in_lhs_unary3850 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary3889 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary3897 = new BitSet(new long[]{0x00E0041400000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary3901 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary3903 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_opt_semicolon_in_lhs_unary3913 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXISTS_in_lhs_exist3937 = new BitSet(new long[]{0x0000001400000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist3957 = new BitSet(new long[]{0x00E0041400000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist3961 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist3993 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist4043 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_lhs_not4097 = new BitSet(new long[]{0x0000001400000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not4110 = new BitSet(new long[]{0x00E0041400000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not4114 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not4147 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not4184 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_lhs_eval4232 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval4236 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FORALL_in_lhs_forall4265 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall4267 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall4271 = new BitSet(new long[]{0x0000100400000000L});
-    public static final BitSet FOLLOW_COMMA_in_lhs_forall4285 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall4291 = new BitSet(new long[]{0x0000102400000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall4306 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dotted_name4337 = new BitSet(new long[]{0x0002000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_69_in_dotted_name4349 = new BitSet(new long[]{0x01F84FCFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_dotted_name4353 = new BitSet(new long[]{0x0002000000000002L,0x0000000000000020L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dotted_name4375 = new BitSet(new long[]{0x0004000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dotted_name4379 = new BitSet(new long[]{0x0002000000000002L});
-    public static final BitSet FOLLOW_identifier_in_argument4418 = new BitSet(new long[]{0x0002000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_argument4424 = new BitSet(new long[]{0x0004000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument4426 = new BitSet(new long[]{0x0002000000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk4470 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_set_in_rhs_chunk4482 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000003FFFFL});
-    public static final BitSet FOLLOW_END_in_rhs_chunk4519 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_name4563 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_name4582 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_identifier4620 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_PACKAGE_in_identifier4633 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_identifier4640 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_GLOBAL_in_identifier4647 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IMPORT_in_identifier4654 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_in_identifier4663 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_QUERY_in_identifier4670 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_TEMPLATE_in_identifier4691 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ATTRIBUTES_in_identifier4719 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ENABLED_in_identifier4745 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SALIENCE_in_identifier4774 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DURATION_in_identifier4796 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FROM_in_identifier4818 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACCUMULATE_in_identifier4847 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INIT_in_identifier4869 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACTION_in_identifier4898 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RESULT_in_identifier4927 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_identifier4956 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_OR_in_identifier4985 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_AND_in_identifier5014 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_CONTAINS_in_identifier5043 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXCLUDES_in_identifier5065 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MEMBEROF_in_identifier5087 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MATCHES_in_identifier5107 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_identifier5136 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXISTS_in_identifier5165 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_identifier5194 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_identifier5223 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FORALL_in_identifier5252 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_WHEN_in_identifier5290 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_THEN_in_identifier5322 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_END_in_identifier5351 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IN_in_identifier5370 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints2420 = new BitSet(new long[]{0x0000800000000002L});
+    public static final BitSet FOLLOW_COMMA_in_constraints2427 = new BitSet(new long[]{0x07C27F2FE40A3FF0L});
+    public static final BitSet FOLLOW_constraint_in_constraints2429 = new BitSet(new long[]{0x0000800000000002L});
+    public static final BitSet FOLLOW_or_constr_in_constraint2459 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2482 = new BitSet(new long[]{0x0000004000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr2489 = new BitSet(new long[]{0x07C27F2FE40A3FF0L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2491 = new BitSet(new long[]{0x0000004000000002L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2520 = new BitSet(new long[]{0x0000008000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr2527 = new BitSet(new long[]{0x07C27F2FE40A3FF0L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2529 = new BitSet(new long[]{0x0000008000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr2554 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr2562 = new BitSet(new long[]{0x07C27F2FE40A3FF0L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr2564 = new BitSet(new long[]{0x0000001000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr2567 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EVAL_in_unary_constr2573 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_predicate_in_unary_constr2575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_field_constraint2607 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
+    public static final BitSet FOLLOW_70_in_field_constraint2609 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_field_constraint2630 = new BitSet(new long[]{0x00007E0800000002L,0x000000000000FE00L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2644 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_73_in_field_constraint2659 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_predicate_in_field_constraint2661 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2689 = new BitSet(new long[]{0x0000004000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective2694 = new BitSet(new long[]{0x00007E0800000000L,0x000000000000FC00L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2696 = new BitSet(new long[]{0x0000004000000002L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2727 = new BitSet(new long[]{0x0000008000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective2734 = new BitSet(new long[]{0x00007E0800000000L,0x000000000000FC00L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2736 = new BitSet(new long[]{0x0000008000000002L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression2768 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression2775 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression2782 = new BitSet(new long[]{0x00007E0800000000L,0x000000000000FC00L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression2784 = new BitSet(new long[]{0x0000001000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression2787 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_74_in_simple_operator2818 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_75_in_simple_operator2826 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_76_in_simple_operator2834 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_77_in_simple_operator2842 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_78_in_simple_operator2850 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_79_in_simple_operator2858 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_CONTAINS_in_simple_operator2866 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_MATCHES_in_simple_operator2874 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_EXCLUDES_in_simple_operator2882 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator2890 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_NOT_in_simple_operator2898 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_MEMBEROF_in_simple_operator2902 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator2916 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IN_in_compound_operator2945 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_NOT_in_compound_operator2957 = new BitSet(new long[]{0x0000400000000000L});
+    public static final BitSet FOLLOW_IN_in_compound_operator2959 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator2974 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator2978 = new BitSet(new long[]{0x0000801000000000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator2990 = new BitSet(new long[]{0x0003000C00148000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator2994 = new BitSet(new long[]{0x0000801000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3010 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_expression_value3034 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enum_constraint_in_expression_value3050 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value3073 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_retval_constraint_in_expression_value3087 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_literal_constraint3126 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_literal_constraint3137 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_literal_constraint3150 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_literal_constraint3161 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_literal_constraint3173 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enum_constraint3208 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_71_in_enum_constraint3214 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_enum_constraint3218 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_paren_chunk_in_predicate3260 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk3309 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_set_in_paren_chunk3325 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk3349 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk3386 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk3437 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_set_in_curly_chunk3453 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk3477 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk3514 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk3577 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_set_in_square_chunk3593 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_square_chunk_in_square_chunk3617 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk3654 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint3699 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or3727 = new BitSet(new long[]{0x0000006000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_or3735 = new BitSet(new long[]{0x0300210C00000000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or3746 = new BitSet(new long[]{0x0000006000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3782 = new BitSet(new long[]{0x0040008000000002L});
+    public static final BitSet FOLLOW_set_in_lhs_and3790 = new BitSet(new long[]{0x0300210C00000000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3801 = new BitSet(new long[]{0x0040008000000002L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary3838 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary3846 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary3854 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_unary3862 = new BitSet(new long[]{0x0080000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_FROM_in_lhs_unary3878 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_accumulate_statement_in_lhs_unary3906 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_collect_statement_in_lhs_unary3935 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_from_statement_in_lhs_unary3970 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary4009 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary4017 = new BitSet(new long[]{0x0300210C00000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary4021 = new BitSet(new long[]{0x0000001000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary4023 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000020L});
+    public static final BitSet FOLLOW_opt_semicolon_in_lhs_unary4033 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EXISTS_in_lhs_exist4057 = new BitSet(new long[]{0x0000000C00000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist4077 = new BitSet(new long[]{0x0300210C00000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist4081 = new BitSet(new long[]{0x0000001000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist4113 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist4163 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NOT_in_lhs_not4217 = new BitSet(new long[]{0x0000000C00000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not4230 = new BitSet(new long[]{0x0300210C00000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not4234 = new BitSet(new long[]{0x0000001000000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not4267 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not4304 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EVAL_in_lhs_eval4352 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval4356 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FORALL_in_lhs_forall4385 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall4387 = new BitSet(new long[]{0x0000000400000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall4391 = new BitSet(new long[]{0x0000800400000000L});
+    public static final BitSet FOLLOW_COMMA_in_lhs_forall4405 = new BitSet(new long[]{0x0000000400000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall4411 = new BitSet(new long[]{0x0000801400000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall4426 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dotted_name4457 = new BitSet(new long[]{0x0010000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_71_in_dotted_name4469 = new BitSet(new long[]{0x07C27F27E40A3FF0L});
+    public static final BitSet FOLLOW_identifier_in_dotted_name4473 = new BitSet(new long[]{0x0010000000000002L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dotted_name4495 = new BitSet(new long[]{0x0020000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dotted_name4499 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_identifier_in_argument4538 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_argument4544 = new BitSet(new long[]{0x0020000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument4546 = new BitSet(new long[]{0x0010000000000002L});
+    public static final BitSet FOLLOW_THEN_in_rhs_chunk4590 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_set_in_rhs_chunk4602 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000000FFFFL});
+    public static final BitSet FOLLOW_END_in_rhs_chunk4639 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_name4683 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_name4702 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_identifier4740 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_PACKAGE_in_identifier4753 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FUNCTION_in_identifier4760 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_GLOBAL_in_identifier4767 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IMPORT_in_identifier4774 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_in_identifier4783 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_QUERY_in_identifier4790 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_TEMPLATE_in_identifier4811 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ATTRIBUTES_in_identifier4839 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ENABLED_in_identifier4865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SALIENCE_in_identifier4894 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DURATION_in_identifier4916 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FROM_in_identifier4938 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ACCUMULATE_in_identifier4967 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INIT_in_identifier4989 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ACTION_in_identifier5018 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RESULT_in_identifier5047 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_COLLECT_in_identifier5076 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_OR_in_identifier5105 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_AND_in_identifier5134 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_CONTAINS_in_identifier5163 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EXCLUDES_in_identifier5185 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_MEMBEROF_in_identifier5207 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_MATCHES_in_identifier5227 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_identifier5256 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EXISTS_in_identifier5285 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NOT_in_identifier5314 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EVAL_in_identifier5343 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FORALL_in_identifier5372 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_WHEN_in_identifier5410 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_THEN_in_identifier5442 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_END_in_identifier5471 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IN_in_identifier5490 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_function_import_statement_in_synpred7150 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_import_statement_in_synpred8156 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_paren_chunk_in_synpred421876 = new BitSet(new long[]{0x0000000000000002L});
@@ -7309,8 +7698,13 @@
     public static final BitSet FOLLOW_LEFT_PAREN_in_synpred451976 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_set_in_synpred492284 = new BitSet(new long[]{0x0000000400000000L});
     public static final BitSet FOLLOW_fact_in_synpred492302 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACCUMULATE_in_synpred973777 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_synpred983806 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_set_in_synpred1003836 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_synpred542554 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred592694 = new BitSet(new long[]{0x00007E0800000000L,0x000000000000FC00L});
+    public static final BitSet FOLLOW_and_restr_connective_in_synpred592696 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred602734 = new BitSet(new long[]{0x00007E0800000000L,0x000000000000FC00L});
+    public static final BitSet FOLLOW_constraint_expression_in_synpred602736 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ACCUMULATE_in_synpred993897 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_COLLECT_in_synpred1003926 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_set_in_synpred1023956 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL__.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL__.g	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL__.g	2007-05-19 21:24:24 UTC (rev 11962)
@@ -3,23 +3,19 @@
 	package org.drools.lang;
 }
 
-T67 : ';' ;
-T68 : ':' ;
-T69 : '.' ;
-T70 : '.*' ;
-T71 : '||' ;
-T72 : '&' ;
-T73 : '|' ;
-T74 : '->' ;
-T75 : '==' ;
-T76 : '>' ;
-T77 : '>=' ;
-T78 : '<' ;
-T79 : '<=' ;
-T80 : '!=' ;
-T81 : '&&' ;
+T69 : ';' ;
+T70 : ':' ;
+T71 : '.' ;
+T72 : '.*' ;
+T73 : '->' ;
+T74 : '==' ;
+T75 : '>' ;
+T76 : '>=' ;
+T77 : '<' ;
+T78 : '<=' ;
+T79 : '!=' ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1564
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1626
 WS      :       (	' '
                 |	'\t'
                 |	'\f'
@@ -28,7 +24,7 @@
                 { $channel=HIDDEN; }
         ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1572
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1634
 fragment
 EOL 	:	     
    		(       ( '\r\n' )=> '\r\n'  // Evil DOS
@@ -37,35 +33,35 @@
                 )
         ;  
         
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1580
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1642
 INT	
 	:	('-')?('0'..'9')+
 		;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1584
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1646
 FLOAT
 	:	('-')?('0'..'9')+ '.' ('0'..'9')+
 	;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1588
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1650
 STRING
     :  ('"' ( EscapeSequence | ~('\\'|'"') )* '"')
      | ('\'' ( EscapeSequence | ~('\\'|'\'') )* '\'')
     ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1593
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1655
 fragment
 HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1596
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1658
 fragment
 EscapeSequence
-    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\'|'.')
+    :   '\\' ('b'|'B'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\'|'.'|'o'|'x'|'a'|'e'|'c'|'d'|'D'|'s'|'S'|'w'|'W'|'p'|'A'|'G'|'Z'|'z'|'Q'|'E')
     |   UnicodeEscape
     |   OctalEscape
     ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1603
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1665
 fragment
 OctalEscape
     :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
@@ -73,215 +69,223 @@
     |   '\\' ('0'..'7')
     ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1610
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1672
 fragment
 UnicodeEscape
     :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
     ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1615
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1677
 BOOL
 	:	('true'|'false') 
 	;	
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1619
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1681
 PACKAGE	:	'package';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1621
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1683
 IMPORT	:	'import';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1623
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1685
 FUNCTION :	'function';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1625
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1687
 GLOBAL	:	'global';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1627
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1689
 RULE    :	'rule';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1629
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1691
 QUERY	:	'query';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1631
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1693
 TEMPLATE :	'template';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1633
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1695
 ATTRIBUTES :	'attributes';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1635
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1697
 DATE_EFFECTIVE 
 	:	'date-effective';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1638
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1700
 DATE_EXPIRES 
 	:	'date-expires';	
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1641
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1703
 ENABLED :	'enabled';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1643
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1705
 SALIENCE 
 	:	'salience';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1646
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1708
 NO_LOOP :	'no-loop';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1648
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1710
 AUTO_FOCUS 
 	:	'auto-focus';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1651
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1713
 ACTIVATION_GROUP 
 	:	'activation-group';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1654
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1716
 AGENDA_GROUP 
 	:	'agenda-group';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1657
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1719
 DIALECT 
 	:	'dialect';	
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1660
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1722
 RULEFLOW_GROUP 
 	:	'ruleflow-group';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1663
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1725
 DURATION 
 	:	'duration';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1666
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1728
 LOCK_ON_ACTIVE
 	:	'lock-on-active';	
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1669
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1731
 FROM	:	'from';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1671
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1733
 ACCUMULATE 
 	:	'accumulate';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1674
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1736
 INIT	:	'init';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1676
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1738
 ACTION	:	'action';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1678
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1740
 RESULT	:	'result';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1680
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1742
 COLLECT :	'collect';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1682
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1744
 OR	:	'or';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1684
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1746
 AND	:	'and';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1686
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1748
 CONTAINS 
 	:	'contains';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1689
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1751
 EXCLUDES 
 	:	'excludes';
 	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1692
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1754
 MEMBEROF
 	:	'memberOf';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1695
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1757
 MATCHES :	'matches';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1697
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1759
 IN	:	'in';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1699
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1761
 NULL	:	'null';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1701
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1763
 EXISTS	:	'exists';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1703
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1765
 NOT	:	'not';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1705
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1767
 EVAL	:	'eval';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1707
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1769
 FORALL	:	'forall';							
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1709
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1771
 WHEN    :	'when'; 
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1711
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1773
 THEN	:    	'then';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1713
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1775
 END     :	'end';
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1715
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1777
 ID	
 	:	('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff')('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff')* 
 	;
 		
-
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1720
-SH_STYLE_SINGLE_LINE_COMMENT	
-	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
-                { $channel=HIDDEN; }
-	;
-        
-        
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1726
-C_STYLE_SINGLE_LINE_COMMENT	
-	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
-                { $channel=HIDDEN; }
-	;
-
-
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1732
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1781
 LEFT_PAREN
         :	'('
         ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1736
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1785
 RIGHT_PAREN
         :	')'
         ;
         
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1740
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1789
 LEFT_SQUARE
         :	'['
         ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1744
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1793
 RIGHT_SQUARE
         :	']'
         ;        
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1748
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1797
 LEFT_CURLY
         :	'{'
         ;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1752
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1801
 RIGHT_CURLY
         :	'}'
         ;
         
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1756
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1805
+COMMA	:	','
+	;
+	
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1808
+DOUBLE_AMPER
+	:	'&&'
+	;
+	
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1812
+DOUBLE_PIPE
+	:	'||'
+	;				
+	
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1816
+SH_STYLE_SINGLE_LINE_COMMENT	
+	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
+                { $channel=HIDDEN; }
+	;
+        
+        
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1822
+C_STYLE_SINGLE_LINE_COMMENT	
+	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
+                { $channel=HIDDEN; }
+	;
+
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1827
 MULTI_LINE_COMMENT
 	:	'/*' (options{greedy=false;} : .)* '*/'
                 { $channel=HIDDEN; }
 	;
-	
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1761
-COMMA	:	','
-	;
 
-// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1764
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1832
 MISC 	:
-		'!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+'  | '?' | '|' | '=' | '/' | '\'' | '\\'
+		'!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+'  | '?' | '=' | '/' | '\'' | '\\' | '|' | '&'
 	;

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DrlDumper.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -84,7 +84,7 @@
 
     public void visitFieldConstraintDescr(final FieldConstraintDescr descr) {
         if ( !descr.getRestrictions().isEmpty() ) {
-            this.template = descr.getFieldName() + " " + processFieldConstraint( descr.getRestrictions() );
+            this.template = descr.getFieldName() + " " + processFieldConstraint( descr.getRestriction(), false );
         }
     }
 
@@ -95,11 +95,11 @@
 
     public void visitPatternDescr(final PatternDescr descr) {
         this.template = new String();
-        if ( !descr.getDescrs().isEmpty() ) {
+        if ( !descr.getConstraint().getDescrs().isEmpty() ) {
             if ( descr.getIdentifier() != null ) {
-                this.template = "\t\t" + descr.getIdentifier() + " : " + descr.getObjectType() + "( " + processColoumnConstraintList( descr.getDescrs() ) + ")";
+                this.template = "\t\t" + descr.getIdentifier() + " : " + descr.getObjectType() + "( " + processColoumnConstraintList( descr.getConstraint().getDescrs() ) + ")";
             } else {
-                this.template = "\t\t" + descr.getObjectType() + "( " + processColoumnConstraintList( descr.getDescrs() ) + ")";
+                this.template = "\t\t" + descr.getObjectType() + "( " + processColoumnConstraintList( descr.getConstraint().getDescrs() ) + ")";
             }
         } else {
             if ( descr.getIdentifier() != null ) {
@@ -157,11 +157,7 @@
     }
 
     public void visitRestrictionConnectiveDescr(final RestrictionConnectiveDescr descr) {
-        if ( descr.getConnective() == RestrictionConnectiveDescr.OR ) {
-            this.template = " | ";
-        } else {
-            this.template = " & ";
-        }
+        this.template = this.processFieldConstraint( descr, true );
     }
 
     public void visitNotDescr(final NotDescr descr) {
@@ -205,7 +201,7 @@
 
     public void visitPredicateDescr(final PredicateDescr descr) {
         this.template = new String();
-        this.template = "( " + descr.getContent() + " )";
+        this.template = "eval( " + descr.getContent() + " )";
 
     }
 
@@ -220,6 +216,7 @@
     }
 
     private String template;
+    private boolean needsBracket = false;
 
     private String processRules(final List rules) {
         String ruleList = "";
@@ -298,13 +295,32 @@
                                       descrString.length() );
     }
 
-    private String processFieldConstraint(final List list) {
+    private String processFieldConstraint(final RestrictionConnectiveDescr restriction, boolean addBrackets ) {
         String descrString = "";
-        for ( final Iterator it = list.iterator(); it.hasNext(); ) {
+        String connective = "";
+        boolean bracketTmp = this.needsBracket;
+        this.needsBracket = restriction.getRestrictions().size() > 1;
+        
+        if ( restriction.getConnective() == RestrictionConnectiveDescr.OR ) {
+            connective = " || ";
+        } else {
+            connective = " && ";
+        }
+        if( addBrackets && bracketTmp ) {
+            descrString += "( ";
+        }
+        for ( final Iterator it = restriction.getRestrictions().iterator(); it.hasNext(); ) {
             final Object temp = it.next();
             visit( temp );
             descrString += this.template;
+            if( it.hasNext() ) {
+                descrString += connective;
+            }
         }
+        if( addBrackets && bracketTmp ) {
+            descrString += " )";
+        }
+        this.needsBracket = bracketTmp;
         return descrString;
     }
 

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AccumulateDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -105,11 +105,16 @@
     }
 
     public void addDescr(final BaseDescr patternDescr) {
-        // Nothing to do
+        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
     }
 
     public List getDescrs() {
         // nothing to do
         return Collections.EMPTY_LIST;
     }
+
+    public void addOrMerge(BaseDescr baseDescr) {
+        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AndDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AndDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/AndDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -17,7 +17,7 @@
  */
 
 import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 public class AndDescr extends BaseDescr
@@ -27,20 +27,24 @@
      * 
      */
     private static final long serialVersionUID = 8225023304408452585L;
-    private List              descrs           = Collections.EMPTY_LIST;
+    private List              descrs           = new ArrayList();
 
     public AndDescr() {
     }
 
     public void addDescr(final BaseDescr baseDescr) {
-        if ( this.descrs == Collections.EMPTY_LIST ) {
-            this.descrs = new ArrayList( 1 );
-        }
-
         this.descrs.add( baseDescr );
     }
 
     public List getDescrs() {
         return this.descrs;
     }
+
+    public void addOrMerge(final BaseDescr baseDescr) {
+        if( baseDescr instanceof AndDescr ) {
+            this.descrs.addAll( ((AndDescr)baseDescr).getDescrs() );
+        } else {
+            this.descrs.add( baseDescr );
+        }
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/CollectDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -72,7 +72,7 @@
     }
 
     public void addDescr(final BaseDescr patternDescr) {
-        // Nothing to do
+        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
     }
 
     public List getDescrs() {
@@ -80,4 +80,8 @@
         return Collections.EMPTY_LIST;
     }
 
+    public void addOrMerge(BaseDescr baseDescr) {
+        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ConditionalElementDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ConditionalElementDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ConditionalElementDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -21,6 +21,8 @@
 public interface ConditionalElementDescr {
 
     public void addDescr(BaseDescr baseDescr);
-
+    
+    public void addOrMerge(final BaseDescr baseDescr);
+    
     public List getDescrs();
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/EvalDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/EvalDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/EvalDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -69,6 +69,11 @@
     }
 
     public void addDescr(final BaseDescr baseDescr) {
-        // do thing, this can have no children        
+        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
     }
+
+    public void addOrMerge(BaseDescr baseDescr) {
+        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ExistsDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ExistsDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ExistsDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -44,4 +44,12 @@
         return this.descrs;
     }
 
+    public void addOrMerge(BaseDescr baseDescr) {
+        if( baseDescr instanceof ExistsDescr ) {
+            this.descrs.addAll( ((ExistsDescr)baseDescr).getDescrs() ); 
+        } else {
+            this.descrs.add( baseDescr );        
+        }
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FieldConstraintDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -1,7 +1,5 @@
 package org.drools.lang.descr;
 
-import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 /*
@@ -29,7 +27,7 @@
 
     private static final long serialVersionUID = 320;
     private String            fieldName;
-    private List              restrictions     = Collections.EMPTY_LIST;
+    private RestrictionConnectiveDescr restriction     = new RestrictionConnectiveDescr( RestrictionConnectiveDescr.AND );
 
     public FieldConstraintDescr(final String fieldName) {
         this.fieldName = fieldName;
@@ -40,24 +38,15 @@
     }
 
     public void addRestriction(final RestrictionDescr restriction) {
-        if ( this.restrictions == Collections.EMPTY_LIST ) {
-            this.restrictions = new ArrayList();
-        }
-        this.restrictions.add( restriction );
+        this.restriction.addRestriction( restriction );
     }
 
     public List getRestrictions() {
-        return this.restrictions;
+        return this.restriction.getRestrictions();
     }
+    
+    public RestrictionConnectiveDescr getRestriction() {
+        return this.restriction;
+    }
 
-    /*    public boolean isBound(String identifier) {
-     for ( Iterator it = this.restrictions.iterator(); it.hasNext(); ) {
-     Object object = it.next();
-     if ( object instanceof FieldBindingDescr ) {
-     FieldBindingDescr descr = 
-     }
-     }
-     return false;
-     }*/
-
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ForallDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ForallDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/ForallDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -68,4 +68,10 @@
                                                                  this.patterns.size() ) : Collections.EMPTY_LIST;
     }
 
+    public void addOrMerge(BaseDescr baseDescr) {
+        this.patterns.add( baseDescr );        
+    }
+
+    
+    
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/FromDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -34,11 +34,15 @@
     }
 
     public void addDescr(final BaseDescr baseDescr) {
-        //
+        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
     }
 
     public List getDescrs() {
         return Collections.EMPTY_LIST;
     }
 
+    public void addOrMerge(BaseDescr baseDescr) {
+        throw new UnsupportedOperationException("Can't add descriptors to "+this.getClass().getName());        
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/NotDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/NotDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/NotDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -44,4 +44,12 @@
         return this.descrs;
     }
 
+    public void addOrMerge(BaseDescr baseDescr) {
+        if( baseDescr instanceof NotDescr ) {
+            this.descrs.addAll( ((NotDescr)baseDescr).getDescrs() ); 
+        } else {
+            this.descrs.add( baseDescr );        
+        }
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/OrDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -17,7 +17,6 @@
  */
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 
 public class OrDescr extends BaseDescr
@@ -27,19 +26,27 @@
      * 
      */
     private static final long serialVersionUID = -6499901868693501867L;
-    private List              descrs           = Collections.EMPTY_LIST;
+    private List              descrs           = new ArrayList();
 
     public OrDescr() {
     }
 
     public void addDescr(final BaseDescr baseDescr) {
-        if ( this.descrs == Collections.EMPTY_LIST ) {
-            this.descrs = new ArrayList( 1 );
-        }
         this.descrs.add( baseDescr );
     }
 
+
     public List getDescrs() {
         return this.descrs;
     }
+
+    public void addOrMerge(final BaseDescr baseDescr) {
+        if( baseDescr instanceof OrDescr ) {
+            this.descrs.addAll( ((OrDescr)baseDescr).getDescrs() );
+        } else {
+            this.descrs.add( baseDescr );
+        }
+    }
+    
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/PatternDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -1,5 +1,7 @@
 package org.drools.lang.descr;
 
+import java.util.List;
+
 /*
  * Copyright 2005 JBoss Inc
  * 
@@ -16,20 +18,17 @@
  * limitations under the License.
  */
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
 
 public class PatternDescr extends BaseDescr {
     /**
      * 
      */
-    private static final long serialVersionUID     = 63959215220308107L;
-    private String            objectType;
-    private String            identifier;
-    private List              descrs               = Collections.EMPTY_LIST;
-    private int               leftParentCharacter  = -1;
-    private int               rightParentCharacter = -1;
+    private static final long       serialVersionUID     = 63959215220308107L;
+    private String                  objectType;
+    private String                  identifier;
+    private ConditionalElementDescr constraint          = new AndDescr();
+    private int                     leftParentCharacter  = -1;
+    private int                     rightParentCharacter = -1;
 
     public PatternDescr() {
         this( null,
@@ -42,18 +41,11 @@
     }
 
     public PatternDescr(final String objectType,
-                       final String identifier) {
+                        final String identifier) {
         this.objectType = objectType;
         this.identifier = identifier;
     }
 
-    public void addDescr(final BaseDescr baseDescr) {
-        if ( this.descrs == Collections.EMPTY_LIST ) {
-            this.descrs = new ArrayList( 1 );
-        }
-        this.descrs.add( baseDescr );
-    }
-
     public void setIdentifier(final String identifier) {
         this.identifier = identifier;
     }
@@ -71,8 +63,16 @@
     }
 
     public List getDescrs() {
-        return this.descrs;
+        return this.constraint.getDescrs();
     }
+    
+    public void addConstraint( BaseDescr base ) {
+        this.constraint.addDescr( base );
+    }
+    
+    public ConditionalElementDescr getConstraint() {
+        return this.constraint;
+    }
 
     public String toString() {
         return "[Pattern: id=" + this.identifier + "; objectType=" + this.objectType + "]";

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/RestrictionConnectiveDescr.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -1,5 +1,9 @@
 package org.drools.lang.descr;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 /**
  * This is used to connect restrictions together for a single field
  * eg:
@@ -13,14 +17,38 @@
     public final static int   OR               = 1;
 
     private int               connective;
+    private List              restrictions;
 
     public RestrictionConnectiveDescr(final int connective) {
         super();
         this.connective = connective;
+        this.restrictions = Collections.EMPTY_LIST;
     }
 
     public int getConnective() {
         return this.connective;
     }
-
+    
+    public void addRestriction( RestrictionDescr restriction ) {
+        if( this.restrictions == Collections.EMPTY_LIST ) {
+            this.restrictions = new ArrayList();
+        }
+        this.restrictions.add( restriction );
+    }
+    
+    public void addOrMerge( RestrictionDescr restriction ) {
+        if(( restriction instanceof RestrictionConnectiveDescr ) &&
+           ((RestrictionConnectiveDescr)restriction).connective == this.connective ) {
+            if( this.restrictions == Collections.EMPTY_LIST ) {
+                this.restrictions = new ArrayList();
+            }
+            this.restrictions.addAll( ((RestrictionConnectiveDescr)restriction).getRestrictions() );
+        } else {
+            this.addRestriction( restriction );
+        }
+    }
+    
+    public List getRestrictions() {
+        return this.restrictions;
+    }
 }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/PatternBuilder.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -31,28 +31,35 @@
 import org.drools.facttemplates.FactTemplate;
 import org.drools.facttemplates.FactTemplateFieldExtractor;
 import org.drools.facttemplates.FactTemplateObjectType;
+import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.BaseDescr;
-import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.FieldBindingDescr;
 import org.drools.lang.descr.FieldConstraintDescr;
 import org.drools.lang.descr.LiteralRestrictionDescr;
+import org.drools.lang.descr.OrDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.RestrictionConnectiveDescr;
 import org.drools.lang.descr.RestrictionDescr;
 import org.drools.lang.descr.ReturnValueRestrictionDescr;
 import org.drools.lang.descr.VariableRestrictionDescr;
+import org.drools.rule.AbstractCompositeConstraint;
+import org.drools.rule.AbstractCompositeRestriction;
 import org.drools.rule.AndCompositeRestriction;
-import org.drools.rule.Pattern;
+import org.drools.rule.AndConstraint;
 import org.drools.rule.Declaration;
 import org.drools.rule.LiteralConstraint;
 import org.drools.rule.LiteralRestriction;
 import org.drools.rule.MultiRestrictionFieldConstraint;
 import org.drools.rule.OrCompositeRestriction;
+import org.drools.rule.OrConstraint;
+import org.drools.rule.Pattern;
 import org.drools.rule.PredicateConstraint;
 import org.drools.rule.ReturnValueConstraint;
 import org.drools.rule.ReturnValueRestriction;
 import org.drools.rule.VariableConstraint;
 import org.drools.rule.VariableRestriction;
+import org.drools.spi.Constraint;
 import org.drools.spi.Evaluator;
 import org.drools.spi.FieldExtractor;
 import org.drools.spi.FieldValue;
@@ -154,28 +161,69 @@
 
         for ( final Iterator it = patternDescr.getDescrs().iterator(); it.hasNext(); ) {
             final Object object = it.next();
-            if ( object instanceof FieldBindingDescr ) {
-                build( context,
-                       pattern,
-                       (FieldBindingDescr) object );
-            } else if ( object instanceof FieldConstraintDescr ) {
-                build( context,
-                       pattern,
-                       (FieldConstraintDescr) object );
-            } else if ( object instanceof PredicateDescr ) {
-                build( context,
-                       pattern,
-                       (PredicateDescr) object );
-            }
+            buildConstraint( context,
+                             pattern,
+                             object,
+                             null );
         }
         // poping the pattern
         context.getBuildStack().pop();
         return pattern;
     }
 
+    private void buildConstraint(final RuleBuildContext context,
+                                 final Pattern pattern,
+                                 final Object constraint,
+                                 final AbstractCompositeConstraint container) {
+        if ( constraint instanceof FieldBindingDescr ) {
+            build( context,
+                   pattern,
+                   (FieldBindingDescr) constraint );
+        } else if ( constraint instanceof FieldConstraintDescr ) {
+            build( context,
+                   pattern,
+                   (FieldConstraintDescr) constraint,
+                   container );
+        } else if ( constraint instanceof PredicateDescr ) {
+            build( context,
+                   pattern,
+                   (PredicateDescr) constraint,
+                   container );
+        } else if ( constraint instanceof AndDescr ) {
+            AndConstraint and = new AndConstraint();
+            for ( Iterator it = ((AndDescr) constraint).getDescrs().iterator(); it.hasNext(); ) {
+                this.buildConstraint( context,
+                                      pattern,
+                                      it.next(),
+                                      and );
+            }
+            if ( container == null ) {
+                pattern.addConstraint( and );
+            } else {
+                container.addConstraint( and );
+            }
+        } else if ( constraint instanceof OrDescr ) {
+            OrConstraint or = new OrConstraint();
+            for ( Iterator it = ((OrDescr) constraint).getDescrs().iterator(); it.hasNext(); ) {
+                this.buildConstraint( context,
+                                      pattern,
+                                      it.next(),
+                                      or );
+            }
+            if ( container == null ) {
+                pattern.addConstraint( or );
+            } else {
+                container.addConstraint( or );
+            }
+        } else {
+            throw new UnsupportedOperationException( "This is a bug: unable to build constraint descriptor: " + constraint );
+        }
+    }
+
     private void build(final RuleBuildContext context,
                        final Pattern pattern,
-                       final FieldConstraintDescr fieldConstraintDescr) {
+                       final FieldConstraintDescr fieldConstraintDescr,
+                       final AbstractCompositeConstraint container) {
 
         final FieldExtractor extractor = getFieldExtractor( context,
                                                             fieldConstraintDescr,
@@ -187,137 +235,84 @@
             return;
         }
 
-        if ( fieldConstraintDescr.getRestrictions().size() == 1 ) {
-            final Object object = fieldConstraintDescr.getRestrictions().get( 0 );
+        Restriction restriction = createRestriction( context,
+                                                     pattern,
+                                                     fieldConstraintDescr,
+                                                     fieldConstraintDescr.getRestriction(),
+                                                     extractor );
+        
+        if ( restriction == null ) {
+            // @todo log error
+            return;
+        }
 
-            final Restriction restriction = buildRestriction( context,
-                                                              pattern,
-                                                              extractor,
-                                                              fieldConstraintDescr,
-                                                              (RestrictionDescr) object );
-            if ( restriction == null ) {
-                // @todo log errors
-                return;
-            }
+        Constraint constraint = null;
+        if ( restriction instanceof AbstractCompositeRestriction ) {
+            constraint = new MultiRestrictionFieldConstraint( extractor,
+                                                              restriction );
+        } else if ( restriction instanceof LiteralRestriction ) {
+            constraint = new LiteralConstraint( extractor,
+                                                (LiteralRestriction) restriction );
+        } else if ( restriction instanceof VariableRestriction ) {
+            constraint = new VariableConstraint( extractor,
+                                                 (VariableRestriction) restriction );
+        } else if ( restriction instanceof ReturnValueRestriction ) {
+            constraint = new ReturnValueConstraint( extractor,
+                                                    (ReturnValueRestriction) restriction );
+        } else {
+            throw new UnsupportedOperationException( "Unknown restriction type: " + restriction.getClass() );
 
-            if ( object instanceof LiteralRestrictionDescr ) {
-                pattern.addConstraint( new LiteralConstraint( extractor,
-                                                              (LiteralRestriction) restriction ) );
-            } else if ( object instanceof VariableRestrictionDescr ) {
-                pattern.addConstraint( new VariableConstraint( extractor,
-                                                               (VariableRestriction) restriction ) );
-            } else if ( object instanceof ReturnValueRestrictionDescr ) {
-                pattern.addConstraint( new ReturnValueConstraint( extractor,
-                                                                  (ReturnValueRestriction) restriction ) );
-            }
+        }
 
-            return;
+        if ( container == null ) {
+            pattern.addConstraint( constraint );
+        } else {
+            container.addConstraint( constraint );
         }
+    }
 
-        final List orList = new ArrayList();
-        List andList = null;
+    private Restriction createRestriction(final RuleBuildContext context,
+                                          final Pattern pattern,
+                                          final FieldConstraintDescr fieldConstraintDescr,
+                                          final RestrictionConnectiveDescr top,
+                                          final FieldExtractor extractor) {
+        Restriction[] restrictions = new Restriction[top.getRestrictions().size()];
+        int index = 0;
 
-        RestrictionDescr currentRestriction = null;
-        RestrictionDescr previousRestriction = null;
+        for ( Iterator it = top.getRestrictions().iterator(); it.hasNext(); ) {
+            RestrictionDescr restrictionDescr = (RestrictionDescr) it.next();
 
-        List currentList = null;
-        List previousList = null;
+            if ( restrictionDescr instanceof RestrictionConnectiveDescr ) {
+                restrictions[index++] = this.createRestriction( context,
+                                                                pattern,
+                                                                fieldConstraintDescr,
+                                                                (RestrictionConnectiveDescr) restrictionDescr,
+                                                                extractor );
 
-        for ( final Iterator it = fieldConstraintDescr.getRestrictions().iterator(); it.hasNext(); ) {
-            final Object object = it.next();
-
-            // Process an and/or connective 
-            if ( object instanceof RestrictionConnectiveDescr ) {
-
-                // is the connective an 'and'?
-                if ( ((RestrictionConnectiveDescr) object).getConnective() == RestrictionConnectiveDescr.AND ) {
-                    // if andList is null, then we know its the first
-                    if ( andList == null ) {
-                        andList = new ArrayList();
-                    }
-                    previousList = currentList;
-                    currentList = andList;
-                } else {
-                    previousList = currentList;
-                    currentList = orList;
-                }
             } else {
-                Restriction restriction = null;
-                if ( currentList != null ) {
-                    // Are we are at the first operator? if so treat differently
-                    if ( previousList == null ) {
-                        restriction = buildRestriction( context,
-                                                        pattern,
-                                                        extractor,
-                                                        fieldConstraintDescr,
-                                                        previousRestriction );
-                        if ( currentList == andList ) {
-                            andList.add( restriction );
-                        } else {
-                            orList.add( restriction );
-                        }
-                    } else {
-                        restriction = buildRestriction( context,
-                                                        pattern,
-                                                        extractor,
-                                                        fieldConstraintDescr,
-                                                        previousRestriction );
-
-                        if ( previousList == andList && currentList == orList ) {
-                            andList.add( restriction );
-                            if ( andList.size() == 1 ) {
-                                // Can't have an 'and' connective with one child, so add directly to the or list
-                                orList.add( andList.get( 0 ) );
-                            } else {
-                                final Restriction restrictions = new AndCompositeRestriction( (Restriction[]) andList.toArray( new Restriction[andList.size()] ) );
-                                orList.add( restrictions );
-                            }
-                            andList = null;
-                        } else if ( previousList == andList && currentList == andList ) {
-                            andList.add( restriction );
-                        } else if ( previousList == orList && currentList == andList ) {
-                            andList.add( restriction );
-                        } else if ( previousList == orList && currentList == orList ) {
-                            orList.add( restriction );
-                        }
-                    }
-                }
-            }
-            previousRestriction = currentRestriction;
-            currentRestriction = (RestrictionDescr) object;
-        }
-
-        final Restriction restriction = buildRestriction( context,                                                          
+                restrictions[index++] = buildRestriction( context,
                                                           pattern,
                                                           extractor,
                                                           fieldConstraintDescr,
-                                                          currentRestriction );
-        currentList.add( restriction );
-
-        Restriction restrictions = null;
-        if ( currentList == andList && !orList.isEmpty() ) {
-            // Check if it finished with an and, and process it
-            if ( andList != null ) {
-                if ( andList.size() == 1 ) {
-                    // Can't have an 'and' connective with one child, so add directly to the or list
-                    orList.add( andList.get( 0 ) );
-                } else {
-                    orList.add( new AndCompositeRestriction( (Restriction[]) andList.toArray( new Restriction[andList.size()] ) ) );
-                }
-                andList = null;
+                                                          restrictionDescr );
             }
         }
 
-        if ( !orList.isEmpty() ) {
-            restrictions = new OrCompositeRestriction( (Restriction[]) orList.toArray( new Restriction[orList.size()] ) );
-        } else if ( andList != null && !andList.isEmpty() ) {
-            restrictions = new AndCompositeRestriction( (Restriction[]) andList.toArray( new Restriction[andList.size()] ) );
-        } else {
-            // @todo throw error
+        if ( restrictions.length > 1 ) {
+            AbstractCompositeRestriction composite = null;
+            if ( top.getConnective() == RestrictionConnectiveDescr.AND ) {
+                composite = new AndCompositeRestriction( restrictions );
+            } else if ( top.getConnective() == RestrictionConnectiveDescr.OR ) {
+                composite = new OrCompositeRestriction( restrictions );
+            } else {
+                throw new UnsupportedOperationException( "Impossible to create a composite restriction for connective: " + top.getConnective() );
+            }
+
+            return composite;
+        } else if ( restrictions.length == 1 ) {
+            return restrictions[0];
         }
-
-        pattern.addConstraint( new MultiRestrictionFieldConstraint( extractor,
-                                                                    restrictions ) );
+        throw new UnsupportedOperationException( "Trying to create a restriction for an empty restriction list" );
     }
 
     private void build(final RuleBuildContext context,
@@ -348,15 +343,16 @@
 
     private void build(final RuleBuildContext context,
                        final Pattern pattern,
-                       final PredicateDescr predicateDescr) {
+                       final PredicateDescr predicateDescr,
+                       final AbstractCompositeConstraint container) {
 
         // this will return an array with 3 lists
         // where first list is from rule local variables
         // second list is from global variables
         // and third is for unbound variables
         final List[] usedIdentifiers = context.getDialect().getExpressionIdentifiers( context,
-                                                                                predicateDescr,
-                                                                                predicateDescr.getContent() );
+                                                                                      predicateDescr,
+                                                                                      predicateDescr.getContent() );
         final List tupleDeclarations = new ArrayList();
         final List factDeclarations = new ArrayList();
         for ( int i = 0, size = usedIdentifiers[0].size(); i < size; i++ ) {
@@ -381,8 +377,13 @@
                                                                                  previousDeclarations,
                                                                                  localDeclarations,
                                                                                  requiredGlobals );
-        pattern.addConstraint( predicateConstraint );
 
+        if ( container == null ) {
+            pattern.addConstraint( predicateConstraint );
+        } else {
+            container.addConstraint( predicateConstraint );
+        }
+
         final PredicateBuilder builder = this.dialect.getPredicateBuilder();
 
         builder.build( context,
@@ -553,8 +554,8 @@
                                                     final FieldConstraintDescr fieldConstraintDescr,
                                                     final ReturnValueRestrictionDescr returnValueRestrictionDescr) {
         final List[] usedIdentifiers = context.getDialect().getExpressionIdentifiers( context,
-                                                                                returnValueRestrictionDescr,
-                                                                                returnValueRestrictionDescr.getContent() );
+                                                                                      returnValueRestrictionDescr,
+                                                                                      returnValueRestrictionDescr.getContent() );
 
         final List tupleDeclarations = new ArrayList();
         final List factDeclarations = new ArrayList();
@@ -569,9 +570,9 @@
 
         final int NOT_BOUND_INDEX = usedIdentifiers.length - 1;
         createImplicitBindings( context,
-                                     pattern,
-                                     usedIdentifiers[NOT_BOUND_INDEX],
-                                     factDeclarations );
+                                pattern,
+                                usedIdentifiers[NOT_BOUND_INDEX],
+                                factDeclarations );
 
         final Evaluator evaluator = getEvaluator( context,
                                                   returnValueRestrictionDescr,
@@ -618,8 +619,8 @@
             try {
                 ClassLoader classloader = context.getPkg().getPackageCompilationData().getClassLoader();
                 extractor = context.getDialect().getClassFieldExtractorCache().getExtractor( ((ClassObjectType) objectType).getClassType(),
-                                                                              fieldName,
-                                                                              classloader );
+                                                                                             fieldName,
+                                                                                             classloader );
             } catch ( final RuntimeDroolsException e ) {
                 if ( reportError ) {
                     context.getErrors().add( new RuleError( context.getRule(),

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldBindingHandler.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -88,7 +88,7 @@
         it.previous();
         final PatternDescr patternDescr = (PatternDescr) it.previous();
 
-        patternDescr.addDescr( fieldBindingDescr );
+        patternDescr.addConstraint( fieldBindingDescr );
 
         return null;
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/FieldConstraintHandler.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -83,7 +83,7 @@
         final Object parent = it.previous();
 
         final PatternDescr patternDescr = (PatternDescr) parent;
-        patternDescr.addDescr( fieldConstraintDescr );
+        patternDescr.addConstraint( fieldConstraintDescr );
 
         return null;
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/PredicateHandler.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -84,7 +84,7 @@
         it.previous();
         final PatternDescr patternDescr = (PatternDescr) it.previous();
 
-        patternDescr.addDescr( predicateDescr );
+        patternDescr.addConstraint( predicateDescr );
 
         return null;
     }

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2007-05-19 21:24:24 UTC (rev 11962)
@@ -20,8 +20,12 @@
 	private DescrFactory factory = new DescrFactory();
 	private boolean parserDebug = false;
 	
-	// THE FOLLOWING LINE IS A DUMMY ATTRIBUTE TO WORK AROUND AN ANTLR BUG
+	// THE FOLLOWING LINES ARE DUMMY ATTRIBUTES TO WORK AROUND AN ANTLR BUG
 	private BaseDescr from = null;
+	private FieldConstraintDescr fc = null;
+	private RestrictionConnectiveDescr and = null;
+	private RestrictionConnectiveDescr or = null;
+	private ConditionalElementDescr base = null;
 	
 	public void setParserDebug(boolean parserDebug) {
 		this.parserDebug = parserDebug;
@@ -865,13 +869,13 @@
  		pd = null;
  		boolean multi = false;
  	}
- 	:	'(' fe=fact_expression[id] ')' { pd=fe; }
+ 	:	LEFT_PAREN fe=fact_expression[id] RIGHT_PAREN { pd=fe; }
  	| 	f=fact
  		{
  			((PatternDescr)f).setIdentifier( id );
  			pd = f;
  		}
- 		( (OR|'||')
+ 		( (OR|DOUBLE_PIPE)
  			{	if ( ! multi ) {
  					BaseDescr first = pd;
  					pd = new OrDescr();
@@ -919,14 +923,64 @@
 	
 	
 constraints[PatternDescr pattern]
-	:	(constraint[pattern]|predicate[pattern])
-		( ',' (constraint[pattern]|predicate[pattern]))*
+	:	constraint[pattern]
+		( ',' constraint[pattern] )* 
 	;
 	
 constraint[PatternDescr pattern]
 	@init {
+		ConditionalElementDescr top = null;
+	}
+	:
+		{
+			top = pattern.getConstraint();
+		}
+		or_constr[top]
+	;	
+	
+or_constr[ConditionalElementDescr base]
+	@init {
+		OrDescr or = new OrDescr();
+	}
+	:
+		and_constr[or] ( t=DOUBLE_PIPE and_constr[or] )*
+		{
+		        if( or.getDescrs().size() == 1 ) {
+		                base.addOrMerge( (BaseDescr) or.getDescrs().get(0) );
+		        } else if ( or.getDescrs().size() > 1 ) {
+		        	base.addDescr( or );
+		        }
+		}
+	;
+	
+and_constr[ConditionalElementDescr base]
+	@init {
+		AndDescr and = new AndDescr();
+	}
+	:
+		unary_constr[and] ( t=DOUBLE_AMPER unary_constr[and] )*
+		{
+		        if( and.getDescrs().size() == 1) {
+		                base.addOrMerge( (BaseDescr) and.getDescrs().get(0) );
+		        } else if( and.getDescrs().size() > 1) {
+		        	base.addDescr( and );
+		        }
+		}
+	;
+	
+unary_constr[ConditionalElementDescr base]
+	:
+		( field_constraint[base] 
+		| LEFT_PAREN or_constr[base] RIGHT_PAREN
+		| EVAL predicate[base]
+		)
+	;	
+		
+field_constraint[ConditionalElementDescr base]
+	@init {
 		FieldBindingDescr fbd = null;
 		FieldConstraintDescr fc = null;
+		RestrictionConnectiveDescr top = null;
 	}
 	:
 		( fb=ID ':' 
@@ -935,7 +989,7 @@
 			fbd.setIdentifier( fb.getText() );
 			fbd.setLocation( offset(fb.getLine()), fb.getCharPositionInLine() );
 			fbd.setStartCharacter( ((CommonToken)fb).getStartIndex() );
-			pattern.addDescr( fbd );
+			base.addDescr( fbd );
 
 		    }
 		)? 
@@ -950,57 +1004,70 @@
 			fc = new FieldConstraintDescr(f.getText());
 			fc.setLocation( offset(f.getLine()), f.getCharPositionInLine() );
 			fc.setStartCharacter( ((CommonToken)f).getStartIndex() );
+			top = fc.getRestriction();
 			
 			// it must be a field constraint, as it is not a binding
 			if( fb == null ) {
-			    pattern.addDescr( fc );
+			    base.addDescr( fc );
 			}
 		    }
 		}
 		(
-			(	constraint_expression[fc]
-				{
-					// we must add now as we didn't before
-					if( fb != null) {
-					    pattern.addDescr( fc );
-					}
+			or_restr_connective[top]
+			{
+				// we must add now as we didn't before
+				if( fb != null) {
+				    base.addDescr( fc );
 				}
-				(
-					con=('&'|'|')
-					{
-						if (con.getText().equals("&") ) {								
-							fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));	
-						} else {
-							fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
-						}							
-					}
-					constraint_expression[fc]
-				)*
-			)
+			}
 		|
-			'->' predicate[pattern] 
+			'->' predicate[base] 
 		)?
 	;
 	
-constraint_expression[FieldConstraintDescr fc]
+or_restr_connective[ RestrictionConnectiveDescr base ]
+	@init {
+		RestrictionConnectiveDescr or = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
+	}
+	:
+		and_restr_connective[or] ( DOUBLE_PIPE and_restr_connective[or] )*
+		{
+		        if( or.getRestrictions().size() == 1 ) {
+		                base.addOrMerge( (RestrictionDescr) or.getRestrictions().get( 0 ) );
+		        } else if ( or.getRestrictions().size() > 1 ) {
+		        	base.addRestriction( or );
+		        }
+		}
+	;	
+
+	
+and_restr_connective[ RestrictionConnectiveDescr base ]
+	@init {
+		RestrictionConnectiveDescr and = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
+	}
+	:
+		constraint_expression[and] ( t=DOUBLE_AMPER constraint_expression[and] )*
+		{
+		        if( and.getRestrictions().size() == 1) {
+		                base.addOrMerge( (RestrictionDescr) and.getRestrictions().get( 0 ) );
+		        } else if ( and.getRestrictions().size() > 1 ) {
+		        	base.addRestriction( and );
+		        }
+		}
+	;
+
+constraint_expression[RestrictionConnectiveDescr base]
         :	
-		(
-			compound_operator[fc]
-		)
-		|
-		(
-			op=simple_operator rd=expression_value[op]
-			{
-			    if( rd != null ) {
-			        fc.addRestriction( rd );
-			    } else if ( rd == null && op != null ) {
-			        fc.addRestriction( new LiteralRestrictionDescr(op, null) );
-			    }
-			}
+		( compound_operator[base]
+		| simple_operator[base]
+		| LEFT_PAREN or_restr_connective[base] RIGHT_PAREN
  		)
 	;	
 	
-simple_operator returns [String op]
+simple_operator[RestrictionConnectiveDescr base]
+	@init {
+		String op = null;
+	}
 	:
 		(	t='=='
 		|	t='>'
@@ -1021,54 +1088,49 @@
 		        op = t.getText();
 		    }
 		}
+		rd=expression_value[op]
+		{
+			    if( rd != null ) {
+			        base.addRestriction( rd );
+			    } else if ( rd == null && op != null ) {
+			        base.addRestriction( new LiteralRestrictionDescr(op, null) );
+			    }
+		}
 	;	
 	
-compound_operator[FieldConstraintDescr fc]
+compound_operator[RestrictionConnectiveDescr base]
 	@init {
 		String op = null;
+		RestrictionConnectiveDescr group = null;
 	}
 	:
 		( IN 
-		{
-		  op = "==";
-		}	
- 		LEFT_PAREN rd=expression_value[op]
-		{
-		    if( rd != null ) {
-		        fc.addRestriction( rd );
-		    }
-		}
-		( COMMA rd=expression_value[op]
-		{
-		    if( rd != null ) {
-			fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
-		        fc.addRestriction( rd );
-		    }
-		}
-		)* 
-		RIGHT_PAREN 
+			{
+			  op = "==";
+			  group = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR);
+			  base.addRestriction( group );
+			}
+		| NOT IN 
+			{
+			  op = "!=";
+			  group = new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND);
+			  base.addRestriction( group );
+			}	
 		)
-		|
-		( NOT IN 
-		{
-		  op = "!=";
-		}	
- 		LEFT_PAREN rd=expression_value[op]
-		{
-		    if( rd != null ) {
-		        fc.addRestriction( rd );
-		    }
-		}
+		LEFT_PAREN rd=expression_value[op]
+			{
+			    if( rd != null ) {
+			        group.addRestriction( rd );
+			    }
+			}
 		( COMMA rd=expression_value[op]
-		{
-		    if( rd != null ) {
-			fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));	
-		        fc.addRestriction( rd );
-		    }
-		}
+			{
+			    if( rd != null ) {
+		        	group.addRestriction( rd );
+			    }
+			}
 		)* 
 		RIGHT_PAREN 
-		)
 	;
 	
 expression_value[String op] returns [RestrictionDescr rd]
@@ -1115,7 +1177,7 @@
 	;	
 	
 
-predicate[PatternDescr pattern]
+predicate[ConditionalElementDescr base]
         @init {
 		PredicateDescr d = null;
         }
@@ -1128,7 +1190,7 @@
 		        if( text != null ) {
 			        String body = text.substring(1, text.length()-1);
 			        d.setContent( body );
-				pattern.addDescr( d );
+				base.addDescr( d );
 		        }
 		}
 	;
@@ -1299,7 +1361,7 @@
 	}
 	:
 		left=lhs_unary { d = left; }
-		( (AND|'&&')
+		( (AND|DOUBLE_AMPER)
 			right=lhs_unary
 			{
 				if ( and == null ) {
@@ -1595,7 +1657,7 @@
 
 fragment
 EscapeSequence
-    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\'|'.')
+    :   '\\' ('b'|'B'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\'|'.'|'o'|'x'|'a'|'e'|'c'|'d'|'D'|'s'|'S'|'w'|'W'|'p'|'A'|'G'|'Z'|'z'|'Q'|'E')
     |   UnicodeEscape
     |   OctalEscape
     ;
@@ -1716,19 +1778,6 @@
 	:	('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff')('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff')* 
 	;
 		
-
-SH_STYLE_SINGLE_LINE_COMMENT	
-	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
-                { $channel=HIDDEN; }
-	;
-        
-        
-C_STYLE_SINGLE_LINE_COMMENT	
-	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
-                { $channel=HIDDEN; }
-	;
-
-
 LEFT_PAREN
         :	'('
         ;
@@ -1753,14 +1802,33 @@
         :	'}'
         ;
         
+COMMA	:	','
+	;
+	
+DOUBLE_AMPER
+	:	'&&'
+	;
+	
+DOUBLE_PIPE
+	:	'||'
+	;				
+	
+SH_STYLE_SINGLE_LINE_COMMENT	
+	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
+                { $channel=HIDDEN; }
+	;
+        
+        
+C_STYLE_SINGLE_LINE_COMMENT	
+	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
+                { $channel=HIDDEN; }
+	;
+
 MULTI_LINE_COMMENT
 	:	'/*' (options{greedy=false;} : .)* '*/'
                 { $channel=HIDDEN; }
 	;
-	
-COMMA	:	','
-	;
 
 MISC 	:
-		'!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+'  | '?' | '|' | '=' | '/' | '\'' | '\\'
+		'!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+'  | '?' | '=' | '/' | '\'' | '\\' | '|' | '&'
 	;

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/PackageBuilderTest.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -99,10 +99,10 @@
 
         FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price",
                                                                      "x" );
-        pattern.addDescr( fieldBindingDescr );
+        pattern.addConstraint( fieldBindingDescr );
         fieldBindingDescr = new FieldBindingDescr( "price",
                                                    "y" );
-        pattern.addDescr( fieldBindingDescr );
+        pattern.addConstraint( fieldBindingDescr );
 
         packageDescr.addGlobal( new GlobalDescr( "map",
                                                  "java.util.Map" ) );
@@ -111,7 +111,7 @@
         returnValue.addRestriction( new ReturnValueRestrictionDescr( "==",
                                                                      "x" ) );
 
-        pattern.addDescr( returnValue );
+        pattern.addConstraint( returnValue );
 
         // There is no m this should produce errors.
         ruleDescr.setConsequence( "modify(m);" );
@@ -330,7 +330,7 @@
         literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
                                                                   "stilton" ) );
 
-        pattern.addDescr( literalDescr );
+        pattern.addConstraint( literalDescr );
 
         ruleDescr.setConsequence( "System.out.println( stilton.getFieldValue( \"name\" ) + \" \" + stilton.getFieldValue( \"price\" ) );" );
 
@@ -375,7 +375,7 @@
         literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
                                                                   "stilton" ) );
 
-        pattern.addDescr( literalDescr );
+        pattern.addConstraint( literalDescr );
 
         ruleDescr.setConsequence( "modify(stilton);" );
 
@@ -401,10 +401,10 @@
 
         FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price",
                                                                      "x" );
-        pattern.addDescr( fieldBindingDescr );
+        pattern.addConstraint( fieldBindingDescr );
         fieldBindingDescr = new FieldBindingDescr( "price",
                                                    "y" );
-        pattern.addDescr( fieldBindingDescr );
+        pattern.addConstraint( fieldBindingDescr );
 
         packageDescr.addGlobal( new GlobalDescr( "map",
                                                  "java.util.Map" ) );
@@ -413,7 +413,7 @@
         returnValue.addRestriction( new ReturnValueRestrictionDescr( "==",
                                                                      "(( (Integer) map.get( new Integer( x )) ).intValue() * y)" ) );
 
-        pattern.addDescr( returnValue );
+        pattern.addConstraint( returnValue );
 
         ruleDescr.setConsequence( "modify(stilton);" );
 
@@ -471,17 +471,17 @@
 
         final FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price",
                                                                            "x" );
-        pattern.addDescr( fieldBindingDescr );
+        pattern.addConstraint( fieldBindingDescr );
 
         final FieldBindingDescr fieldBindingDescr2 = new FieldBindingDescr( "price",
                                                                             "y" );
-        pattern.addDescr( fieldBindingDescr2 );
+        pattern.addConstraint( fieldBindingDescr2 );
 
         packageDescr.addGlobal( new GlobalDescr( "map",
                                                  "java.util.Map" ) );
 
         final PredicateDescr predicate = new PredicateDescr( "( ( Integer )map.get( new Integer(x) ) ).intValue() == y" );
-        pattern.addDescr( predicate );
+        pattern.addConstraint( predicate );
 
         ruleDescr.setConsequence( "modify(stilton);" );
 
@@ -538,10 +538,10 @@
 
         FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price",
                                                                      "x" );
-        pattern.addDescr( fieldBindingDescr );
+        pattern.addConstraint( fieldBindingDescr );
         fieldBindingDescr = new FieldBindingDescr( "price",
                                                    "y" );
-        pattern.addDescr( fieldBindingDescr );
+        pattern.addConstraint( fieldBindingDescr );
 
         packageDescr.addGlobal( new GlobalDescr( "map",
                                                  "java.util.Map" ) );
@@ -822,7 +822,7 @@
         literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
                                                                   null ) );
 
-        patternDescr.addDescr( literalDescr );
+        patternDescr.addConstraint( literalDescr );
 
         ruleDescr.setConsequence( "" );
 
@@ -850,7 +850,7 @@
         FieldConstraintDescr literalDescr = new FieldConstraintDescr( "type" );
         literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
                                                                   null ) );
-        patternDescr.addDescr( literalDescr );
+        patternDescr.addConstraint( literalDescr );
         ruleDescr.setConsequence( "" );
 
         ruleDescr = new RuleDescr( "rule-1" );
@@ -864,7 +864,7 @@
         literalDescr = new FieldConstraintDescr( "type" );
         literalDescr.addRestriction( new LiteralRestrictionDescr( "!=",
                                                                   null ) );
-        patternDescr.addDescr( literalDescr );
+        patternDescr.addConstraint( literalDescr );
         ruleDescr.setConsequence( "" );
 
         ruleDescr = new RuleDescr( "rule-2" );
@@ -880,7 +880,7 @@
         literalDescr.addRestriction( new LiteralRestrictionDescr( "!=",
                                                                   null ) );
 
-        patternDescr.addDescr( literalDescr );
+        patternDescr.addConstraint( literalDescr );
         ruleDescr.setConsequence( "" );
 
         builder.addPackage( packageDescr );
@@ -915,12 +915,12 @@
         literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
                                                                   "stilton" ) );
 
-        pattern1.addDescr( fieldBindingDescr );
-        pattern1.addDescr( literalDescr );
+        pattern1.addConstraint( fieldBindingDescr );
+        pattern1.addConstraint( literalDescr );
 
         final PatternDescr pattern2 = new PatternDescr( Cheese.class.getName() );
         lhs.addDescr( pattern2 );
-        pattern2.addDescr( fieldBindingDescr );
+        pattern2.addConstraint( fieldBindingDescr );
 
         ruleDescr.setConsequence( "modify(stilton);" );
 
@@ -996,10 +996,10 @@
 
         FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price",
                                                                      "x" );
-        pattern.addDescr( fieldBindingDescr );
+        pattern.addConstraint( fieldBindingDescr );
         fieldBindingDescr = new FieldBindingDescr( "price",
                                                    "y" );
-        pattern.addDescr( fieldBindingDescr );
+        pattern.addConstraint( fieldBindingDescr );
 
         packageDescr.addGlobal( new GlobalDescr( "map",
                                                  "java.util.Map" ) );
@@ -1008,7 +1008,7 @@
         returnValue.addRestriction( new ReturnValueRestrictionDescr( "==",
                                                                      expression ) );
 
-        pattern.addDescr( returnValue );
+        pattern.addConstraint( returnValue );
 
         ruleDescr.setConsequence( "modify(stilton);" );
     }
@@ -1027,17 +1027,17 @@
 
         final FieldBindingDescr fieldBindingDescr = new FieldBindingDescr( "price",
                                                                            "x" );
-        pattern.addDescr( fieldBindingDescr );
+        pattern.addConstraint( fieldBindingDescr );
 
         final FieldBindingDescr fieldBindingDescr2 = new FieldBindingDescr( "price",
                                                                             "y" );
-        pattern.addDescr( fieldBindingDescr2 );
+        pattern.addConstraint( fieldBindingDescr2 );
 
         packageDescr.addGlobal( new GlobalDescr( "map",
                                                  "java.util.Map" ) );
 
         final PredicateDescr predicate = new PredicateDescr( expression );
-        pattern.addDescr( predicate );
+        pattern.addConstraint( predicate );
 
         ruleDescr.setConsequence( "modify(stilton);" );
     }
@@ -1072,7 +1072,7 @@
         final PatternDescr pattern = new PatternDescr( Primitives.class.getName() );
         lhs.addDescr( pattern );
 
-        pattern.addDescr( literalDescr );
+        pattern.addConstraint( literalDescr );
 
         ruleDescr.setConsequence( "" );
 
@@ -1101,7 +1101,7 @@
         literalDescr.addRestriction( new LiteralRestrictionDescr( "==",
                                                                   "stilton" ) );
 
-        patternDescr.addDescr( literalDescr );
+        patternDescr.addConstraint( literalDescr );
 
         ceDescr.addDescr( patternDescr );
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -2657,4 +2657,57 @@
 
     }
 
+    public void testConstraintConnectors() throws Exception {
+        final PackageBuilder builder = new PackageBuilder();
+        builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_ConstraintConnectors.drl" ) ) );
+        final Package pkg = builder.getPackage();
+
+        final RuleBase ruleBase = getRuleBase();
+        ruleBase.addPackage( pkg );
+        final WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+        final List results = new ArrayList();
+        workingMemory.setGlobal( "results",
+                                 results );
+
+        final Person youngChili1 = new Person( "young chili1" );
+        youngChili1.setAge( 12 );
+        youngChili1.setHair( "blue" );
+        final Person youngChili2 = new Person( "young chili2" );
+        youngChili2.setAge( 25 );
+        youngChili2.setHair( "purple" );
+
+        final Person chili1 = new Person( "chili1" );
+        chili1.setAge( 35 );
+        chili1.setHair( "red" );
+
+        final Person chili2 = new Person( "chili2" );
+        chili2.setAge( 38 );
+        chili2.setHair( "indigigo" );
+
+        final Person oldChili1 = new Person( "old chili2" );
+        oldChili1.setAge( 45 );
+        oldChili1.setHair( "green" );
+
+        final Person oldChili2 = new Person( "old chili2" );
+        oldChili2.setAge( 48 );
+        oldChili2.setHair( "blue" );
+
+        workingMemory.assertObject( youngChili1 );
+        workingMemory.assertObject( youngChili2 );
+        workingMemory.assertObject( chili1 );
+        workingMemory.assertObject( chili2 );
+        workingMemory.assertObject( oldChili1 );
+        workingMemory.assertObject( oldChili2 );
+
+        workingMemory.fireAllRules();
+
+        assertEquals( 3,
+                      results.size() );
+        assertEquals( chili1, results.get( 0 ) );
+        assertEquals( oldChili1, results.get( 1 ) );
+        assertEquals( youngChili1, results.get( 2 ) );
+
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/TruthMaintenanceTest.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -16,17 +16,10 @@
 import org.drools.RuleBaseFactory;
 import org.drools.Sensor;
 import org.drools.WorkingMemory;
-import org.drools.audit.WorkingMemoryFileLogger;
 import org.drools.base.ClassObjectFilter;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.TruthMaintenanceSystem;
 import org.drools.compiler.PackageBuilder;
-import org.drools.event.ActivationCancelledEvent;
-import org.drools.event.ActivationCreatedEvent;
-import org.drools.event.AfterActivationFiredEvent;
-import org.drools.event.AgendaEventListener;
-import org.drools.event.BeforeActivationFiredEvent;
-import org.drools.event.DefaultAgendaEventListener;
 import org.drools.event.DefaultWorkingMemoryEventListener;
 import org.drools.event.ObjectAssertedEvent;
 import org.drools.event.ObjectModifiedEvent;
@@ -306,8 +299,8 @@
         ruleBase.addPackage( pkg );
         final WorkingMemory workingMemory = ruleBase.newStatefulSession();
 
-        final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( workingMemory );
-        logger.setFileName( "logical" );
+//        final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( workingMemory );
+//        logger.setFileName( "logical" );
 
         final List events = new ArrayList();
 
@@ -337,7 +330,7 @@
                                     sensor );
 
         workingMemory.fireAllRules();
-        logger.writeToDisk();
+//        logger.writeToDisk();
 
         assertEquals( "Only sensor is there",
                       1,

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -36,7 +36,6 @@
 import org.drools.lang.descr.AndDescr;
 import org.drools.lang.descr.AttributeDescr;
 import org.drools.lang.descr.CollectDescr;
-import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.EvalDescr;
 import org.drools.lang.descr.ExistsDescr;
 import org.drools.lang.descr.FactTemplateDescr;
@@ -54,6 +53,7 @@
 import org.drools.lang.descr.NotDescr;
 import org.drools.lang.descr.OrDescr;
 import org.drools.lang.descr.PackageDescr;
+import org.drools.lang.descr.PatternDescr;
 import org.drools.lang.descr.PredicateDescr;
 import org.drools.lang.descr.QueryDescr;
 import org.drools.lang.descr.RestrictionConnectiveDescr;
@@ -401,7 +401,6 @@
             System.err.println( parser.getErrorMessages() );
         }
         assertFalse( parser.hasErrors() );
-
     }
 
     public void testLiteralBoolAndNegativeNumbersRule() throws Exception {
@@ -423,8 +422,9 @@
 
         PatternDescr pattern = (PatternDescr) lhs.getDescrs().get( 0 );
         assertEquals( 1,
-                      pattern.getDescrs().size() );
-        FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
+                      pattern.getConstraint().getDescrs().size() );
+        AndDescr fieldAnd = (AndDescr) pattern.getConstraint();
+        FieldConstraintDescr fld = (FieldConstraintDescr) fieldAnd.getDescrs().get( 0 );
         LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "==",
@@ -438,9 +438,10 @@
 
         pattern = (PatternDescr) lhs.getDescrs().get( 1 );
         assertEquals( 1,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
 
-        fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
+        fieldAnd = (AndDescr) pattern.getConstraint();
+        fld = (FieldConstraintDescr) fieldAnd.getDescrs().get( 0 );
         lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( ">",
@@ -452,11 +453,12 @@
 
         pattern = (PatternDescr) lhs.getDescrs().get( 2 );
         assertEquals( 1,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
 
         //lit = (LiteralDescr) col.getDescrs().get( 0 );
 
-        fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
+        fieldAnd = (AndDescr) pattern.getConstraint();
+        fld = (FieldConstraintDescr) fieldAnd.getDescrs().get( 0 );
         lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
         assertEquals( ">",
                       lit.getEvaluator() );
@@ -518,7 +520,7 @@
                       ruleDescr.getLhs().getDescrs().size() );
         final PatternDescr patternDescr = (PatternDescr) ruleDescr.getLhs().getDescrs().get( 0 );
         assertEquals( 0,
-                      patternDescr.getDescrs().size() ); //this may be null, not sure as the test doesn't get this far...
+                      patternDescr.getConstraint().getDescrs().size() ); //this may be null, not sure as the test doesn't get this far...
         assertEquals( "Cheese",
                       patternDescr.getObjectType() );
 
@@ -592,105 +594,105 @@
                       accessor.toString() );
     }
 
-//        public void testFrom() throws Exception {
-//            final RuleDescr rule = parseResource( "from.drl" ).rule();
-//    
-//            if(parser.hasErrors()) {
-//                System.err.println(parser.getErrorMessages());
-//            }
-//            assertFalse(parser.hasErrors());
-//            
-//            assertNotNull( rule );
-//    
-//            assertEquals( "using_from",
-//                          rule.getName() );
-//    
-//            assertEquals(9, rule.getLhs().getDescrs().size());
-//            
-//            FromDescr from = (FromDescr) rule.getLhs().getDescrs().get(0);
-//            
-//            assertEquals(3, from.getLine());
-//            
-//            assertEquals("Foo", from.getReturnedPattern().getObjectType());
-//            assertTrue(from.getDataSource() instanceof FieldAccessDescr);
-//            assertEquals("baz", ((FieldAccessDescr) from.getDataSource()).getFieldName());        
-//            assertEquals("bar", ((FieldAccessDescr) from.getDataSource()).getVariableName());
-//            
-//            
-//            ArgumentValueDescr arg = null;
-//            
-//            from = (FromDescr) rule.getLhs().getDescrs().get(1);
-//            assertEquals("Foo", from.getReturnedPattern().getObjectType());
-//            assertEquals(0, from.getReturnedPattern().getDescrs().size());
-//            FieldAccessDescr fieldAccess = ( FieldAccessDescr ) from.getDataSource();
-//            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
-//            assertEquals(ArgumentValueDescr.STRING,  arg.getType() );
-//            
-//            from = (FromDescr) rule.getLhs().getDescrs().get(2);
-//            fieldAccess = ( FieldAccessDescr ) from.getDataSource();
-//            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
-//            assertEquals(ArgumentValueDescr.VARIABLE,  arg.getType() );        
-//            
-//            from = (FromDescr) rule.getLhs().getDescrs().get(3);
-//            fieldAccess = ( FieldAccessDescr ) from.getDataSource();
-//            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
-//            assertEquals(ArgumentValueDescr.INTEGRAL,  arg.getType() );
-//            
-//            from = (FromDescr) rule.getLhs().getDescrs().get(4);
-//            assertEquals("Whee", from.getReturnedColumn().getObjectType());
-//            assertEquals(1, from.getReturnedColumn().getDescrs().size());
-//            assertTrue(from.getDataSource() instanceof FunctionCallDescr);
-//            assertEquals("whee", ((FunctionCallDescr) from.getDataSource()).getName());        
-//            assertEquals(1, ((FunctionCallDescr) from.getDataSource()).getArguments().size());
-//            arg = ( (ArgumentValueDescr )((FunctionCallDescr) from.getDataSource()).getArguments().get(0));
-//            assertEquals("y", arg.getValue());
-//            assertEquals(ArgumentValueDescr.STRING, arg.getType());
-//    
-//            assertEquals(7, from.getLine());
-//            assertEquals(7, from.getReturnedColumn().getLine());
-//            
-//            from = (FromDescr) rule.getLhs().getDescrs().get(5);
-//            assertEquals("Foo", from.getReturnedColumn().getObjectType());
-//            assertEquals(1, from.getReturnedColumn().getDescrs().size());
-//            assertEquals("f", from.getReturnedColumn().getIdentifier());
-//            assertTrue(from.getDataSource() instanceof MethodAccessDescr);
-//            assertEquals("bar", ((MethodAccessDescr) from.getDataSource()).getVariableName());        
-//            assertEquals("la", ((MethodAccessDescr) from.getDataSource()).getMethodName());
-//            assertEquals(1, ((MethodAccessDescr) from.getDataSource()).getArguments().size());
-//            arg = (ArgumentValueDescr) ((MethodAccessDescr) from.getDataSource()).getArguments().get(0);
-//            
-//            
-//            assertEquals("x", arg.getValue());
-//            assertEquals(ArgumentValueDescr.VARIABLE, arg.getType());
-//    
-//            assertEqualsIgnoreWhitespace("whee();", ( String ) rule.getConsequence());
-//            
-//            from = (FromDescr) rule.getLhs().getDescrs().get(6);
-//            assertEquals("wa", ((FunctionCallDescr)from.getDataSource()).getName());
-//    
-//            from = (FromDescr) rule.getLhs().getDescrs().get(7);
-//            MethodAccessDescr meth = (MethodAccessDescr)from.getDataSource();
-//            assertEquals("wa", meth.getMethodName());
-//            assertEquals("la", meth.getVariableName());
-//            
-//            arg = (ArgumentValueDescr) meth.getArguments().get(0);
-//            assertEquals("42", arg.getValue());
-//            assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType());
-//            
-//            arg = (ArgumentValueDescr) meth.getArguments().get(1);
-//            assertEquals("42.42", arg.getValue());
-//            assertEquals(ArgumentValueDescr.DECIMAL, arg.getType());
-//    
-//            arg = (ArgumentValueDescr) meth.getArguments().get(2);
-//            assertEquals("false", arg.getValue());
-//            assertEquals(ArgumentValueDescr.BOOLEAN, arg.getType());
-//            
-//            arg = (ArgumentValueDescr) meth.getArguments().get(3);
-//            assertEquals("null", arg.getValue());
-//            assertEquals(ArgumentValueDescr.NULL, arg.getType());                                
-//            
-//            assertEquals("Bam", ((PatternDescr)rule.getLhs().getDescrs().get(8)).getObjectType());
-//        }
+    //        public void testFrom() throws Exception {
+    //            final RuleDescr rule = parseResource( "from.drl" ).rule();
+    //    
+    //            if(parser.hasErrors()) {
+    //                System.err.println(parser.getErrorMessages());
+    //            }
+    //            assertFalse(parser.hasErrors());
+    //            
+    //            assertNotNull( rule );
+    //    
+    //            assertEquals( "using_from",
+    //                          rule.getName() );
+    //    
+    //            assertEquals(9, rule.getLhs().getDescrs().size());
+    //            
+    //            FromDescr from = (FromDescr) rule.getLhs().getDescrs().get(0);
+    //            
+    //            assertEquals(3, from.getLine());
+    //            
+    //            assertEquals("Foo", from.getReturnedPattern().getObjectType());
+    //            assertTrue(from.getDataSource() instanceof FieldAccessDescr);
+    //            assertEquals("baz", ((FieldAccessDescr) from.getDataSource()).getFieldName());        
+    //            assertEquals("bar", ((FieldAccessDescr) from.getDataSource()).getVariableName());
+    //            
+    //            
+    //            ArgumentValueDescr arg = null;
+    //            
+    //            from = (FromDescr) rule.getLhs().getDescrs().get(1);
+    //            assertEquals("Foo", from.getReturnedPattern().getObjectType());
+    //            assertEquals(0, from.getReturnedPattern().getDescrs().size());
+    //            FieldAccessDescr fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+    //            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+    //            assertEquals(ArgumentValueDescr.STRING,  arg.getType() );
+    //            
+    //            from = (FromDescr) rule.getLhs().getDescrs().get(2);
+    //            fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+    //            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+    //            assertEquals(ArgumentValueDescr.VARIABLE,  arg.getType() );        
+    //            
+    //            from = (FromDescr) rule.getLhs().getDescrs().get(3);
+    //            fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+    //            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+    //            assertEquals(ArgumentValueDescr.INTEGRAL,  arg.getType() );
+    //            
+    //            from = (FromDescr) rule.getLhs().getDescrs().get(4);
+    //            assertEquals("Whee", from.getReturnedColumn().getObjectType());
+    //            assertEquals(1, from.getReturnedColumn().getDescrs().size());
+    //            assertTrue(from.getDataSource() instanceof FunctionCallDescr);
+    //            assertEquals("whee", ((FunctionCallDescr) from.getDataSource()).getName());        
+    //            assertEquals(1, ((FunctionCallDescr) from.getDataSource()).getArguments().size());
+    //            arg = ( (ArgumentValueDescr )((FunctionCallDescr) from.getDataSource()).getArguments().get(0));
+    //            assertEquals("y", arg.getValue());
+    //            assertEquals(ArgumentValueDescr.STRING, arg.getType());
+    //    
+    //            assertEquals(7, from.getLine());
+    //            assertEquals(7, from.getReturnedColumn().getLine());
+    //            
+    //            from = (FromDescr) rule.getLhs().getDescrs().get(5);
+    //            assertEquals("Foo", from.getReturnedColumn().getObjectType());
+    //            assertEquals(1, from.getReturnedColumn().getDescrs().size());
+    //            assertEquals("f", from.getReturnedColumn().getIdentifier());
+    //            assertTrue(from.getDataSource() instanceof MethodAccessDescr);
+    //            assertEquals("bar", ((MethodAccessDescr) from.getDataSource()).getVariableName());        
+    //            assertEquals("la", ((MethodAccessDescr) from.getDataSource()).getMethodName());
+    //            assertEquals(1, ((MethodAccessDescr) from.getDataSource()).getArguments().size());
+    //            arg = (ArgumentValueDescr) ((MethodAccessDescr) from.getDataSource()).getArguments().get(0);
+    //            
+    //            
+    //            assertEquals("x", arg.getValue());
+    //            assertEquals(ArgumentValueDescr.VARIABLE, arg.getType());
+    //    
+    //            assertEqualsIgnoreWhitespace("whee();", ( String ) rule.getConsequence());
+    //            
+    //            from = (FromDescr) rule.getLhs().getDescrs().get(6);
+    //            assertEquals("wa", ((FunctionCallDescr)from.getDataSource()).getName());
+    //    
+    //            from = (FromDescr) rule.getLhs().getDescrs().get(7);
+    //            MethodAccessDescr meth = (MethodAccessDescr)from.getDataSource();
+    //            assertEquals("wa", meth.getMethodName());
+    //            assertEquals("la", meth.getVariableName());
+    //            
+    //            arg = (ArgumentValueDescr) meth.getArguments().get(0);
+    //            assertEquals("42", arg.getValue());
+    //            assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType());
+    //            
+    //            arg = (ArgumentValueDescr) meth.getArguments().get(1);
+    //            assertEquals("42.42", arg.getValue());
+    //            assertEquals(ArgumentValueDescr.DECIMAL, arg.getType());
+    //    
+    //            arg = (ArgumentValueDescr) meth.getArguments().get(2);
+    //            assertEquals("false", arg.getValue());
+    //            assertEquals(ArgumentValueDescr.BOOLEAN, arg.getType());
+    //            
+    //            arg = (ArgumentValueDescr) meth.getArguments().get(3);
+    //            assertEquals("null", arg.getValue());
+    //            assertEquals(ArgumentValueDescr.NULL, arg.getType());                                
+    //            
+    //            assertEquals("Bam", ((PatternDescr)rule.getLhs().getDescrs().get(8)).getObjectType());
+    //        }
 
     public void testSimpleRule() throws Exception {
         final RuleDescr rule = parseResource( "simple_rule.drl" ).rule();
@@ -722,9 +724,10 @@
                       first.getObjectType() );
 
         assertEquals( 1,
-                      first.getDescrs().size() );
+                      first.getConstraint().getDescrs().size() );
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) first.getDescrs().get( 0 );
+        AndDescr fieldAnd = (AndDescr) first.getConstraint();
+        FieldConstraintDescr fld = (FieldConstraintDescr) fieldAnd.getDescrs().get( 0 );
         LiteralRestrictionDescr constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertNotNull( constraint );
@@ -743,18 +746,19 @@
         assertEquals( "Bar",
                       second.getObjectType() );
 
+        //System.err.println( second.getDescrs() );
+
+        fieldAnd = (AndDescr) second.getConstraint();
         assertEquals( 2,
-                      second.getDescrs().size() );
+                      fieldAnd.getDescrs().size() );
 
-        //System.err.println( second.getDescrs() );
-
-        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) second.getDescrs().get( 0 );
+        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) fieldAnd.getDescrs().get( 0 );
         assertEquals( "a",
                       fieldBindingDescr.getFieldName() );
         assertEquals( "a4",
                       fieldBindingDescr.getIdentifier() );
 
-        fld = (FieldConstraintDescr) second.getDescrs().get( 1 );
+        fld = (FieldConstraintDescr) fieldAnd.getDescrs().get( 1 );
         constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertNotNull( constraint );
@@ -797,10 +801,13 @@
         assertEquals( "Person",
                       pattern.getObjectType() );
         assertEquals( 1,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 3,
+        AndDescr and = (AndDescr) pattern.getConstraint();
+        FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs().get( 0 );
+        assertEquals( RestrictionConnectiveDescr.AND,
+                      ((RestrictionConnectiveDescr) fld.getRestriction()).getConnective() );
+        assertEquals( 2,
                       fld.getRestrictions().size() );
         assertEquals( "age",
                       fld.getFieldName() );
@@ -811,11 +818,7 @@
         assertEquals( "30",
                       lit.getText() );
 
-        RestrictionConnectiveDescr con = (RestrictionConnectiveDescr) fld.getRestrictions().get( 1 );
-        assertEquals( RestrictionConnectiveDescr.AND,
-                      con.getConnective() );
-
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 2 );
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 1 );
         assertEquals( "<",
                       lit.getEvaluator() );
         assertEquals( "40",
@@ -826,30 +829,33 @@
         assertEquals( "Vehicle",
                       pattern.getObjectType() );
         assertEquals( 2,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
 
-        fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 3,
-                      fld.getRestrictions().size() );
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+        and = (AndDescr) pattern.getConstraint();
+        fld = (FieldConstraintDescr) and.getDescrs().get( 0 );
         assertEquals( "type",
                       fld.getFieldName() );
+        assertEquals( 1,
+                      fld.getRestrictions().size() );
+        RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fld.getRestrictions().get( 0 );
+        assertEquals( RestrictionConnectiveDescr.OR,
+                      or.getConnective() );
+        assertEquals( 2,
+                      or.getRestrictions().size() );
+        lit = (LiteralRestrictionDescr) or.getRestrictions().get( 0 );
         assertEquals( "==",
                       lit.getEvaluator() );
         assertEquals( "sedan",
                       lit.getText() );
-        con = (RestrictionConnectiveDescr) fld.getRestrictions().get( 1 );
-        assertEquals( RestrictionConnectiveDescr.OR,
-                      con.getConnective() );
 
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 2 );
+        lit = (LiteralRestrictionDescr) or.getRestrictions().get( 1 );
         assertEquals( "==",
                       lit.getEvaluator() );
         assertEquals( "wagon",
                       lit.getText() );
 
         //now the second field
-        fld = (FieldConstraintDescr) pattern.getDescrs().get( 1 );
+        fld = (FieldConstraintDescr) and.getDescrs().get( 1 );
         assertEquals( 1,
                       fld.getRestrictions().size() );
         lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
@@ -889,7 +895,7 @@
         assertEquals( "Bar",
                       first.getObjectType() );
         assertEquals( 1,
-                      first.getDescrs().size() );
+                      first.getConstraint().getDescrs().size() );
 
         // Check second pattern
         final PatternDescr second = (PatternDescr) lhs.getDescrs().get( 1 );
@@ -946,11 +952,11 @@
                       first.getObjectType() );
 
         assertEquals( 1,
-                      first.getDescrs().size() );
+                      first.getConstraint().getDescrs().size() );
 
         //LiteralDescr constraint = (LiteralDescr) first.getDescrs().get( 0 );
-
-        FieldConstraintDescr fld = (FieldConstraintDescr) first.getDescrs().get( 0 );
+        AndDescr and = (AndDescr) first.getConstraint();
+        FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs().get( 0 );
         LiteralRestrictionDescr constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertNotNull( constraint );
@@ -969,18 +975,19 @@
         assertEquals( "Bar",
                       second.getObjectType() );
 
+        and = (AndDescr) second.getConstraint();
         assertEquals( 2,
-                      second.getDescrs().size() );
+                      and.getDescrs().size() );
 
         //System.err.println( second.getDescrs() );
 
-        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) second.getDescrs().get( 0 );
+        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) and.getDescrs().get( 0 );
         assertEquals( "a",
                       fieldBindingDescr.getFieldName() );
         assertEquals( "a4",
                       fieldBindingDescr.getIdentifier() );
 
-        fld = (FieldConstraintDescr) second.getDescrs().get( 1 );
+        fld = (FieldConstraintDescr) and.getDescrs().get( 1 );
 
         constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
@@ -1023,9 +1030,10 @@
         assertEquals( "Cheese",
                       pattern.getObjectType() );
         assertEquals( 1,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
 
-        final FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
+        final AndDescr and = (AndDescr) pattern.getConstraint();
+        final FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs().get( 0 );
         final LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "==",
@@ -1120,9 +1128,10 @@
                       first.getObjectType() );
 
         assertEquals( 1,
-                      first.getDescrs().size() );
+                      first.getConstraint().getDescrs().size() );
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) first.getDescrs().get( 0 );
+        AndDescr and = (AndDescr) first.getConstraint();
+        FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs().get( 0 );
         LiteralRestrictionDescr constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
         //LiteralDescr constraint = (LiteralDescr) first.getDescrs().get( 0 );
 
@@ -1142,16 +1151,17 @@
         assertEquals( "Bar",
                       second.getObjectType() );
 
+        and = (AndDescr) second.getConstraint();
         assertEquals( 2,
-                      second.getDescrs().size() );
+                      and.getDescrs().size() );
         //check it has field bindings.
-        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) second.getDescrs().get( 0 );
+        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) and.getDescrs().get( 0 );
         assertEquals( "a",
                       fieldBindingDescr.getFieldName() );
         assertEquals( "a4",
                       fieldBindingDescr.getIdentifier() );
 
-        fld = (FieldConstraintDescr) second.getDescrs().get( 1 );
+        fld = (FieldConstraintDescr) and.getDescrs().get( 1 );
 
         constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
@@ -1295,11 +1305,11 @@
                       pattern.getObjectType() );
 
         assertEquals( 2,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
         assertEquals( "age",
-                      ((FieldConstraintDescr) pattern.getDescrs().get( 0 )).getFieldName() );
+                      ((FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 )).getFieldName() );
         assertEquals( "location",
-                      ((FieldConstraintDescr) pattern.getDescrs().get( 1 )).getFieldName() );
+                      ((FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 1 )).getFieldName() );
 
         pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
         assertEquals( "Bar",
@@ -1327,11 +1337,11 @@
                       pattern.getObjectType() );
 
         assertEquals( 2,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
         assertEquals( "age",
-                      ((FieldConstraintDescr) pattern.getDescrs().get( 0 )).getFieldName() );
+                      ((FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 )).getFieldName() );
         assertEquals( "location",
-                      ((FieldConstraintDescr) pattern.getDescrs().get( 1 )).getFieldName() );
+                      ((FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 1 )).getFieldName() );
 
         assertNotNull( (String) rule.getConsequence() );
 
@@ -1399,12 +1409,12 @@
                       lhs.getDescrs().size() );
         final PatternDescr cheese = (PatternDescr) lhs.getDescrs().get( 0 );
         assertEquals( 1,
-                      cheese.getDescrs().size() );
+                      cheese.getConstraint().getDescrs().size() );
         assertEquals( "Cheese",
                       cheese.getObjectType() );
         assertEquals( 1,
                       lhs.getDescrs().size() );
-        final FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese.getDescrs().get( 0 );
+        final FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese.getConstraint().getDescrs().get( 0 );
         assertEquals( "type",
                       fieldBinding.getFieldName() );
 
@@ -1426,11 +1436,11 @@
                       cheese.getObjectType() );
         assertEquals( 2,
                       lhs.getDescrs().size() );
-        FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese.getDescrs().get( 0 );
+        FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese.getConstraint().getDescrs().get( 0 );
         assertEquals( "type",
                       fieldBinding.getFieldName() );
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) cheese.getDescrs().get( 1 );
+        FieldConstraintDescr fld = (FieldConstraintDescr) cheese.getConstraint().getDescrs().get( 1 );
         LiteralRestrictionDescr literalDescr = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
         //LiteralDescr literalDescr = (LiteralDescr) cheese.getDescrs().get( 1 );
         assertEquals( "type",
@@ -1441,11 +1451,11 @@
                       literalDescr.getText() );
 
         final PatternDescr person = (PatternDescr) lhs.getDescrs().get( 1 );
-        fieldBinding = (FieldBindingDescr) person.getDescrs().get( 0 );
+        fieldBinding = (FieldBindingDescr) person.getConstraint().getDescrs().get( 0 );
         assertEquals( "name",
                       fieldBinding.getFieldName() );
 
-        fld = (FieldConstraintDescr) person.getDescrs().get( 1 );
+        fld = (FieldConstraintDescr) person.getConstraint().getDescrs().get( 1 );
         literalDescr = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "name",
@@ -1455,7 +1465,7 @@
         assertEquals( "bob",
                       literalDescr.getText() );
 
-        fld = (FieldConstraintDescr) person.getDescrs().get( 2 );
+        fld = (FieldConstraintDescr) person.getConstraint().getDescrs().get( 2 );
         final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "likes",
@@ -1535,9 +1545,9 @@
                       right.getObjectType() );
 
         assertEquals( 1,
-                      left.getDescrs().size() );
+                      left.getConstraint().getDescrs().size() );
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) left.getDescrs().get( 0 );
+        FieldConstraintDescr fld = (FieldConstraintDescr) left.getConstraint().getDescrs().get( 0 );
         LiteralRestrictionDescr literal = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "==",
@@ -1548,9 +1558,9 @@
                       literal.getText() );
 
         assertEquals( 1,
-                      right.getDescrs().size() );
+                      right.getConstraint().getDescrs().size() );
 
-        fld = (FieldConstraintDescr) right.getDescrs().get( 0 );
+        fld = (FieldConstraintDescr) right.getConstraint().getDescrs().get( 0 );
         literal = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "==",
@@ -1571,9 +1581,9 @@
         assertEquals( "Cheese",
                       right.getObjectType() );
         assertEquals( 1,
-                      left.getDescrs().size() );
+                      left.getConstraint().getDescrs().size() );
 
-        fld = (FieldConstraintDescr) left.getDescrs().get( 0 );
+        fld = (FieldConstraintDescr) left.getConstraint().getDescrs().get( 0 );
         literal = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "==",
@@ -1584,9 +1594,9 @@
                       literal.getText() );
 
         assertEquals( 1,
-                      right.getDescrs().size() );
+                      right.getConstraint().getDescrs().size() );
 
-        fld = (FieldConstraintDescr) right.getDescrs().get( 0 );
+        fld = (FieldConstraintDescr) right.getConstraint().getDescrs().get( 0 );
         literal = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "==",
@@ -1673,7 +1683,7 @@
         assertEquals( "Person",
                       secondFact.getObjectType() );
         assertEquals( 1,
-                      secondFact.getDescrs().size() );
+                      secondFact.getConstraint().getDescrs().size() );
         assertEquals( "foo",
                       secondFact.getIdentifier() );
 
@@ -1828,10 +1838,10 @@
                       rule.getLhs().getDescrs().size() );
         final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
         assertEquals( 1,
-                      col.getDescrs().size() );
+                      col.getConstraint().getDescrs().size() );
         assertEquals( "Foo",
                       col.getObjectType() );
-        final FieldConstraintDescr fld = (FieldConstraintDescr) col.getDescrs().get( 0 );
+        final FieldConstraintDescr fld = (FieldConstraintDescr) col.getConstraint().getDescrs().get( 0 );
         final ReturnValueRestrictionDescr retval = (ReturnValueRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "a + b",
@@ -1856,11 +1866,12 @@
         assertEquals( 1,
                       rule.getLhs().getDescrs().size() );
         final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        AndDescr and = (AndDescr) col.getConstraint();
         assertEquals( 2,
-                      col.getDescrs().size() );
+                      and.getDescrs().size() );
 
-        final FieldBindingDescr field = (FieldBindingDescr) col.getDescrs().get( 0 );
-        final PredicateDescr pred = (PredicateDescr) col.getDescrs().get( 1 );
+        final FieldBindingDescr field = (FieldBindingDescr) and.getDescrs().get( 0 );
+        final PredicateDescr pred = (PredicateDescr) and.getDescrs().get( 1 );
         assertEquals( "age",
                       field.getFieldName() );
         assertEquals( "$age2",
@@ -1885,14 +1896,14 @@
                       rule.getLhs().getDescrs().size() );
 
         PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final FieldBindingDescr fieldBinding = (FieldBindingDescr) pattern.getDescrs().get( 0 );
+        final FieldBindingDescr fieldBinding = (FieldBindingDescr) pattern.getConstraint().getDescrs().get( 0 );
         assertEquals( "$likes",
                       fieldBinding.getIdentifier() );
 
         final NotDescr not = (NotDescr) rule.getLhs().getDescrs().get( 1 );
         pattern = (PatternDescr) not.getDescrs().get( 0 );
 
-        final FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
+        final FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
         final VariableRestrictionDescr boundVariable = (VariableRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "type",
@@ -2108,8 +2119,8 @@
         assertEquals( "Foo",
                       col.getObjectType() );
         assertEquals( 1,
-                      col.getDescrs().size() );
-        final FieldConstraintDescr fld = (FieldConstraintDescr) col.getDescrs().get( 0 );
+                      col.getConstraint().getDescrs().size() );
+        final FieldConstraintDescr fld = (FieldConstraintDescr) col.getConstraint().getDescrs().get( 0 );
         final LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
 
         assertEquals( "bar",
@@ -2151,43 +2162,57 @@
         parseResource( "extra_lhs_newline.drl" ).compilation_unit();
         assertFalse( this.parser.hasErrors() );
     }
-    
+
     public void testPackageAttributes() throws Exception {
         parseResource( "package_attributes.drl" ).compilation_unit();
-        if (this.parser.hasErrors()) {
-            System.err.println(this.parser.getErrorMessages());
+        if ( this.parser.hasErrors() ) {
+            System.err.println( this.parser.getErrorMessages() );
         }
         assertFalse( this.parser.hasErrors() );
-        
+
         PackageDescr pkg = this.parser.getPackageDescr();
         AttributeDescr at = (AttributeDescr) pkg.getAttributes().get( 0 );
-        assertEquals("agenda-group", at.getName());
-        assertEquals( "x", at.getValue() );
+        assertEquals( "agenda-group",
+                      at.getName() );
+        assertEquals( "x",
+                      at.getValue() );
         at = (AttributeDescr) pkg.getAttributes().get( 1 );
-        assertEquals("dialect", at.getName());
-        assertEquals( "java", at.getValue() );        
-        
-        assertEquals(2, pkg.getRules().size());
-        
+        assertEquals( "dialect",
+                      at.getName() );
+        assertEquals( "java",
+                      at.getValue() );
+
+        assertEquals( 2,
+                      pkg.getRules().size() );
+
         RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
-        assertEquals("bar", rule.getName());
+        assertEquals( "bar",
+                      rule.getName() );
         at = (AttributeDescr) rule.getAttributes().get( 0 );
-        assertEquals("agenda-group", at.getName());
-        assertEquals( "x", at.getValue() );
+        assertEquals( "agenda-group",
+                      at.getName() );
+        assertEquals( "x",
+                      at.getValue() );
         at = (AttributeDescr) rule.getAttributes().get( 1 );
-        assertEquals("dialect", at.getName());
-        assertEquals( "java", at.getValue() );        
+        assertEquals( "dialect",
+                      at.getName() );
+        assertEquals( "java",
+                      at.getValue() );
 
         rule = (RuleDescr) pkg.getRules().get( 1 );
-        assertEquals("baz", rule.getName());
+        assertEquals( "baz",
+                      rule.getName() );
         at = (AttributeDescr) rule.getAttributes().get( 0 );
-        assertEquals("dialect", at.getName());
-        assertEquals( "mvel", at.getValue() );
+        assertEquals( "dialect",
+                      at.getName() );
+        assertEquals( "mvel",
+                      at.getValue() );
         at = (AttributeDescr) rule.getAttributes().get( 1 );
-        assertEquals("agenda-group", at.getName());
-        assertEquals( "x", at.getValue() );        
-        
-        
+        assertEquals( "agenda-group",
+                      at.getName() );
+        assertEquals( "x",
+                      at.getValue() );
+
     }
 
     public void testStatementOrdering1() throws Exception {
@@ -2378,7 +2403,7 @@
         assertFalse( this.parser.getErrorMessages().toString(),
                      this.parser.hasErrors() );
 
-        final List constraints = pattern.getDescrs();
+        final List constraints = pattern.getConstraint().getDescrs();
         assertEquals( 2,
                       constraints.size() );
 
@@ -2394,12 +2419,13 @@
 
     public void testPredicate2() throws Exception {
         final PatternDescr pattern = new PatternDescr();
-        parse( "( $var.equals(\"xyz\") )" ).constraints( pattern );
+        // predicates are also prefixed by the eval keyword
+        parse( "eval( $var.equals(\"xyz\") )" ).constraints( pattern );
 
         assertFalse( this.parser.getErrorMessages().toString(),
                      this.parser.hasErrors() );
 
-        final List constraints = pattern.getDescrs();
+        final List constraints = pattern.getConstraint().getDescrs();
         assertEquals( 1,
                       constraints.size() );
 
@@ -2504,14 +2530,17 @@
             System.err.println( parser.getErrorMessages() );
         }
         assertFalse( parser.hasErrors() );
-        
-        assertEquals( 2, descrs.getDescrs().size());
+
+        assertEquals( 2,
+                      descrs.getDescrs().size() );
         PatternDescr pat = (PatternDescr) descrs.getDescrs().get( 1 );
-        FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat.getDescrs().get( 0 );
+        FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat.getConstraint().getDescrs().get( 0 );
         VariableRestrictionDescr restr = (VariableRestrictionDescr) fieldConstr.getRestrictions().get( 0 );
-        
-        assertEquals( "memberOf", restr.getEvaluator() );
-        assertEquals( "$cities", restr.getIdentifier() );
+
+        assertEquals( "memberOf",
+                      restr.getEvaluator() );
+        assertEquals( "$cities",
+                      restr.getIdentifier() );
     }
 
     public void testNotMemberof() throws Exception {
@@ -2527,14 +2556,17 @@
             System.err.println( parser.getErrorMessages() );
         }
         assertFalse( parser.hasErrors() );
-        
-        assertEquals( 2, descrs.getDescrs().size());
+
+        assertEquals( 2,
+                      descrs.getDescrs().size() );
         PatternDescr pat = (PatternDescr) descrs.getDescrs().get( 1 );
-        FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat.getDescrs().get( 0 );
+        FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat.getConstraint().getDescrs().get( 0 );
         VariableRestrictionDescr restr = (VariableRestrictionDescr) fieldConstr.getRestrictions().get( 0 );
-        
-        assertEquals( "not memberOf", restr.getEvaluator() );
-        assertEquals( "$cities", restr.getIdentifier() );
+
+        assertEquals( "not memberOf",
+                      restr.getEvaluator() );
+        assertEquals( "$cities",
+                      restr.getIdentifier() );
     }
 
     public void testInOperator() throws Exception {
@@ -2556,10 +2588,12 @@
         assertEquals( "Person",
                       pattern.getObjectType() );
         assertEquals( 1,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 3,
+        FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
+        assertEquals( RestrictionConnectiveDescr.AND,
+                      fld.getRestriction().getConnective() );
+        assertEquals( 2,
                       fld.getRestrictions().size() );
         assertEquals( "age",
                       fld.getFieldName() );
@@ -2570,11 +2604,7 @@
         assertEquals( "30",
                       lit.getText() );
 
-        RestrictionConnectiveDescr con = (RestrictionConnectiveDescr) fld.getRestrictions().get( 1 );
-        assertEquals( RestrictionConnectiveDescr.AND,
-                      con.getConnective() );
-
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 2 );
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 1 );
         assertEquals( "<",
                       lit.getEvaluator() );
         assertEquals( "40",
@@ -2585,30 +2615,34 @@
         assertEquals( "Vehicle",
                       pattern.getObjectType() );
         assertEquals( 2,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
 
-        fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 3,
-                      fld.getRestrictions().size() );
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+        fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
         assertEquals( "type",
                       fld.getFieldName() );
+        assertEquals( 1,
+                      fld.getRestrictions().size() );
+        
+        RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fld.getRestrictions().get( 0 );
+        assertEquals( RestrictionConnectiveDescr.OR,
+                      or.getConnective() );
+        assertEquals( 2,
+                      or.getRestrictions().size() );
+        
+        lit = (LiteralRestrictionDescr) or.getRestrictions().get( 0 );
         assertEquals( "==",
                       lit.getEvaluator() );
         assertEquals( "sedan",
                       lit.getText() );
-        con = (RestrictionConnectiveDescr) fld.getRestrictions().get( 1 );
-        assertEquals( RestrictionConnectiveDescr.OR,
-                      con.getConnective() );
 
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 2 );
+        lit = (LiteralRestrictionDescr) or.getRestrictions().get( 1 );
         assertEquals( "==",
                       lit.getEvaluator() );
         assertEquals( "wagon",
                       lit.getText() );
 
         //now the second field
-        fld = (FieldConstraintDescr) pattern.getDescrs().get( 1 );
+        fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 1 );
         assertEquals( 1,
                       fld.getRestrictions().size() );
         lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
@@ -2638,10 +2672,10 @@
         assertEquals( "Person",
                       pattern.getObjectType() );
         assertEquals( 1,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 3,
+        FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
+        assertEquals( 2,
                       fld.getRestrictions().size() );
         assertEquals( "age",
                       fld.getFieldName() );
@@ -2652,11 +2686,7 @@
         assertEquals( "30",
                       lit.getText() );
 
-        RestrictionConnectiveDescr con = (RestrictionConnectiveDescr) fld.getRestrictions().get( 1 );
-        assertEquals( RestrictionConnectiveDescr.AND,
-                      con.getConnective() );
-
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 2 );
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 1 );
         assertEquals( "<",
                       lit.getEvaluator() );
         assertEquals( "40",
@@ -2667,10 +2697,10 @@
         assertEquals( "Vehicle",
                       pattern.getObjectType() );
         assertEquals( 2,
-                      pattern.getDescrs().size() );
+                      pattern.getConstraint().getDescrs().size() );
 
-        fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 3,
+        fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
+        assertEquals( 2,
                       fld.getRestrictions().size() );
         lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
         assertEquals( "type",
@@ -2679,18 +2709,15 @@
                       lit.getEvaluator() );
         assertEquals( "sedan",
                       lit.getText() );
-        con = (RestrictionConnectiveDescr) fld.getRestrictions().get( 1 );
-        assertEquals( RestrictionConnectiveDescr.AND,
-                      con.getConnective() );
 
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 2 );
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 1 );
         assertEquals( "!=",
                       lit.getEvaluator() );
         assertEquals( "wagon",
                       lit.getText() );
 
         //now the second field
-        fld = (FieldConstraintDescr) pattern.getDescrs().get( 1 );
+        fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 1 );
         assertEquals( 1,
                       fld.getRestrictions().size() );
         lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
@@ -2701,6 +2728,259 @@
 
     }
 
+    public void testConstraintAndConnective() throws Exception {
+        final String text = "Person( age < 42 && location==\"atlanta\")";
+        final CharStream charStream = new ANTLRStringStream( text );
+        final DRLLexer lexer = new DRLLexer( charStream );
+        final TokenStream tokenStream = new SwitchingCommonTokenStream( lexer );
+        final DRLParser parser = new DRLParser( tokenStream );
+
+        PatternDescr pattern = (PatternDescr) parser.fact();
+        assertFalse( parser.getErrorMessages().toString(),
+                     parser.hasErrors() );
+
+        assertEquals( 2,
+                      pattern.getDescrs().size() );
+        FieldConstraintDescr fcd = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
+        assertEquals( "age",
+                      fcd.getFieldName() );
+        fcd = (FieldConstraintDescr) pattern.getDescrs().get( 1 );
+        assertEquals( "location",
+                      fcd.getFieldName() );
+    }
+
+    public void testConstraintOrConnective() throws Exception {
+        final String text = "Person( age < 42 || location==\"atlanta\")";
+        final CharStream charStream = new ANTLRStringStream( text );
+        final DRLLexer lexer = new DRLLexer( charStream );
+        final TokenStream tokenStream = new SwitchingCommonTokenStream( lexer );
+        final DRLParser parser = new DRLParser( tokenStream );
+
+        PatternDescr pattern = (PatternDescr) parser.fact();
+        assertFalse( parser.getErrorMessages().toString(),
+                     parser.hasErrors() );
+
+        assertEquals( 1,
+                      pattern.getDescrs().size() );
+        OrDescr or = (OrDescr) pattern.getDescrs().get( 0 );
+        assertEquals( 2,
+                      or.getDescrs().size() );
+        FieldConstraintDescr fcd = (FieldConstraintDescr) or.getDescrs().get( 0 );
+        assertEquals( "age",
+                      fcd.getFieldName() );
+        fcd = (FieldConstraintDescr) or.getDescrs().get( 1 );
+        assertEquals( "location",
+                      fcd.getFieldName() );
+    }
+
+    public void testConstraintConnectivesPrecedence() throws Exception {
+        final String text = "Person( age < 42 && location==\"atlanta\" || age > 20 && location==\"Seatle\" || location == \"Chicago\")";
+        final CharStream charStream = new ANTLRStringStream( text );
+        final DRLLexer lexer = new DRLLexer( charStream );
+        final TokenStream tokenStream = new SwitchingCommonTokenStream( lexer );
+        final DRLParser parser = new DRLParser( tokenStream );
+
+        PatternDescr pattern = (PatternDescr) parser.fact();
+        assertFalse( parser.getErrorMessages().toString(),
+                     parser.hasErrors() );
+
+        assertEquals( 1,
+                      pattern.getDescrs().size() );
+        OrDescr or = (OrDescr) pattern.getDescrs().get( 0 );
+        assertEquals( 3,
+                      or.getDescrs().size() );
+
+        AndDescr and = (AndDescr) or.getDescrs().get( 0 );
+        assertEquals( 2,
+                      and.getDescrs().size() );
+        FieldConstraintDescr fcd = (FieldConstraintDescr) and.getDescrs().get( 0 );
+        assertEquals( "age",
+                      fcd.getFieldName() );
+        assertEquals( "<",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "42",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+        fcd = (FieldConstraintDescr) and.getDescrs().get( 1 );
+        assertEquals( "location",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "atlanta",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+
+        and = (AndDescr) or.getDescrs().get( 1 );
+        assertEquals( 2,
+                      and.getDescrs().size() );
+        fcd = (FieldConstraintDescr) and.getDescrs().get( 0 );
+        assertEquals( "age",
+                      fcd.getFieldName() );
+        assertEquals( ">",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "20",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+        fcd = (FieldConstraintDescr) and.getDescrs().get( 1 );
+        assertEquals( "location",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "Seatle",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+
+        fcd = (FieldConstraintDescr) or.getDescrs().get( 2 );
+        assertEquals( "location",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "Chicago",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+
+    }
+
+    public void testConstraintConnectivesPrecedenceWithBracks() throws Exception {
+        final String text = "Person( age < 42 && ( location==\"atlanta\" || age > 20 && location==\"Seatle\") || location == \"Chicago\")";
+        final CharStream charStream = new ANTLRStringStream( text );
+        final DRLLexer lexer = new DRLLexer( charStream );
+        final TokenStream tokenStream = new SwitchingCommonTokenStream( lexer );
+        final DRLParser parser = new DRLParser( tokenStream );
+
+        PatternDescr pattern = (PatternDescr) parser.fact();
+        assertFalse( parser.getErrorMessages().toString(),
+                     parser.hasErrors() );
+
+        assertEquals( 1,
+                      pattern.getDescrs().size() );
+        OrDescr or1 = (OrDescr) pattern.getDescrs().get( 0 );
+        assertEquals( 2,
+                      or1.getDescrs().size() );
+
+        AndDescr and1 = (AndDescr) or1.getDescrs().get( 0 );
+        assertEquals( 2,
+                      and1.getDescrs().size() );
+        FieldConstraintDescr fcd = (FieldConstraintDescr) and1.getDescrs().get( 0 );
+        assertEquals( "age",
+                      fcd.getFieldName() );
+        assertEquals( "<",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "42",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+
+        OrDescr or2 = (OrDescr) and1.getDescrs().get( 1 );
+        fcd = (FieldConstraintDescr) or2.getDescrs().get( 0 );
+        assertEquals( "location",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "atlanta",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+
+        AndDescr and2 = (AndDescr) or2.getDescrs().get( 1 );
+        assertEquals( 2,
+                      and2.getDescrs().size() );
+        fcd = (FieldConstraintDescr) and2.getDescrs().get( 0 );
+        assertEquals( "age",
+                      fcd.getFieldName() );
+        assertEquals( ">",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "20",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+        fcd = (FieldConstraintDescr) and2.getDescrs().get( 1 );
+        assertEquals( "location",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "Seatle",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+
+        fcd = (FieldConstraintDescr) or1.getDescrs().get( 1 );
+        assertEquals( "location",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "Chicago",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+    }
+
+    public void testConstraintConnectivesPrecedenceWithBracks2() throws Exception {
+        final String text = "Person( ( age == 70 && hair == \"black\" ) || ( age == 40 && hair == \"pink\" ) || ( age == 12 && ( hair == \"yellow\" || hair == \"blue\" ) ) )";
+        final CharStream charStream = new ANTLRStringStream( text );
+        final DRLLexer lexer = new DRLLexer( charStream );
+        final TokenStream tokenStream = new SwitchingCommonTokenStream( lexer );
+        final DRLParser parser = new DRLParser( tokenStream );
+
+        PatternDescr pattern = (PatternDescr) parser.fact();
+        assertFalse( parser.getErrorMessages().toString(),
+                     parser.hasErrors() );
+
+        assertEquals( 1,
+                      pattern.getDescrs().size() );
+        OrDescr or1 = (OrDescr) pattern.getDescrs().get( 0 );
+        assertEquals( 3,
+                      or1.getDescrs().size() );
+
+        AndDescr and1 = (AndDescr) or1.getDescrs().get( 0 );
+        AndDescr and2 = (AndDescr) or1.getDescrs().get( 1 );
+        AndDescr and3 = (AndDescr) or1.getDescrs().get( 2 );
+
+        assertEquals( 2,
+                      and1.getDescrs().size() );
+        FieldConstraintDescr fcd = (FieldConstraintDescr) and1.getDescrs().get( 0 );
+        assertEquals( "age",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "70",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+        fcd = (FieldConstraintDescr) and1.getDescrs().get( 1 );
+        assertEquals( "hair",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "black",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+
+        assertEquals( 2,
+                      and2.getDescrs().size() );
+        fcd = (FieldConstraintDescr) and2.getDescrs().get( 0 );
+        assertEquals( "age",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "40",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+        fcd = (FieldConstraintDescr) and2.getDescrs().get( 1 );
+        assertEquals( "hair",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "pink",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+
+        assertEquals( 2,
+                      and3.getDescrs().size() );
+        fcd = (FieldConstraintDescr) and3.getDescrs().get( 0 );
+        assertEquals( "age",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "12",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+        OrDescr or2 = (OrDescr) and3.getDescrs().get( 1 );
+        fcd = (FieldConstraintDescr) or2.getDescrs().get( 0 );
+        assertEquals( "hair",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "yellow",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+        fcd = (FieldConstraintDescr) or2.getDescrs().get( 1 );
+        assertEquals( "hair",
+                      fcd.getFieldName() );
+        assertEquals( "==",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
+        assertEquals( "blue",
+                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+    }
+
     private DRLParser parse(final String text) throws Exception {
         this.parser = newParser( newTokenStream( newLexer( newCharStream( text ) ) ) );
         return this.parser;

Added: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ConstraintConnectors.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ConstraintConnectors.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_ConstraintConnectors.drl	2007-05-19 21:24:24 UTC (rev 11962)
@@ -0,0 +1,31 @@
+package org.drools
+
+import org.drools.Person;
+
+global java.util.List results;
+
+rule "1. && operator"
+    salience 10
+    when    	
+		$person : Person( age > 30 && < 40 && hair == "red" )		    
+    then
+        results.add( $person );
+end    
+
+rule "2. || operator"
+    salience 8
+    when    	
+		$person : Person( age > 70 && < 90 || hair == "green" )		    
+    then
+        results.add( $person );
+end    
+
+rule "3. Complex expression"
+    salience 7
+    when    	
+		$person : Person( ( age == 70 && hair == "black" ) ||
+		                  ( age == 40 && hair == "pink" ) ||
+		                  ( age == 12 && ( hair == "yellow" || hair == "blue" ) ) )		    
+    then
+        results.add( $person );
+end    

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MultiRestrictionFieldConstraint.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MultiRestrictionFieldConstraint.drl	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MultiRestrictionFieldConstraint.drl	2007-05-19 21:24:24 UTC (rev 11962)
@@ -8,31 +8,31 @@
 global java.util.List list4;
 
 
-rule "& operator with number range"
+rule "1. && operator with number range"
     when    	
-		$person : Person( age > 30 & < 40, hair == "red" )		    
+		$person : Person( age > 30 && < 40, hair == "red" )		    
     then
         list1.add( $person );
 end    
 
-rule "& operator with ! and strings"
+rule "2. && operator with != and strings"
     when    	
-		$person : Person( hair != "blue" & != "purple", age > 30 & < 40  )		    
+		$person : Person( hair != "blue" && != "purple", age > 30 && < 40  )		    
     then
         list2.add( $person );
 end   
 
-rule "| operator with == and strings"
+rule "3. || operator with == and strings"
     when    	
-		$person : Person( hair == "blue" |  == "purple",   age < 30 )		    
+		$person : Person( hair == "blue" ||  == "purple",   age < 30 )		    
     then
         list3.add( $person );
 end   
 
 
-rule "|  and  & operator with ==  and != and strings"
+rule "4. ||  and && operator with ==  and != and strings"
     when    	
-		$person : Person( age > 30 & < 40 | > 10 & < 20, hair == "red" | == "blue" )	
+		$person : Person( age > 30 && < 40 || > 10 && < 20, hair == "red" || == "blue" )	
     then
         list4.add( $person );
 end  

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_implicitDeclarations.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_implicitDeclarations.drl	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_implicitDeclarations.drl	2007-05-19 21:24:24 UTC (rev 11962)
@@ -7,9 +7,9 @@
 rule "test implicit declarations"
 	when
  	    // implicit binding
-		Cheese( type == "stilton", ( price < 20*factor ) ) 
+		Cheese( type == "stilton", eval( price < 20*factor ) ) 
 		// late declaration
-		Cheese( price < ( price * factor ), ( price < price * factor ), price : price  ) 
+		Cheese( price < ( price * factor ), eval( price < price * factor ), price : price  ) 
 	then
 		results.add( "Rule Fired" );
 end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_nullBindings.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_nullBindings.drl	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_nullBindings.drl	2007-05-19 21:24:24 UTC (rev 11962)
@@ -5,7 +5,7 @@
 rule "null binding"
 when
 	bob : Person( name == "bob" )
-    a: Person( $name : name, ($name != bob.getName()) )
+    a: Person( $name : name, eval($name != bob.getName()) )
 then
     results.add("OK");
 end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_skipModify.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_skipModify.drl	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_skipModify.drl	2007-05-19 21:24:24 UTC (rev 11962)
@@ -7,7 +7,7 @@
        Cheese( $type : type )
        Person( )
        Person( likes == $type )
-       Person( $likes : likes, ( $likes.equals( $type ) ) )
+       Person( $likes : likes, eval( $likes.equals( $type ) ) )
        eval( $likes.equals( $type ) )
    then
        results.add( "FIRED" );
@@ -18,7 +18,7 @@
        Cheese( )
        Person( )
        Person( likes == "stilton" )
-       Person( $likes : likes, ( $likes.equals( "stilton" ) ) )
+       Person( $likes : likes, eval( $likes.equals( "stilton" ) ) )
        eval( $likes.equals( "stilton" ) )
    then
        results.add( "FIRED" );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/waltz/waltz.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/waltz/waltz.drl	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/waltz/waltz.drl	2007-05-19 21:24:24 UTC (rev 11962)
@@ -199,7 +199,7 @@
 rule "match edge"
 	when
 	    Stage( value == Stage.LABELING )
-        $edge1: Edge( $p1:p1, $p2:p2, $label:label == Edge.PLUS | == Edge.MINUS | == Edge.B )
+        $edge1: Edge( $p1:p1, $p2:p2, $label:label == Edge.PLUS || == Edge.MINUS || == Edge.B )
         $edge2: Edge( p1 == $p2, p2 == $p1, label == Edge.NIL )
 	then
 	    $edge1.setPlotted( true );
@@ -221,7 +221,7 @@
 	when
 	    Stage( value == Stage.LABELING )
 	    Junction( type == Junction.L, $basePoint:basePoint )
-	    Edge( p1 == $basePoint, $Edge1P2 : p2, label == Edge.PLUS | == Edge.MINUS )
+	    Edge( p1 == $basePoint, $Edge1P2 : p2, label == Edge.PLUS || == Edge.MINUS )
         $edge: Edge( p1 == $basePoint, p2 != $Edge1P2, label == Edge.NIL )
 	then
 	    $edge.setLabel( Edge.B );
@@ -316,7 +316,7 @@
 	when
         Stage( value == Stage.LABELING )
         Junction( type == Junction.ARROW, $basePoint:basePoint, $p1:p1, $p2:p2, $p3:p3 )
-        Edge( p1 == $basePoint, p2 == $p1, $label:label == Edge.B | == Edge.MINUS )
+        Edge( p1 == $basePoint, p2 == $p1, $label:label == Edge.B || == Edge.MINUS )
         $edge1: Edge( p1 == $basePoint, p2 == $p2, label == Edge.NIL )
         $edge2: Edge( p1 == $basePoint, p2 == $p3 )
 	then
@@ -331,7 +331,7 @@
 	when
         Stage( value == Stage.LABELING )
         Junction( type == Junction.ARROW, $basePoint:basePoint, $p1:p1, $p2:p2, $p3:p3 )
-        Edge( p1 == $basePoint, p2 == $p1, $label:label == Edge.B | == Edge.MINUS )
+        Edge( p1 == $basePoint, p2 == $p1, $label:label == Edge.B || == Edge.MINUS )
         $edge1: Edge( p1 == $basePoint, p2 == $p2 )
         $edge2: Edge( p1 == $basePoint, p2 == $p3, label == Edge.NIL )
 	then
@@ -346,7 +346,7 @@
 	when
         Stage( value == Stage.LABELING )
         Junction( type == Junction.ARROW, $basePoint:basePoint, $p1:p1, $p2:p2, $p3:p3 )
-        Edge( p1 == $basePoint, p2 == $p3, $label:label == Edge.B | == Edge.MINUS )
+        Edge( p1 == $basePoint, p2 == $p3, $label:label == Edge.B || == Edge.MINUS )
         $edge1: Edge( p1 == $basePoint, p2 == $p2, label == Edge.NIL )
         $edge2: Edge( p1 == $basePoint, p2 == $p1 )
 	then
@@ -361,7 +361,7 @@
 	when
         Stage( value == Stage.LABELING )
         Junction( type == Junction.ARROW, $basePoint:basePoint, $p1:p1, $p2:p2, $p3:p3 )
-        Edge( p1 == $basePoint, p2 == $p3,  $label:label == Edge.B | == Edge.MINUS  )
+        Edge( p1 == $basePoint, p2 == $p3,  $label:label == Edge.B || == Edge.MINUS  )
         $edge1: Edge( p1 == $basePoint, p2 == $p2 )
         $edge2: Edge( p1 == $basePoint, p2 == $p1, label == Edge.NIL )
 	then

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/in_operator_test.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/in_operator_test.drl	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/in_operator_test.drl	2007-05-19 21:24:24 UTC (rev 11962)
@@ -2,7 +2,7 @@
 
 rule simple_rule 
   when
-  	Person(age > 30 & < 40)
+  	Person(age > 30 && < 40)
   	Vehicle(type in ( "sedan", "wagon" ), age < 3)
   then
 	consequence();

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/notin_operator_test.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/notin_operator_test.drl	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/notin_operator_test.drl	2007-05-19 21:24:24 UTC (rev 11962)
@@ -1,8 +1,8 @@
-#testing 'in' operator
+#testing not 'in' operator
 
 rule simple_rule 
   when
-  	Person(age > 30 & < 40)
+  	Person(age > 30 && < 40)
   	Vehicle(type not in ( "sedan", "wagon" ), age < 3)
   then
 	consequence();

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/restrictions_test.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/restrictions_test.drl	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/restrictions_test.drl	2007-05-19 21:24:24 UTC (rev 11962)
@@ -5,8 +5,8 @@
 
 rule simple_rule 
   when
-  	Person(age > 30 & < 40)
-  	Vehicle(type == "sedan" | == "wagon", age < 3)
+  	Person(age > 30 && < 40)
+  	Vehicle(type == "sedan" || == "wagon", age < 3)
   then
 	consequence();
 end
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/xml/test_Dump.drl	2007-05-19 21:24:24 UTC (rev 11962)
@@ -6,9 +6,9 @@
   agenda-group "agenda-group"
   activation-group "activation-group"
   when
-    foo3 : Bar( a == 3 | == 4, a3 == "hello", a4 == null )    
-    foo4 : Bar( a4 : a != 4 & != 5)
-    foo5 : Bar( b == (a4 + 1) | > a4)    
+    foo3 : Bar( a == 3 || == 4, a3 == "hello", a4 == null )    
+    foo4 : Bar( a4 : a != 4 && != 5)
+    foo5 : Bar( b == (a4 + 1) || > a4)    
     foo6 : Bar( a4 : a, b == 6)    
     foo7 : Bar( a4 : a, b4 : b)        
     Baz()

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AbstractCompositeConstraint.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -0,0 +1,212 @@
+/*
+ * Copyright 2006 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.drools.rule;
+
+import java.util.Arrays;
+
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.ReteTuple;
+import org.drools.spi.AlphaNodeFieldConstraint;
+import org.drools.spi.BetaNodeFieldConstraint;
+import org.drools.spi.Constraint;
+import org.drools.util.ArrayUtils;
+
+/**
+ * A superclass for all composite constraints, like "OR" and "AND"
+ * 
+ * @author etirelli
+ */
+public abstract class AbstractCompositeConstraint
+    implements
+    AlphaNodeFieldConstraint,
+    BetaNodeFieldConstraint {
+
+    protected AlphaNodeFieldConstraint[] alphaConstraints     = new AlphaNodeFieldConstraint[0];
+    protected BetaNodeFieldConstraint[]  betaConstraints      = new BetaNodeFieldConstraint[0];
+    protected Declaration[]              requiredDeclarations = new Declaration[0];
+
+    /**
+     * Adds an alpha constraint to the multi field OR constraint
+     * 
+     * @param constraint
+     */
+    public void addAlphaConstraint(AlphaNodeFieldConstraint constraint) {
+        if ( constraint != null ) {
+            AlphaNodeFieldConstraint[] tmp = this.alphaConstraints;
+            this.alphaConstraints = new AlphaNodeFieldConstraint[tmp.length + 1];
+            System.arraycopy( tmp,
+                              0,
+                              this.alphaConstraints,
+                              0,
+                              tmp.length );
+            this.alphaConstraints[this.alphaConstraints.length - 1] = constraint;
+            this.updateRequiredDeclarations( constraint );
+        }
+    }
+
+    /**
+     * Adds a beta constraint to this multi field OR constraint
+     * @param constraint
+     */
+    public void addBetaConstraint(BetaNodeFieldConstraint constraint) {
+        if ( constraint != null ) {
+            BetaNodeFieldConstraint[] tmp = this.betaConstraints;
+            this.betaConstraints = new BetaNodeFieldConstraint[tmp.length + 1];
+            System.arraycopy( tmp,
+                              0,
+                              this.betaConstraints,
+                              0,
+                              tmp.length );
+            this.betaConstraints[this.betaConstraints.length - 1] = constraint;
+            this.updateRequiredDeclarations( constraint );
+        }
+    }
+    
+    /**
+     * Adds a constraint too all lists it belongs to by checking for its type 
+     * @param constraint
+     */
+    public void addConstraint(Constraint constraint) {
+        if( constraint instanceof AlphaNodeFieldConstraint ) {
+            this.addAlphaConstraint( (AlphaNodeFieldConstraint) constraint );
+        }
+        if( constraint instanceof BetaNodeFieldConstraint ) {
+            this.addBetaConstraint( (BetaNodeFieldConstraint) constraint ); 
+        }
+    }
+
+    /**
+     * Updades the cached required declaration array
+     * 
+     * @param constraint
+     */
+    private void updateRequiredDeclarations(Constraint constraint) {
+        Declaration[] decs = constraint.getRequiredDeclarations();
+        if ( decs != null && decs.length > 0 ) {
+            for ( int i = 0; i < decs.length; i++ ) {
+                Declaration dec = decs[i];
+                // check for duplications
+                for ( int j = 0; j < this.requiredDeclarations.length; j++ ) {
+                    if ( dec.equals( this.requiredDeclarations[j] ) ) {
+                        dec = null;
+                        break;
+                    }
+                }
+                if ( dec != null ) {
+                    Declaration[] tmp = this.requiredDeclarations;
+                    this.requiredDeclarations = new Declaration[tmp.length + 1];
+                    System.arraycopy( tmp,
+                                      0,
+                                      this.requiredDeclarations,
+                                      0,
+                                      tmp.length );
+                    this.requiredDeclarations[this.requiredDeclarations.length - 1] = dec;
+                }
+            }
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public Declaration[] getRequiredDeclarations() {
+        return this.requiredDeclarations;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public ContextEntry getContextEntry() {
+        return new MultiFieldOrConstraintContextEntry( this.betaConstraints );
+    }
+
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + ArrayUtils.hashCode( this.alphaConstraints );
+        result = PRIME * result + ArrayUtils.hashCode( this.betaConstraints );
+        result = PRIME * result + ArrayUtils.hashCode( this.requiredDeclarations );
+        return result;
+    }
+
+    public boolean equals(final Object object) {
+        if ( this == object ) {
+            return true;
+        }
+        if ( object == null || object.getClass() != AbstractCompositeConstraint.class ) {
+            return false;
+        }
+        final AbstractCompositeConstraint other = (AbstractCompositeConstraint) object;
+
+        return Arrays.equals( this.alphaConstraints,
+                              other.alphaConstraints ) && Arrays.equals( this.betaConstraints,
+                                                                         other.betaConstraints ) && Arrays.equals( this.requiredDeclarations,
+                                                                                                                   other.requiredDeclarations );
+    }
+
+    public AbstractCompositeConstraint() {
+        super();
+    }
+
+    /**
+     * A context entry for composite restrictions
+     * 
+     * @author etirelli
+     */
+    protected static class MultiFieldOrConstraintContextEntry
+        implements
+        ContextEntry {
+
+        private static final long    serialVersionUID = -612826751146514955L;
+
+        private final ContextEntry[] contexts;
+        public ContextEntry          next;
+
+        public MultiFieldOrConstraintContextEntry(BetaNodeFieldConstraint[] constraints) {
+            contexts = new ContextEntry[constraints.length];
+            for ( int i = 0; i < contexts.length; i++ ) {
+                contexts[i] = constraints[i].getContextEntry();
+            }
+        }
+
+        public ContextEntry getNext() {
+            return this.next;
+        }
+
+        public void setNext(ContextEntry entry) {
+            this.next = entry;
+        }
+
+        public void updateFromFactHandle(InternalWorkingMemory workingMemory,
+                                         InternalFactHandle handle) {
+            for ( int i = 0; i < contexts.length; i++ ) {
+                contexts[i].updateFromFactHandle( workingMemory,
+                                                  handle );
+            }
+        }
+
+        public void updateFromTuple(InternalWorkingMemory workingMemory,
+                                    ReteTuple tuple) {
+            for ( int i = 0; i < contexts.length; i++ ) {
+                contexts[i].updateFromTuple( workingMemory,
+                                             tuple );
+            }
+        }
+
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AndConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AndConstraint.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/AndConstraint.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2006 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Created on May 14, 2007
+ */
+package org.drools.rule;
+
+import java.util.Arrays;
+
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.ReteTuple;
+import org.drools.util.ArrayUtils;
+
+/**
+ * AND composite constraint, so the user can do things like:
+ * 
+ * Person( name == 'Edson' && surname == 'Tirelli' )
+ * 
+ * @author etirelli
+ *
+ */
+public class AndConstraint extends AbstractCompositeConstraint {
+
+    private static final long serialVersionUID = 6662526903112926549L;
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isAllowed(Object object,
+                             InternalWorkingMemory workingMemory) {
+        if ( this.alphaConstraints.length > 0 ) {
+            for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+                if ( !this.alphaConstraints[i].isAllowed( object,
+                                                          workingMemory ) ) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isAllowedCachedLeft(ContextEntry context,
+                                       Object object) {
+        if ( this.betaConstraints.length > 0 ) {
+            for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+                if ( !this.betaConstraints[i].isAllowedCachedLeft( context,
+                                                                   object ) ) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isAllowedCachedRight(ReteTuple tuple,
+                                        ContextEntry context) {
+        if ( this.betaConstraints.length > 0 ) {
+            for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+                if ( !this.betaConstraints[i].isAllowedCachedRight( tuple,
+                                                                    context ) ) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+    
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + ArrayUtils.hashCode( this.alphaConstraints );
+        result = PRIME * result + ArrayUtils.hashCode( this.betaConstraints );
+        result = PRIME * result + ArrayUtils.hashCode( this.requiredDeclarations );
+        return result;
+    }
+
+    public boolean equals(final Object object) {
+        if ( this == object ) {
+            return true;
+        }
+        if ( object == null || object.getClass() != AndConstraint.class ) {
+            return false;
+        }
+        final AndConstraint other = (AndConstraint) object;
+
+        return Arrays.equals( this.alphaConstraints,
+                              other.alphaConstraints ) && Arrays.equals( this.betaConstraints,
+                                                                         other.betaConstraints ) && Arrays.equals( this.requiredDeclarations,
+                                                                                                                   other.requiredDeclarations );
+    }
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/OrConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/OrConstraint.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/OrConstraint.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2005 JBoss Inc
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.rule;
+
+import java.util.Arrays;
+
+import org.drools.common.InternalWorkingMemory;
+import org.drools.reteoo.ReteTuple;
+import org.drools.util.ArrayUtils;
+
+/**
+ * A class to implement Multi-Field OR constraints, so user can do:
+ * 
+ * Person( hair == 'blue' || eyes == 'blue' )
+ * 
+ * @author etirelli
+ *
+ */
+public class OrConstraint extends AbstractCompositeConstraint {
+
+    private static final long serialVersionUID = 7176363058353868367L;
+
+    public OrConstraint() {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isAllowed(Object object,
+                             InternalWorkingMemory workingMemory) {
+        if ( this.alphaConstraints.length > 0 ) {
+            for ( int i = 0; i < this.alphaConstraints.length; i++ ) {
+                if ( this.alphaConstraints[i].isAllowed( object,
+                                                         workingMemory ) ) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isAllowedCachedLeft(ContextEntry context,
+                                       Object object) {
+        if ( this.betaConstraints.length > 0 ) {
+            for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+                if ( this.betaConstraints[i].isAllowedCachedLeft( context,
+                                                                  object ) ) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isAllowedCachedRight(ReteTuple tuple,
+                                        ContextEntry context) {
+        if ( this.betaConstraints.length > 0 ) {
+            for ( int i = 0; i < this.betaConstraints.length; i++ ) {
+                if ( this.betaConstraints[i].isAllowedCachedRight( tuple,
+                                                                   context ) ) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        return true;
+    }
+
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 3; // to differentiate from AND constraint
+        result = PRIME * result + ArrayUtils.hashCode( this.alphaConstraints );
+        result = PRIME * result + ArrayUtils.hashCode( this.betaConstraints );
+        result = PRIME * result + ArrayUtils.hashCode( this.requiredDeclarations );
+        return result;
+    }
+
+    public boolean equals(final Object object) {
+        if ( this == object ) {
+            return true;
+        }
+        if ( object == null || object.getClass() != OrConstraint.class ) {
+            return false;
+        }
+        final OrConstraint other = (OrConstraint) object;
+
+        return Arrays.equals( this.alphaConstraints,
+                              other.alphaConstraints ) && Arrays.equals( this.betaConstraints,
+                                                                         other.betaConstraints ) && Arrays.equals( this.requiredDeclarations,
+                                                                                                                   other.requiredDeclarations );
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/rule/FieldConstraintTest.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -160,7 +160,7 @@
                                                                        "price" );
 
         Pattern pattern = new Pattern( 0,
-                                    new ClassObjectType( Cheese.class ) );
+                                       new ClassObjectType( Cheese.class ) );
 
         // Bind the extractor to a decleration
         // Declarations know the pattern they derive their value form
@@ -169,7 +169,7 @@
                                                                pattern );
 
         pattern = new Pattern( 1,
-                             new ClassObjectType( Cheese.class ) );
+                               new ClassObjectType( Cheese.class ) );
 
         // Bind the extractor to a decleration
         // Declarations know the pattern they derive their value form
@@ -242,7 +242,7 @@
                                                                        "price" );
 
         final Pattern pattern = new Pattern( 0,
-                                          new ClassObjectType( Cheese.class ) );
+                                             new ClassObjectType( Cheese.class ) );
 
         // Bind the extractor to a decleration
         // Declarations know the pattern they derive their value form
@@ -268,21 +268,21 @@
         };
 
         final ReturnValueRestriction restriction1 = new ReturnValueRestriction( priceExtractor,
-                                                                          isDoubleThePrice,
-                                                                          new Declaration[]{priceDeclaration},
-                                                                          new Declaration[0],
-                                                                          new String[0],
-                                                                          ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
+                                                                                isDoubleThePrice,
+                                                                                new Declaration[]{priceDeclaration},
+                                                                                new Declaration[0],
+                                                                                new String[0],
+                                                                                ValueType.INTEGER_TYPE.getEvaluator( Operator.EQUAL ) );
 
         final ReturnValueConstraint constraint1 = new ReturnValueConstraint( priceExtractor,
                                                                              restriction1 );
 
         final ReturnValueRestriction restriction2 = new ReturnValueRestriction( priceExtractor,
-                                                                          isDoubleThePrice,
-                                                                          new Declaration[]{priceDeclaration},
-                                                                          new Declaration[0],
-                                                                          new String[0],
-                                                                          ValueType.INTEGER_TYPE.getEvaluator( Operator.GREATER ) );
+                                                                                isDoubleThePrice,
+                                                                                new Declaration[]{priceDeclaration},
+                                                                                new Declaration[0],
+                                                                                new String[0],
+                                                                                ValueType.INTEGER_TYPE.getEvaluator( Operator.GREATER ) );
 
         final ReturnValueConstraint constraint2 = new ReturnValueConstraint( priceExtractor,
                                                                              restriction2 );
@@ -320,4 +320,228 @@
                                                      f2.getObject() ) );
     }
 
+    /**
+     * <pre>
+     *        
+     *         
+     *                type == &quot;cheddar&quot &amp;&amp; price &gt; 10 
+     *          
+     *         
+     * </pre>
+     * 
+     * Test the use of the composite AND constraint. Composite AND constraints are only
+     * used when nested inside other field constraints, as the top level AND is implicit
+     * 
+     * @throws IntrospectionException
+     */
+    public void testCompositeAndConstraint() {
+        final ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
+        final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
+
+        final ClassFieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
+                                                                       "type" );
+
+        final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
+
+        final Evaluator evaluator = ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL );
+
+        final LiteralConstraint constraint1 = new LiteralConstraint( extractor,
+                                                                     evaluator,
+                                                                     field );
+
+        final ClassFieldExtractor priceExtractor = new ClassFieldExtractor( Cheese.class,
+                                                                            "price" );
+
+        final FieldValue priceField = FieldFactory.getFieldValue( 10 );
+
+        final Evaluator priceEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.GREATER );
+
+        final LiteralConstraint constraint2 = new LiteralConstraint( priceExtractor,
+                                                                     priceEvaluator,
+                                                                     priceField );
+
+        final Cheese cheddar = new Cheese( "cheddar",
+                                           15 );
+
+        final AndConstraint constraint = new AndConstraint();
+        constraint.addAlphaConstraint( constraint1 );
+        constraint.addAlphaConstraint( constraint2 );
+
+        final InternalFactHandle cheddarHandle = (InternalFactHandle) workingMemory.assertObject( cheddar );
+
+        // check constraint
+        assertTrue( constraint.isAllowed( cheddarHandle.getObject(),
+                                          workingMemory ) );
+
+        cheddar.setPrice( 5 );
+        assertFalse( constraint.isAllowed( cheddarHandle.getObject(),
+                                           workingMemory ) );
+        
+        cheddar.setType( "stilton" );
+        assertFalse( constraint.isAllowed( cheddarHandle.getObject(),
+                                           workingMemory ) );
+        
+        cheddar.setPrice( 15 );
+        assertFalse( constraint.isAllowed( cheddarHandle.getObject(),
+                                           workingMemory ) );
+    }
+
+    /**
+     * <pre>
+     *        
+     *         
+     *                Cheese( type == &quot;cheddar&quot || price &gt; 10 ) 
+     *          
+     *         
+     * </pre>
+     * 
+     * Test the use of the composite OR constraint. 
+     * 
+     * @throws IntrospectionException
+     */
+    public void testCompositeOrConstraint() {
+        final ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
+        final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
+
+        final ClassFieldExtractor extractor = new ClassFieldExtractor( Cheese.class,
+                                                                       "type" );
+
+        final FieldValue field = FieldFactory.getFieldValue( "cheddar" );
+
+        final Evaluator evaluator = ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL );
+
+        final LiteralConstraint constraint1 = new LiteralConstraint( extractor,
+                                                                     evaluator,
+                                                                     field );
+
+        final ClassFieldExtractor priceExtractor = new ClassFieldExtractor( Cheese.class,
+                                                                            "price" );
+
+        final FieldValue priceField = FieldFactory.getFieldValue( 10 );
+
+        final Evaluator priceEvaluator = ValueType.INTEGER_TYPE.getEvaluator( Operator.GREATER );
+
+        final LiteralConstraint constraint2 = new LiteralConstraint( priceExtractor,
+                                                                     priceEvaluator,
+                                                                     priceField );
+
+        final Cheese cheddar = new Cheese( "cheddar",
+                                           15 );
+
+        final OrConstraint constraint = new OrConstraint();
+        constraint.addAlphaConstraint( constraint1 );
+        constraint.addAlphaConstraint( constraint2 );
+
+        final InternalFactHandle cheddarHandle = (InternalFactHandle) workingMemory.assertObject( cheddar );
+
+        // check constraint
+        assertTrue( constraint.isAllowed( cheddarHandle.getObject(),
+                                          workingMemory ) );
+
+        cheddar.setPrice( 5 );
+        assertTrue( constraint.isAllowed( cheddarHandle.getObject(),
+                                           workingMemory ) );
+        
+        cheddar.setType( "stilton" );
+        assertFalse( constraint.isAllowed( cheddarHandle.getObject(),
+                                           workingMemory ) );
+        
+        cheddar.setPrice( 15 );
+        assertTrue( constraint.isAllowed( cheddarHandle.getObject(),
+                                           workingMemory ) );
+    }
+    
+    /**
+     * <pre>
+     *        
+     *         
+     *                Cheese( ( type == &quot;cheddar&quot &amp;&amp; price &gt; 10) || ( type == &quote;stilton&quote; && price &lt; 10 ) ) 
+     *          
+     *         
+     * </pre>
+     * 
+     * Test the use of the composite OR constraint. 
+     * 
+     * @throws IntrospectionException
+     */
+    public void testNestedCompositeConstraints() {
+        final ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
+        final InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
+
+        final ClassFieldExtractor typeExtractor = new ClassFieldExtractor( Cheese.class,
+                                                                       "type" );
+
+        final FieldValue cheddarField = FieldFactory.getFieldValue( "cheddar" );
+
+        final Evaluator stringEqual = ValueType.STRING_TYPE.getEvaluator( Operator.EQUAL );
+
+        // type == 'cheddar'
+        final LiteralConstraint constraint1 = new LiteralConstraint( typeExtractor,
+                                                                     stringEqual,
+                                                                     cheddarField );
+
+        final ClassFieldExtractor priceExtractor = new ClassFieldExtractor( Cheese.class,
+                                                                            "price" );
+
+        final FieldValue field10 = FieldFactory.getFieldValue( 10 );
+
+        final Evaluator integerGreater = ValueType.INTEGER_TYPE.getEvaluator( Operator.GREATER );
+
+        // price > 10
+        final LiteralConstraint constraint2 = new LiteralConstraint( priceExtractor,
+                                                                     integerGreater,
+                                                                     field10 );
+
+        // type == 'cheddar' && price > 10
+        final AndConstraint and1 = new AndConstraint();
+        and1.addAlphaConstraint( constraint1 );
+        and1.addAlphaConstraint( constraint2 );
+
+        
+        final FieldValue stiltonField = FieldFactory.getFieldValue( "stilton" );
+        // type == 'stilton'
+        final LiteralConstraint constraint3 = new LiteralConstraint( typeExtractor,
+                                                                     stringEqual,
+                                                                     stiltonField );
+
+        final Evaluator integerLess = ValueType.INTEGER_TYPE.getEvaluator( Operator.LESS );
+
+        // price < 10
+        final LiteralConstraint constraint4 = new LiteralConstraint( priceExtractor,
+                                                                     integerLess,
+                                                                     field10 );
+
+
+        // type == 'stilton' && price < 10
+        final AndConstraint and2 = new AndConstraint();
+        and2.addAlphaConstraint( constraint3 );
+        and2.addAlphaConstraint( constraint4 );
+
+        // ( type == 'cheddar' && price > 10 ) || ( type == 'stilton' && price < 10 )
+        final OrConstraint constraint = new OrConstraint();
+        constraint.addAlphaConstraint( and1 );
+        constraint.addAlphaConstraint( and2 );
+
+        final Cheese cheddar = new Cheese( "cheddar",
+                                           15 );
+        
+        final InternalFactHandle cheddarHandle = (InternalFactHandle) workingMemory.assertObject( cheddar );
+
+        // check constraint
+        assertTrue( constraint.isAllowed( cheddarHandle.getObject(),
+                                          workingMemory ) );
+
+        cheddar.setPrice( 5 );
+        assertFalse( constraint.isAllowed( cheddarHandle.getObject(),
+                                           workingMemory ) );
+        
+        cheddar.setType( "stilton" );
+        assertTrue( constraint.isAllowed( cheddarHandle.getObject(),
+                                           workingMemory ) );
+        
+        cheddar.setPrice( 15 );
+        assertFalse( constraint.isAllowed( cheddarHandle.getObject(),
+                                           workingMemory ) );
+    }
+    
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-plugin/src/main/java/org/drools/eclipse/editors/completion/LocationDeterminator.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -241,9 +241,9 @@
 						Object last = restrictions.get(restrictions.size() - 2);
 						if (last instanceof RestrictionConnectiveDescr) {
 							RestrictionConnectiveDescr lastRestr = (RestrictionConnectiveDescr) last;
-							char connective = '&';
+							String connective = "&&";
 							if (lastRestr.getConnective() == RestrictionConnectiveDescr.OR) {
-								connective = '|';
+								connective = "||";
 							}
 							int connectiveLocation = patternContents.lastIndexOf(connective);
 							patternContents = "( " + lastFieldDescr.getFieldName() + " " + patternContents.substring(connectiveLocation + 1);
@@ -253,9 +253,9 @@
 						Object last = restrictions.get(restrictions.size() - 1);
 						if (last instanceof RestrictionConnectiveDescr) {
 							RestrictionConnectiveDescr lastRestr = (RestrictionConnectiveDescr) last;
-							char connective = '&';
+							String connective = "&&";
 							if (lastRestr.getConnective() == RestrictionConnectiveDescr.OR) {
-								connective = '|';
+								connective = "||";
 							}
 							int connectiveLocation = patternContents.lastIndexOf(connective);
 							patternContents = "( " + lastFieldDescr.getFieldName() + " " + patternContents.substring(connectiveLocation + 1);

Modified: labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/LocationDeterminatorTest.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/LocationDeterminatorTest.java	2007-05-19 11:44:11 UTC (rev 11961)
+++ labs/jbossrules/trunk/drools-eclipse/drools-eclipse-test/src/test/java/org/drools/eclipse/editors/completion/LocationDeterminatorTest.java	2007-05-19 21:24:24 UTC (rev 11962)
@@ -944,7 +944,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property > 0 & ";
+        	"		Class ( property > 0 && ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
         assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
@@ -953,7 +953,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property > 0 & " +
+        	"		Class ( property > 0 && " +
         	"       ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
@@ -963,7 +963,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( name : property1, property2 > 0 & ";
+        	"		Class ( name : property1, property2 > 0 && ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
         assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
@@ -972,7 +972,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property1 < 20, property2 > 0 & ";
+        	"		Class ( property1 < 20, property2 > 0 && ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
         assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
@@ -981,7 +981,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property > 0 & < ";
+        	"		Class ( property > 0 && < ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_ARGUMENT, location.getType());
         assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
@@ -991,7 +991,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property > 0 & < 10 ";
+        	"		Class ( property > 0 && < 10 ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
         assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
@@ -999,7 +999,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property > 0 & < 10, ";
+        	"		Class ( property > 0 && < 10, ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_START, location.getType());
         assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
@@ -1007,7 +1007,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property > 0 | ";
+        	"		Class ( property > 0 || ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
         assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
@@ -1016,7 +1016,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property > 0 | \n" +
+        	"		Class ( property > 0 || \n" +
         	"       ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
@@ -1026,7 +1026,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( name : property1, property2 > 0 | ";
+        	"		Class ( name : property1, property2 > 0 || ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
         assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
@@ -1035,7 +1035,7 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property1 < 20, property2 > 0 | ";
+        	"		Class ( property1 < 20, property2 > 0 || ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_OPERATOR, location.getType());
         assertEquals("Class", location.getProperty(LocationDeterminator.LOCATION_PROPERTY_CLASS_NAME));
@@ -1059,21 +1059,21 @@
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property > 0 & < 10 ";
+        	"		Class ( property > 0 && < 10 ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property > 0 | < 10 ";
+        	"		Class ( property > 0 || < 10 ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
 
         input = 
         	"rule MyRule \n" +
         	"	when \n" +
-        	"		Class ( property == \"test\" | == \"test2\" ";
+        	"		Class ( property == \"test\" || == \"test2\" ";
         location = LocationDeterminator.getLocation(input);
         assertEquals(LocationDeterminator.LOCATION_LHS_INSIDE_CONDITION_END, location.getType());
 




More information about the jboss-svn-commits mailing list