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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 3 20:56:11 EDT 2007


Author: tirelli
Date: 2007-05-03 20:56:11 -0400 (Thu, 03 May 2007)
New Revision: 11659

Added:
   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
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/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/resources/org/drools/lang/DRL.g
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
Log:
JBRULES-840: adding support to 'in' and 'not in' operators

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

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-04 00:48:52 UTC (rev 11658)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2007-05-04 00:56:11 UTC (rev 11659)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0b7 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-02 14:34:32
+// $ANTLR 3.0b7 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-03 21:46:27
 
 	package org.drools.lang;
 
@@ -10,46 +10,48 @@
 import java.util.Map;
 import java.util.HashMap;
 public class DRLLexer extends Lexer {
-    public static final int EXISTS=51;
+    public static final int EXISTS=53;
+    public static final int COMMA=44;
     public static final int T79=79;
     public static final int AUTO_FOCUS=22;
     public static final int END=10;
-    public static final int HexDigit=58;
-    public static final int FORALL=53;
+    public static final int HexDigit=60;
+    public static final int FORALL=55;
     public static final int TEMPLATE=11;
     public static final int T70=70;
-    public static final int MISC=64;
-    public static final int FLOAT=43;
+    public static final int MISC=66;
+    public static final int FLOAT=45;
     public static final int T74=74;
     public static final int QUERY=9;
-    public static final int THEN=54;
+    public static final int THEN=56;
     public static final int RULE=12;
     public static final int INIT=30;
     public static final int IMPORT=6;
-    public static final int OR=35;
     public static final int PACKAGE=5;
     public static final int DATE_EFFECTIVE=14;
-    public static final int AND=49;
+    public static final int OR=35;
+    public static final int AND=51;
     public static final int FUNCTION=7;
     public static final int GLOBAL=8;
-    public static final int EscapeSequence=57;
+    public static final int EscapeSequence=59;
     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=47;
+    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=61;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=63;
     public static final int T77=77;
     public static final int ATTRIBUTES=4;
-    public static final int LEFT_CURLY=45;
+    public static final int LEFT_CURLY=47;
     public static final int RESULT=32;
     public static final int T69=69;
-    public static final int FROM=50;
+    public static final int FROM=52;
     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=46;
+    public static final int RIGHT_CURLY=48;
     public static final int BOOL=18;
     public static final int EXCLUDES=40;
     public static final int T73=73;
@@ -58,48 +60,47 @@
     public static final int WHEN=13;
     public static final int T78=78;
     public static final int RULEFLOW_GROUP=24;
-    public static final int WS=56;
+    public static final int WS=58;
     public static final int STRING=15;
-    public static final int T66=66;
     public static final int ACTION=31;
     public static final int T71=71;
     public static final int T72=72;
-    public static final int T65=65;
     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 ACCUMULATE=29;
     public static final int NO_LOOP=21;
-    public static final int UnicodeEscape=59;
+    public static final int UnicodeEscape=61;
     public static final int T75=75;
     public static final int DURATION=26;
-    public static final int EVAL=52;
+    public static final int EVAL=54;
     public static final int MATCHES=39;
     public static final int EOF=-1;
     public static final int T67=67;
     public static final int AGENDA_GROUP=25;
-    public static final int NULL=44;
-    public static final int EOL=55;
-    public static final int Tokens=81;
+    public static final int NULL=46;
+    public static final int EOL=57;
+    public static final int Tokens=82;
     public static final int SALIENCE=19;
-    public static final int OctalEscape=60;
-    public static final int MULTI_LINE_COMMENT=63;
+    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 ENABLED=17;
-    public static final int RIGHT_SQUARE=48;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=62;
+    public static final int RIGHT_SQUARE=50;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=64;
     public DRLLexer() {;} 
     public DRLLexer(CharStream input) {
         super(input);
-        ruleMemo = new HashMap[79+1];
+        ruleMemo = new HashMap[80+1];
      }
     public String getGrammarFileName() { return "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
 
-    // $ANTLR start T65
-    public final void mT65() throws RecognitionException {
+    // $ANTLR start T67
+    public final void mT67() throws RecognitionException {
         try {
-            int _type = T65;
+            int _type = T67;
             // /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: ';'
             {
@@ -112,52 +113,16 @@
         finally {
         }
     }
-    // $ANTLR end T65
-
-    // $ANTLR start T66
-    public final void mT66() throws RecognitionException {
-        try {
-            int _type = T66;
-            // /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 T66
-
-    // $ANTLR start T67
-    public final void mT67() throws RecognitionException {
-        try {
-            int _type = T67;
-            // /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 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: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 ;
 
             }
 
@@ -172,12 +137,11 @@
     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: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;
@@ -191,10 +155,10 @@
     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: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 ;
 
 
             }
@@ -210,11 +174,12 @@
     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: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;
@@ -228,10 +193,10 @@
     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: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 ;
 
             }
 
@@ -246,12 +211,11 @@
     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: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;
@@ -265,10 +229,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: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 ;
 
 
             }
@@ -284,11 +248,12 @@
     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: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;
@@ -302,12 +267,11 @@
     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: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;
@@ -321,11 +285,12 @@
     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: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 ;
 
+
             }
 
             this.type = _type;
@@ -339,12 +304,11 @@
     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:19:7: ( '<=' )
-            // /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:17:7: ( '<' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:17:7: '<'
             {
-            match("<="); if (failed) return ;
+            match('<'); if (failed) return ;
 
-
             }
 
             this.type = _type;
@@ -358,10 +322,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:20:7: ( '!=' )
-            // /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:18:7: ( '<=' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:18:7: '<='
             {
-            match("!="); if (failed) return ;
+            match("<="); if (failed) return ;
 
 
             }
@@ -377,10 +341,10 @@
     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:21:7: ( '&&' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:21:7: '&&'
+            // /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 ;
+            match("!="); if (failed) return ;
 
 
             }
@@ -392,14 +356,33 @@
     }
     // $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:1504:17: ( ( ' ' | '\\t' | '\\f' | EOL ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1504:17: ( ' ' | '\\t' | '\\f' | EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1562:17: ( ( ' ' | '\\t' | '\\f' | EOL ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1562:17: ( ' ' | '\\t' | '\\f' | EOL )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1504:17: ( ' ' | '\\t' | '\\f' | EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1562:17: ( ' ' | '\\t' | '\\f' | EOL )
             int alt1=4;
             switch ( input.LA(1) ) {
             case ' ':
@@ -426,35 +409,35 @@
             default:
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1504:17: ( ' ' | '\\t' | '\\f' | EOL )", 1, 0, input);
+                    new NoViableAltException("1562: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:1504:19: ' '
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1562:19: ' '
                     {
                     match(' '); if (failed) return ;
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1505:19: '\\t'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1563: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:1506:19: '\\f'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1564: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:1507:19: EOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1565:19: EOL
                     {
                     mEOL(); if (failed) return ;
 
@@ -479,10 +462,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:1514:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
@@ -501,13 +484,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1514:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("1572: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:1514:14: ( '\\r\\n' )=> '\\r\\n'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:14: ( '\\r\\n' )=> '\\r\\n'
                     {
                     match("\r\n"); if (failed) return ;
 
@@ -515,14 +498,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1515:25: '\\r'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1573: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:1516:25: '\\n'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1574:25: '\\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -544,10 +527,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:1521:4: ( ( '-' )? ( '0' .. '9' )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1521:4: ( '-' )? ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1579:4: ( ( '-' )? ( '0' .. '9' )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1579:4: ( '-' )? ( '0' .. '9' )+
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1521:4: ( '-' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1579:4: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -556,7 +539,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1521:5: '-'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1579:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -565,7 +548,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1521:10: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1579:10: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -579,7 +562,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1521:11: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1579:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -610,10 +593,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:1525:4: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1583:4: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1583:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:4: ( '-' )?
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1583:4: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -622,7 +605,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:5: '-'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1583:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -631,7 +614,7 @@
 
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:10: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1583:10: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -645,7 +628,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:11: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1583:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -663,7 +646,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:26: ( '0' .. '9' )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1583:26: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -677,7 +660,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:27: '0' .. '9'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1583:27: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -708,7 +691,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:1529:8: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:8: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -721,19 +704,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1528:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("1586: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:1529:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -749,14 +732,14 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:15: EscapeSequence
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:15: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:32: ~ ( '\\\\' | '\"' )
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1587:32: ~ ( '\\\\' | '\"' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -786,13 +769,13 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1530:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1588:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1530:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1530:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1588:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1588:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1530:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1588:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
                     loop9:
                     do {
                         int alt9=3;
@@ -808,14 +791,14 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1530:16: EscapeSequence
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1588:16: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1530:33: ~ ( '\\\\' | '\\'' )
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1588:33: ~ ( '\\\\' | '\\'' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -856,8 +839,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:1534:12: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1534:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1592:12: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1592: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();
@@ -882,17 +865,12 @@
     // $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:1538:9: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' ) | UnicodeEscape | OctalEscape )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:9: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' ) | 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 '.':
@@ -906,6 +884,11 @@
                     alt11=1;
                     }
                     break;
+                case 'u':
+                    {
+                    alt11=2;
+                    }
+                    break;
                 case '0':
                 case '1':
                 case '2':
@@ -921,7 +904,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1536:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
+                        new NoViableAltException("1594:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
 
                     throw nvae;
                 }
@@ -930,13 +913,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1536:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
+                    new NoViableAltException("1594:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' ) | 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:1538:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1596:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' )
                     {
                     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' ) {
@@ -954,14 +937,14 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1539:9: UnicodeEscape
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1597:9: UnicodeEscape
                     {
                     mUnicodeEscape(); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1540:9: OctalEscape
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1598:9: OctalEscape
                     {
                     mOctalEscape(); if (failed) return ;
 
@@ -978,7 +961,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:1545: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:1603:9: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             int alt12=3;
             int LA12_0 = input.LA(1);
 
@@ -1012,7 +995,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1543:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("1601:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
 
                     throw nvae;
                 }
@@ -1020,31 +1003,31 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1543:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("1601: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:1545:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603: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:1545:14: ( '0' .. '3' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1545:15: '0' .. '3'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:14: ( '0' .. '3' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:15: '0' .. '3'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1545:25: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1545:26: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:25: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1545:36: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1545:37: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:36: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1603:37: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -1054,18 +1037,18 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1546:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1604:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1546:14: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1546:15: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1604:14: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1604:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1546:25: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1546:26: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1604:25: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1604:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -1075,11 +1058,11 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1547:9: '\\\\' ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1547:14: ( '0' .. '7' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1547:15: '0' .. '7'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:14: ( '0' .. '7' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1605:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -1099,8 +1082,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:1552:9: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1552:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1610:9: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1610:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             {
             match('\\'); if (failed) return ;
             match('u'); if (failed) return ;
@@ -1121,10 +1104,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:1556:4: ( ( 'true' | 'false' ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1556:4: ( 'true' | 'false' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1614:4: ( ( 'true' | 'false' ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1614:4: ( 'true' | 'false' )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1556:4: ( 'true' | 'false' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1614:4: ( 'true' | 'false' )
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -1137,13 +1120,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1556:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("1614: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:1556:5: 'true'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1614:5: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -1151,7 +1134,7 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1556:12: 'false'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1614:12: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -1175,8 +1158,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:1559:11: ( 'package' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1559:11: 'package'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1617:11: ( 'package' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1617:11: 'package'
             {
             match("package"); if (failed) return ;
 
@@ -1194,8 +1177,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:1561:10: ( 'import' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1561:10: 'import'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1619:10: ( 'import' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1619:10: 'import'
             {
             match("import"); if (failed) return ;
 
@@ -1213,8 +1196,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:1563:12: ( 'function' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1563:12: 'function'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1621:12: ( 'function' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1621:12: 'function'
             {
             match("function"); if (failed) return ;
 
@@ -1232,8 +1215,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:1565:10: ( 'global' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1565:10: 'global'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1623:10: ( 'global' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1623:10: 'global'
             {
             match("global"); if (failed) return ;
 
@@ -1251,8 +1234,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:1567:11: ( 'rule' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1567:11: 'rule'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1625:11: ( 'rule' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1625:11: 'rule'
             {
             match("rule"); if (failed) return ;
 
@@ -1270,8 +1253,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:1569:9: ( 'query' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1569:9: 'query'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:9: ( 'query' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:9: 'query'
             {
             match("query"); if (failed) return ;
 
@@ -1289,8 +1272,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:1571:12: ( 'template' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1571:12: 'template'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1629:12: ( 'template' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1629:12: 'template'
             {
             match("template"); if (failed) return ;
 
@@ -1308,8 +1291,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:1573:14: ( 'attributes' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1573:14: 'attributes'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:14: ( 'attributes' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1631:14: 'attributes'
             {
             match("attributes"); if (failed) return ;
 
@@ -1327,8 +1310,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:1576:4: ( 'date-effective' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1576:4: 'date-effective'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1634:4: ( 'date-effective' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1634:4: 'date-effective'
             {
             match("date-effective"); if (failed) return ;
 
@@ -1346,8 +1329,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:1579:4: ( 'date-expires' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1579:4: 'date-expires'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:4: ( 'date-expires' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:4: 'date-expires'
             {
             match("date-expires"); if (failed) return ;
 
@@ -1365,8 +1348,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:1581:11: ( 'enabled' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1581:11: 'enabled'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1639:11: ( 'enabled' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1639:11: 'enabled'
             {
             match("enabled"); if (failed) return ;
 
@@ -1384,8 +1367,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:1584:4: ( 'salience' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1584:4: 'salience'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1642:4: ( 'salience' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1642:4: 'salience'
             {
             match("salience"); if (failed) return ;
 
@@ -1403,8 +1386,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:1586:11: ( 'no-loop' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1586:11: 'no-loop'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1644:11: ( 'no-loop' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1644:11: 'no-loop'
             {
             match("no-loop"); if (failed) return ;
 
@@ -1422,8 +1405,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:1589:4: ( 'auto-focus' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1589:4: 'auto-focus'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:4: ( 'auto-focus' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:4: 'auto-focus'
             {
             match("auto-focus"); if (failed) return ;
 
@@ -1441,8 +1424,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:1592:4: ( 'activation-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1592:4: 'activation-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1650:4: ( 'activation-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1650:4: 'activation-group'
             {
             match("activation-group"); if (failed) return ;
 
@@ -1460,8 +1443,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:1595:4: ( 'agenda-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1595:4: 'agenda-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1653:4: ( 'agenda-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1653:4: 'agenda-group'
             {
             match("agenda-group"); if (failed) return ;
 
@@ -1479,8 +1462,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:1598:4: ( 'dialect' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1598:4: 'dialect'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:4: ( 'dialect' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1656:4: 'dialect'
             {
             match("dialect"); if (failed) return ;
 
@@ -1498,8 +1481,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:1601:4: ( 'ruleflow-group' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1601:4: 'ruleflow-group'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1659:4: ( 'ruleflow-group' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1659:4: 'ruleflow-group'
             {
             match("ruleflow-group"); if (failed) return ;
 
@@ -1517,8 +1500,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:1604:4: ( 'duration' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1604:4: 'duration'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1662:4: ( 'duration' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1662:4: 'duration'
             {
             match("duration"); if (failed) return ;
 
@@ -1536,8 +1519,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:1607:4: ( 'lock-on-active' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1607:4: 'lock-on-active'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1665:4: ( 'lock-on-active' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1665:4: 'lock-on-active'
             {
             match("lock-on-active"); if (failed) return ;
 
@@ -1555,8 +1538,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:1609:8: ( 'from' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1609:8: 'from'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:8: ( 'from' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1667:8: 'from'
             {
             match("from"); if (failed) return ;
 
@@ -1574,8 +1557,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:1612:4: ( 'accumulate' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1612:4: 'accumulate'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1670:4: ( 'accumulate' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1670:4: 'accumulate'
             {
             match("accumulate"); if (failed) return ;
 
@@ -1593,8 +1576,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:1614:8: ( 'init' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1614:8: 'init'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1672:8: ( 'init' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1672:8: 'init'
             {
             match("init"); if (failed) return ;
 
@@ -1612,8 +1595,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:1616:10: ( 'action' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1616:10: 'action'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1674:10: ( 'action' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1674:10: 'action'
             {
             match("action"); if (failed) return ;
 
@@ -1631,8 +1614,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:1618:10: ( 'result' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1618:10: 'result'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1676:10: ( 'result' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1676:10: 'result'
             {
             match("result"); if (failed) return ;
 
@@ -1650,8 +1633,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:1620:11: ( 'collect' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1620:11: 'collect'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:11: ( 'collect' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1678:11: 'collect'
             {
             match("collect"); if (failed) return ;
 
@@ -1669,8 +1652,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:1622:6: ( 'or' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1622:6: 'or'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1680:6: ( 'or' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1680:6: 'or'
             {
             match("or"); if (failed) return ;
 
@@ -1688,8 +1671,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:1624:7: ( 'and' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1624:7: 'and'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1682:7: ( 'and' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1682:7: 'and'
             {
             match("and"); if (failed) return ;
 
@@ -1707,8 +1690,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:1627:4: ( 'contains' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1627:4: 'contains'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1685:4: ( 'contains' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1685:4: 'contains'
             {
             match("contains"); if (failed) return ;
 
@@ -1726,8 +1709,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:1630:4: ( 'excludes' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1630:4: 'excludes'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1688:4: ( 'excludes' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1688:4: 'excludes'
             {
             match("excludes"); if (failed) return ;
 
@@ -1745,8 +1728,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:1633:4: ( 'memberOf' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1633:4: 'memberOf'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1691:4: ( 'memberOf' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1691:4: 'memberOf'
             {
             match("memberOf"); if (failed) return ;
 
@@ -1764,8 +1747,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:1635:11: ( 'matches' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1635:11: 'matches'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1693:11: ( 'matches' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1693:11: 'matches'
             {
             match("matches"); if (failed) return ;
 
@@ -1779,12 +1762,31 @@
     }
     // $ANTLR end MATCHES
 
+    // $ANTLR start IN
+    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:1695:6: ( 'in' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:6: 'in'
+            {
+            match("in"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end IN
+
     // $ANTLR start NULL
     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:1637:8: ( 'null' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1637:8: 'null'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1697:8: ( 'null' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1697:8: 'null'
             {
             match("null"); if (failed) return ;
 
@@ -1802,8 +1804,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:1639:10: ( 'exists' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1639:10: 'exists'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1699:10: ( 'exists' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1699:10: 'exists'
             {
             match("exists"); if (failed) return ;
 
@@ -1821,8 +1823,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:1641:7: ( 'not' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1641:7: 'not'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:7: ( 'not' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1701:7: 'not'
             {
             match("not"); if (failed) return ;
 
@@ -1840,8 +1842,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:1643:8: ( 'eval' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1643:8: 'eval'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:8: ( 'eval' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1703:8: 'eval'
             {
             match("eval"); if (failed) return ;
 
@@ -1859,8 +1861,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:1645:10: ( 'forall' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1645:10: 'forall'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1705:10: ( 'forall' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1705:10: 'forall'
             {
             match("forall"); if (failed) return ;
 
@@ -1878,8 +1880,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:1647:11: ( 'when' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1647:11: 'when'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1707:11: ( 'when' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1707:11: 'when'
             {
             match("when"); if (failed) return ;
 
@@ -1897,8 +1899,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:1649:12: ( 'then' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1649:12: 'then'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1709:12: ( 'then' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1709:12: 'then'
             {
             match("then"); if (failed) return ;
 
@@ -1916,8 +1918,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:1651:11: ( 'end' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1651:11: 'end'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:11: ( 'end' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1711:11: 'end'
             {
             match("end"); if (failed) return ;
 
@@ -1935,8 +1937,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:1654: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:1654: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:1714: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:1714: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();
@@ -1949,7 +1951,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1654:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1714:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             loop14:
             do {
                 int alt14=2;
@@ -1998,11 +2000,11 @@
     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:1659:4: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1659:4: '#' ( options {greedy=false; } : . )* EOL
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1719:4: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1719:4: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1659:8: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1719:8: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -2021,7 +2023,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1659:35: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1719:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2051,12 +2053,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:1665:4: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1665:4: '//' ( options {greedy=false; } : . )* EOL
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1725:4: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1725:4: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1665:9: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1725:9: ( options {greedy=false; } : . )*
             loop16:
             do {
                 int alt16=2;
@@ -2075,7 +2077,7 @@
 
                 switch (alt16) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1665:36: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1725:36: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2105,8 +2107,8 @@
     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:1671:11: ( '(' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1671:11: '('
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1731:11: ( '(' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1731:11: '('
             {
             match('('); if (failed) return ;
 
@@ -2123,8 +2125,8 @@
     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:1675:11: ( ')' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1675:11: ')'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1735:11: ( ')' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1735:11: ')'
             {
             match(')'); if (failed) return ;
 
@@ -2141,8 +2143,8 @@
     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:1679:11: ( '[' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1679:11: '['
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1739:11: ( '[' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1739:11: '['
             {
             match('['); if (failed) return ;
 
@@ -2159,8 +2161,8 @@
     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:1683:11: ( ']' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1683:11: ']'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1743:11: ( ']' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1743:11: ']'
             {
             match(']'); if (failed) return ;
 
@@ -2177,8 +2179,8 @@
     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:1687:11: ( '{' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1687:11: '{'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1747:11: ( '{' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1747:11: '{'
             {
             match('{'); if (failed) return ;
 
@@ -2195,8 +2197,8 @@
     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:1691:11: ( '}' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1691:11: '}'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1751:11: ( '}' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1751:11: '}'
             {
             match('}'); if (failed) return ;
 
@@ -2213,12 +2215,12 @@
     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:1695:4: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:4: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:4: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:9: ( options {greedy=false; } : . )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:9: ( options {greedy=false; } : . )*
             loop17:
             do {
                 int alt17=2;
@@ -2243,7 +2245,7 @@
 
                 switch (alt17) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1695:35: .
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1755:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -2270,14 +2272,32 @@
     }
     // $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:1759:9: ( ',' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1759: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:1700:3: ( '!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+' | '?' | '|' | ',' | '=' | '/' | '\\'' | '\\\\' )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1763: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)=='|' ) {
+            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)=='|' ) {
                 input.consume();
             failed=false;
             }
@@ -2299,510 +2319,517 @@
     // $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: ( T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | 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 | 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 | MISC )
-        int alt18=72;
+        // /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;
         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: T65
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:10: T67
                 {
-                mT65(); if (failed) return ;
+                mT67(); if (failed) return ;
 
                 }
                 break;
             case 2 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:14: T66
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:14: T68
                 {
-                mT66(); if (failed) return ;
+                mT68(); if (failed) return ;
 
                 }
                 break;
             case 3 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:18: T67
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:18: T69
                 {
-                mT67(); if (failed) return ;
+                mT69(); if (failed) return ;
 
                 }
                 break;
             case 4 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:22: T68
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:22: T70
                 {
-                mT68(); if (failed) return ;
+                mT70(); if (failed) return ;
 
                 }
                 break;
             case 5 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:26: T69
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:26: T71
                 {
-                mT69(); if (failed) return ;
+                mT71(); if (failed) return ;
 
                 }
                 break;
             case 6 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:30: T70
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:30: T72
                 {
-                mT70(); if (failed) return ;
+                mT72(); if (failed) return ;
 
                 }
                 break;
             case 7 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:34: T71
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:34: T73
                 {
-                mT71(); if (failed) return ;
+                mT73(); if (failed) return ;
 
                 }
                 break;
             case 8 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:38: T72
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:38: T74
                 {
-                mT72(); if (failed) return ;
+                mT74(); if (failed) return ;
 
                 }
                 break;
             case 9 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:42: T73
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:42: T75
                 {
-                mT73(); if (failed) return ;
+                mT75(); if (failed) return ;
 
                 }
                 break;
             case 10 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:46: T74
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:46: T76
                 {
-                mT74(); if (failed) return ;
+                mT76(); if (failed) return ;
 
                 }
                 break;
             case 11 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:50: T75
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:50: T77
                 {
-                mT75(); if (failed) return ;
+                mT77(); if (failed) return ;
 
                 }
                 break;
             case 12 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:54: T76
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:54: T78
                 {
-                mT76(); if (failed) return ;
+                mT78(); if (failed) return ;
 
                 }
                 break;
             case 13 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:58: T77
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:58: T79
                 {
-                mT77(); if (failed) return ;
+                mT79(); if (failed) return ;
 
                 }
                 break;
             case 14 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:62: T78
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:62: T80
                 {
-                mT78(); if (failed) return ;
+                mT80(); if (failed) return ;
 
                 }
                 break;
             case 15 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:66: T79
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:66: T81
                 {
-                mT79(); if (failed) return ;
+                mT81(); if (failed) return ;
 
                 }
                 break;
             case 16 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:70: T80
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:70: WS
                 {
-                mT80(); if (failed) return ;
+                mWS(); if (failed) return ;
 
                 }
                 break;
             case 17 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:74: WS
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:73: INT
                 {
-                mWS(); if (failed) return ;
+                mINT(); if (failed) return ;
 
                 }
                 break;
             case 18 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:77: INT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:77: FLOAT
                 {
-                mINT(); if (failed) return ;
+                mFLOAT(); if (failed) return ;
 
                 }
                 break;
             case 19 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:81: FLOAT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:83: STRING
                 {
-                mFLOAT(); if (failed) return ;
+                mSTRING(); if (failed) return ;
 
                 }
                 break;
             case 20 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:87: STRING
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:90: BOOL
                 {
-                mSTRING(); if (failed) return ;
+                mBOOL(); if (failed) return ;
 
                 }
                 break;
             case 21 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:94: BOOL
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:95: PACKAGE
                 {
-                mBOOL(); if (failed) return ;
+                mPACKAGE(); if (failed) return ;
 
                 }
                 break;
             case 22 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:99: PACKAGE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:103: IMPORT
                 {
-                mPACKAGE(); if (failed) return ;
+                mIMPORT(); if (failed) return ;
 
                 }
                 break;
             case 23 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:107: IMPORT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:110: FUNCTION
                 {
-                mIMPORT(); if (failed) return ;
+                mFUNCTION(); if (failed) return ;
 
                 }
                 break;
             case 24 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:114: FUNCTION
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:119: GLOBAL
                 {
-                mFUNCTION(); if (failed) return ;
+                mGLOBAL(); if (failed) return ;
 
                 }
                 break;
             case 25 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:123: GLOBAL
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:126: RULE
                 {
-                mGLOBAL(); if (failed) return ;
+                mRULE(); if (failed) return ;
 
                 }
                 break;
             case 26 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:130: RULE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:131: QUERY
                 {
-                mRULE(); if (failed) return ;
+                mQUERY(); if (failed) return ;
 
                 }
                 break;
             case 27 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:135: QUERY
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:137: TEMPLATE
                 {
-                mQUERY(); if (failed) return ;
+                mTEMPLATE(); if (failed) return ;
 
                 }
                 break;
             case 28 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:141: TEMPLATE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:146: ATTRIBUTES
                 {
-                mTEMPLATE(); if (failed) return ;
+                mATTRIBUTES(); if (failed) return ;
 
                 }
                 break;
             case 29 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:150: ATTRIBUTES
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:157: DATE_EFFECTIVE
                 {
-                mATTRIBUTES(); if (failed) return ;
+                mDATE_EFFECTIVE(); if (failed) return ;
 
                 }
                 break;
             case 30 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:161: DATE_EFFECTIVE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:172: DATE_EXPIRES
                 {
-                mDATE_EFFECTIVE(); if (failed) return ;
+                mDATE_EXPIRES(); if (failed) return ;
 
                 }
                 break;
             case 31 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:176: DATE_EXPIRES
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:185: ENABLED
                 {
-                mDATE_EXPIRES(); if (failed) return ;
+                mENABLED(); if (failed) return ;
 
                 }
                 break;
             case 32 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:189: ENABLED
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:193: SALIENCE
                 {
-                mENABLED(); if (failed) return ;
+                mSALIENCE(); if (failed) return ;
 
                 }
                 break;
             case 33 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:197: SALIENCE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:202: NO_LOOP
                 {
-                mSALIENCE(); if (failed) return ;
+                mNO_LOOP(); if (failed) return ;
 
                 }
                 break;
             case 34 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:206: NO_LOOP
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:210: AUTO_FOCUS
                 {
-                mNO_LOOP(); if (failed) return ;
+                mAUTO_FOCUS(); if (failed) return ;
 
                 }
                 break;
             case 35 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:214: AUTO_FOCUS
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:221: ACTIVATION_GROUP
                 {
-                mAUTO_FOCUS(); if (failed) return ;
+                mACTIVATION_GROUP(); if (failed) return ;
 
                 }
                 break;
             case 36 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:225: ACTIVATION_GROUP
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:238: AGENDA_GROUP
                 {
-                mACTIVATION_GROUP(); if (failed) return ;
+                mAGENDA_GROUP(); if (failed) return ;
 
                 }
                 break;
             case 37 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:242: AGENDA_GROUP
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:251: DIALECT
                 {
-                mAGENDA_GROUP(); if (failed) return ;
+                mDIALECT(); if (failed) return ;
 
                 }
                 break;
             case 38 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:255: DIALECT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:259: RULEFLOW_GROUP
                 {
-                mDIALECT(); if (failed) return ;
+                mRULEFLOW_GROUP(); if (failed) return ;
 
                 }
                 break;
             case 39 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:263: RULEFLOW_GROUP
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:274: DURATION
                 {
-                mRULEFLOW_GROUP(); if (failed) return ;
+                mDURATION(); if (failed) return ;
 
                 }
                 break;
             case 40 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:278: DURATION
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:283: LOCK_ON_ACTIVE
                 {
-                mDURATION(); if (failed) return ;
+                mLOCK_ON_ACTIVE(); if (failed) return ;
 
                 }
                 break;
             case 41 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:287: LOCK_ON_ACTIVE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:298: FROM
                 {
-                mLOCK_ON_ACTIVE(); if (failed) return ;
+                mFROM(); if (failed) return ;
 
                 }
                 break;
             case 42 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:302: FROM
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:303: ACCUMULATE
                 {
-                mFROM(); if (failed) return ;
+                mACCUMULATE(); if (failed) return ;
 
                 }
                 break;
             case 43 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:307: ACCUMULATE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:314: INIT
                 {
-                mACCUMULATE(); if (failed) return ;
+                mINIT(); if (failed) return ;
 
                 }
                 break;
             case 44 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:318: INIT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:319: ACTION
                 {
-                mINIT(); if (failed) return ;
+                mACTION(); if (failed) return ;
 
                 }
                 break;
             case 45 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:323: ACTION
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:326: RESULT
                 {
-                mACTION(); if (failed) return ;
+                mRESULT(); if (failed) return ;
 
                 }
                 break;
             case 46 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:330: RESULT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:333: COLLECT
                 {
-                mRESULT(); if (failed) return ;
+                mCOLLECT(); if (failed) return ;
 
                 }
                 break;
             case 47 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:337: COLLECT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:341: OR
                 {
-                mCOLLECT(); if (failed) return ;
+                mOR(); if (failed) return ;
 
                 }
                 break;
             case 48 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:345: OR
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:344: AND
                 {
-                mOR(); if (failed) return ;
+                mAND(); if (failed) return ;
 
                 }
                 break;
             case 49 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:348: AND
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:348: CONTAINS
                 {
-                mAND(); if (failed) return ;
+                mCONTAINS(); if (failed) return ;
 
                 }
                 break;
             case 50 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:352: CONTAINS
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:357: EXCLUDES
                 {
-                mCONTAINS(); if (failed) return ;
+                mEXCLUDES(); if (failed) return ;
 
                 }
                 break;
             case 51 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:361: EXCLUDES
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:366: MEMBEROF
                 {
-                mEXCLUDES(); if (failed) return ;
+                mMEMBEROF(); if (failed) return ;
 
                 }
                 break;
             case 52 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:370: MEMBEROF
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:375: MATCHES
                 {
-                mMEMBEROF(); if (failed) return ;
+                mMATCHES(); if (failed) return ;
 
                 }
                 break;
             case 53 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:379: MATCHES
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:383: IN
                 {
-                mMATCHES(); if (failed) return ;
+                mIN(); if (failed) return ;
 
                 }
                 break;
             case 54 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:387: NULL
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:386: NULL
                 {
                 mNULL(); if (failed) return ;
 
                 }
                 break;
             case 55 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:392: EXISTS
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:391: EXISTS
                 {
                 mEXISTS(); if (failed) return ;
 
                 }
                 break;
             case 56 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:399: NOT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:398: NOT
                 {
                 mNOT(); if (failed) return ;
 
                 }
                 break;
             case 57 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:403: EVAL
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:402: EVAL
                 {
                 mEVAL(); if (failed) return ;
 
                 }
                 break;
             case 58 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:408: FORALL
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:407: FORALL
                 {
                 mFORALL(); if (failed) return ;
 
                 }
                 break;
             case 59 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:415: WHEN
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:414: WHEN
                 {
                 mWHEN(); if (failed) return ;
 
                 }
                 break;
             case 60 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:420: THEN
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:419: THEN
                 {
                 mTHEN(); if (failed) return ;
 
                 }
                 break;
             case 61 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:425: END
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:424: END
                 {
                 mEND(); if (failed) return ;
 
                 }
                 break;
             case 62 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:429: ID
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:428: ID
                 {
                 mID(); if (failed) return ;
 
                 }
                 break;
             case 63 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:432: SH_STYLE_SINGLE_LINE_COMMENT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:431: SH_STYLE_SINGLE_LINE_COMMENT
                 {
                 mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
 
                 }
                 break;
             case 64 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:461: C_STYLE_SINGLE_LINE_COMMENT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:460: C_STYLE_SINGLE_LINE_COMMENT
                 {
                 mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
 
                 }
                 break;
             case 65 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:489: LEFT_PAREN
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:488: LEFT_PAREN
                 {
                 mLEFT_PAREN(); if (failed) return ;
 
                 }
                 break;
             case 66 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:500: RIGHT_PAREN
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:499: RIGHT_PAREN
                 {
                 mRIGHT_PAREN(); if (failed) return ;
 
                 }
                 break;
             case 67 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:512: LEFT_SQUARE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:511: LEFT_SQUARE
                 {
                 mLEFT_SQUARE(); if (failed) return ;
 
                 }
                 break;
             case 68 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:524: RIGHT_SQUARE
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:523: RIGHT_SQUARE
                 {
                 mRIGHT_SQUARE(); if (failed) return ;
 
                 }
                 break;
             case 69 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:537: LEFT_CURLY
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:536: LEFT_CURLY
                 {
                 mLEFT_CURLY(); if (failed) return ;
 
                 }
                 break;
             case 70 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:548: RIGHT_CURLY
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:547: RIGHT_CURLY
                 {
                 mRIGHT_CURLY(); if (failed) return ;
 
                 }
                 break;
             case 71 :
-                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:560: MULTI_LINE_COMMENT
+                // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:559: MULTI_LINE_COMMENT
                 {
                 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:579: MISC
+                // /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 ;
 
                 }
@@ -2814,8 +2841,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:1514:14: ( '\\r\\n' )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:16: '\\r\\n'
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:14: ( '\\r\\n' )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1572:16: '\\r\\n'
         {
         match("\r\n"); if (failed) return ;
 
@@ -2842,125 +2869,125 @@
 
     protected DFA18 dfa18 = new DFA18(this);
     static final String DFA18_eotS =
-        "\4\uffff\1\56\1\60\1\62\2\53\1\66\1\70\1\53\1\uffff\1\73\1\uffff"+
-        "\1\53\21\52\2\uffff\1\53\30\uffff\36\52\1\u0083\3\52\2\uffff\21"+
-        "\52\1\u0098\10\52\1\u00a1\2\52\1\u00a4\1\uffff\4\52\1\uffff\3\52"+
-        "\1\u00ac\1\u00ad\3\52\1\u00b1\2\52\1\u00b4\2\52\1\u00b8\5\52\1\uffff"+
-        "\10\52\1\uffff\1\u00c7\1\52\1\uffff\1\u00c9\5\52\1\u00cf\2\uffff"+
-        "\2\52\1\u00ac\1\uffff\2\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\1\u00f1\4\52\1\uffff\3\52"+
-        "\1\u00fb\10\52\1\uffff\1\u0104\2\uffff\1\52\2\uffff\2\52\1\uffff"+
-        "\1\52\2\uffff\1\u0109\2\52\1\uffff\1\u010c\1\52\1\u010e\2\52\1\u0111"+
-        "\1\u0112\1\u0113\1\uffff\4\52\1\uffff\1\u0118\1\u0119\1\uffff\1"+
-        "\u011a\1\uffff\1\u011b\1\u011c\4\uffff\3\52\5\uffff\1\52\1\u0121"+
-        "\1\u0122\3\uffff";
+        "\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";
     static final String DFA18_eofS =
         "\u0123\uffff";
     static final String DFA18_minS =
-        "\1\11\3\uffff\1\52\1\174\1\46\1\60\4\75\1\uffff\1\56\1\uffff\1\0"+
+        "\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\165\1\145\1\155\1\156"+
-        "\1\154\1\157\1\162\1\143\1\151\1\160\1\157\1\154\1\163\1\145\1\143"+
-        "\1\145\1\144\3\164\1\141\1\162\1\143\2\141\1\154\1\55\1\154\1\143"+
-        "\1\154\1\60\1\155\1\164\1\145\2\uffff\1\145\1\156\1\160\1\143\1"+
-        "\163\1\155\1\141\1\153\1\164\1\157\1\142\1\145\1\165\1\162\1\151"+
-        "\1\165\1\156\1\60\1\162\1\157\1\145\1\154\1\141\1\154\1\163\1\142"+
-        "\1\60\1\154\1\151\1\60\1\uffff\1\154\1\153\1\154\1\164\1\uffff\1"+
-        "\142\1\143\1\156\2\60\1\154\1\164\1\145\1\60\1\154\1\141\1\60\1"+
-        "\162\1\141\1\60\1\154\1\171\1\157\1\155\1\144\1\uffff\1\151\2\55"+
-        "\1\145\1\164\1\165\1\164\1\154\1\uffff\1\60\1\145\1\uffff\1\60\1"+
-        "\55\1\145\1\141\1\145\1\150\1\60\2\uffff\1\141\1\151\1\60\1\uffff"+
-        "\1\154\1\147\1\uffff\1\164\2\154\1\uffff\1\164\1\60\1\156\1\141"+
-        "\1\165\1\141\1\142\1\uffff\1\145\1\143\1\151\1\144\1\163\1\145\1"+
-        "\uffff\1\156\2\uffff\1\143\1\151\1\162\1\145\1\uffff\1\164\1\157"+
-        "\1\60\1\145\2\60\1\157\1\60\1\uffff\1\60\1\164\1\154\1\55\1\165"+
-        "\1\146\1\164\1\157\1\145\1\60\1\144\1\143\1\164\1\156\1\117\1\163"+
-        "\1\145\1\156\1\uffff\1\60\2\uffff\1\167\2\uffff\1\151\1\141\1\uffff"+
-        "\1\164\2\uffff\1\60\1\156\1\163\1\uffff\1\60\1\145\1\60\1\163\1"+
-        "\146\3\60\1\uffff\1\55\1\157\1\164\1\145\1\uffff\2\60\1\uffff\1"+
-        "\60\1\uffff\2\60\4\uffff\1\156\1\145\1\163\5\uffff\1\55\2\60\3\uffff";
+        "\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\60\1\55\1\60\3\uffff";
     static final String DFA18_maxS =
-        "\1\u00ff\3\uffff\1\52\1\174\1\46\1\76\4\75\1\uffff\1\71\1\uffff"+
+        "\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\165\1\145\1\155\1"+
-        "\156\1\154\1\157\1\162\1\143\1\151\1\160\1\157\1\154\1\163\1\145"+
-        "\1\164\1\145\1\144\3\164\1\141\1\162\1\151\1\144\1\141\1\154\1\164"+
-        "\1\154\1\143\1\156\1\u00ff\1\155\1\164\1\145\2\uffff\1\145\1\156"+
-        "\1\160\1\143\1\163\1\155\1\141\1\153\1\164\1\157\1\142\1\145\1\165"+
-        "\1\162\1\151\1\165\1\156\1\u00ff\1\162\1\157\1\145\1\154\1\141\1"+
-        "\154\1\163\1\142\1\u00ff\1\154\1\151\1\u00ff\1\uffff\1\154\1\153"+
-        "\1\154\1\164\1\uffff\1\142\1\143\1\156\2\u00ff\1\154\1\164\1\145"+
-        "\1\u00ff\1\154\1\141\1\u00ff\1\162\1\141\1\u00ff\1\154\1\171\1\166"+
-        "\1\155\1\144\1\uffff\1\151\2\55\1\145\1\164\1\165\1\164\1\154\1"+
-        "\uffff\1\u00ff\1\145\1\uffff\1\u00ff\1\55\1\145\1\141\1\145\1\150"+
-        "\1\u00ff\2\uffff\1\141\1\151\1\u00ff\1\uffff\1\154\1\147\1\uffff"+
-        "\1\164\2\154\1\uffff\1\164\1\u00ff\1\156\1\141\1\165\1\141\1\142"+
-        "\1\uffff\1\145\1\143\1\151\1\144\1\163\1\145\1\uffff\1\156\2\uffff"+
-        "\1\143\1\151\1\162\1\145\1\uffff\1\164\1\157\1\u00ff\1\145\2\u00ff"+
-        "\1\157\1\u00ff\1\uffff\1\u00ff\1\164\1\154\1\55\1\165\1\170\1\164"+
-        "\1\157\1\145\1\u00ff\1\144\1\143\1\164\1\156\1\117\1\163\1\145\1"+
-        "\156\1\uffff\1\u00ff\2\uffff\1\167\2\uffff\1\151\1\141\1\uffff\1"+
-        "\164\2\uffff\1\u00ff\1\156\1\163\1\uffff\1\u00ff\1\145\1\u00ff\1"+
-        "\163\1\146\3\u00ff\1\uffff\1\55\1\157\1\164\1\145\1\uffff\2\u00ff"+
-        "\1\uffff\1\u00ff\1\uffff\2\u00ff\4\uffff\1\156\1\145\1\163\5\uffff"+
-        "\1\55\2\u00ff\3\uffff";
+        "\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";
     static final String DFA18_acceptS =
-        "\1\uffff\1\1\1\2\1\3\10\uffff\1\21\1\uffff\1\24\22\uffff\1\76\1"+
-        "\77\1\uffff\1\101\1\102\1\103\1\104\1\105\1\106\1\76\1\110\1\3\1"+
-        "\5\1\4\1\6\1\10\1\20\1\7\1\11\1\12\1\14\1\13\1\16\1\15\1\17\1\23"+
-        "\1\22\42\uffff\1\100\1\107\36\uffff\1\42\4\uffff\1\60\24\uffff\1"+
-        "\61\10\uffff\1\75\2\uffff\1\70\7\uffff\1\25\1\74\3\uffff\1\52\2"+
-        "\uffff\1\54\3\uffff\1\32\7\uffff\1\43\6\uffff\1\71\1\uffff\1\66"+
-        "\1\51\4\uffff\1\73\10\uffff\1\33\22\uffff\1\72\1\uffff\1\27\1\31"+
-        "\1\uffff\1\56\1\55\2\uffff\1\45\1\uffff\1\36\1\37\3\uffff\1\67\10"+
-        "\uffff\1\26\4\uffff\1\46\2\uffff\1\40\1\uffff\1\57\2\uffff\1\65"+
-        "\1\34\1\30\1\47\3\uffff\1\50\1\63\1\41\1\62\1\64\3\uffff\1\44\1"+
-        "\53\1\35";
+        "\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";
     static final String DFA18_specialS =
         "\u0123\uffff}>";
     static final String[] DFA18_transitionS = {
-            "\2\14\1\uffff\2\14\22\uffff\1\14\1\13\1\16\1\42\1\41\1\53\1"+
-            "\6\1\17\1\44\1\45\2\53\1\3\1\7\1\4\1\43\12\15\1\2\1\1\1\12\1"+
-            "\10\1\11\2\53\32\52\1\46\1\53\1\47\1\53\1\41\1\uffff\1\27\1"+
-            "\52\1\35\1\30\1\31\1\21\1\24\1\52\1\23\2\52\1\34\1\37\1\33\1"+
-            "\36\1\22\1\26\1\25\1\32\1\20\2\52\1\40\3\52\1\50\1\5\1\51\102"+
+            "\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"+
             "\uffff\100\52",
             "",
             "",
-            "",
-            "\1\55",
-            "\1\57",
-            "\1\61",
-            "\12\15\4\uffff\1\63",
+            "\1\54",
+            "\1\56",
+            "\1\60",
+            "\12\14\4\uffff\1\62",
+            "\1\63",
             "\1\64",
-            "\1\65",
-            "\1\67",
-            "\1\71",
+            "\1\66",
+            "\1\70",
             "",
-            "\1\72\1\uffff\12\15",
+            "\1\71\1\uffff\12\14",
             "",
-            "\uffff\16",
-            "\1\76\2\uffff\1\75\11\uffff\1\74",
-            "\1\100\15\uffff\1\102\2\uffff\1\101\2\uffff\1\77",
-            "\1\103",
-            "\1\105\1\104",
-            "\1\106",
-            "\1\110\17\uffff\1\107",
-            "\1\111",
-            "\1\112\3\uffff\1\113\6\uffff\1\114\5\uffff\1\115\1\116",
-            "\1\117\7\uffff\1\120\13\uffff\1\121",
-            "\1\123\7\uffff\1\124\1\uffff\1\122",
-            "\1\125",
-            "\1\126\5\uffff\1\127",
+            "\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",
+            "\1\124",
+            "\1\125\5\uffff\1\126",
+            "\1\127",
             "\1\130",
             "\1\131",
-            "\1\132",
-            "\1\134\3\uffff\1\133",
-            "\1\135",
+            "\1\132\3\uffff\1\133",
+            "\1\134",
             "",
             "",
-            "\1\137\4\uffff\1\136",
+            "\1\136\4\uffff\1\135",
             "",
             "",
             "",
@@ -2985,6 +3012,7 @@
             "",
             "",
             "",
+            "\1\137",
             "\1\140",
             "\1\141",
             "\1\142",
@@ -2992,26 +3020,26 @@
             "\1\144",
             "\1\145",
             "\1\146",
-            "\1\147",
-            "\1\150",
+            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\10\52\1\147\21\52"+
+            "\105\uffff\100\52",
             "\1\151",
             "\1\152",
             "\1\153",
             "\1\154",
             "\1\155",
-            "\1\157\20\uffff\1\156",
-            "\1\160",
-            "\1\161",
+            "\1\156",
+            "\1\157",
+            "\1\160\20\uffff\1\161",
             "\1\162",
             "\1\163",
             "\1\164",
             "\1\165",
             "\1\166",
-            "\1\167\5\uffff\1\170",
+            "\1\170\5\uffff\1\167",
             "\1\171\2\uffff\1\172",
             "\1\173",
             "\1\174",
-            "\1\176\106\uffff\1\175",
+            "\1\175\106\uffff\1\176",
             "\1\177",
             "\1\u0080",
             "\1\u0081\1\uffff\1\u0082",
@@ -3031,16 +3059,17 @@
             "\1\u008d",
             "\1\u008e",
             "\1\u008f",
+            "",
             "\1\u0090",
             "\1\u0091",
             "\1\u0092",
             "\1\u0093",
             "\1\u0094",
-            "\1\u0095",
+            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
+            "\52",
             "\1\u0096",
             "\1\u0097",
-            "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
-            "\52",
+            "\1\u0098",
             "\1\u0099",
             "\1\u009a",
             "\1\u009b",
@@ -3053,9 +3082,9 @@
             "\52",
             "\1\u00a2",
             "\1\u00a3",
+            "",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
-            "",
             "\1\u00a5",
             "\1\u00a6",
             "\1\u00a7",
@@ -3071,9 +3100,9 @@
             "\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\u00b2",
             "\1\u00b3",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
@@ -3083,10 +3112,10 @@
             "\105\uffff\100\52",
             "\1\u00b9",
             "\1\u00ba",
-            "\1\u00bb\6\uffff\1\u00bc",
-            "\1\u00bd",
-            "\1\u00be",
             "",
+            "\1\u00bb",
+            "\1\u00bc",
+            "\1\u00bd\6\uffff\1\u00be",
             "\1\u00bf",
             "\1\u00c0",
             "\1\u00c1",
@@ -3113,10 +3142,10 @@
             "",
             "\1\u00d0",
             "\1\u00d1",
+            "\1\u00d2",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
             "",
-            "\1\u00d2",
             "\1\u00d3",
             "",
             "\1\u00d4",
@@ -3160,18 +3189,18 @@
             "\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\u00f2",
-            "\1\u00f3",
             "\1\u00f4",
             "\1\u00f5",
-            "\1\u00f6\21\uffff\1\u00f7",
+            "\1\u00f7\21\uffff\1\u00f6",
             "\1\u00f8",
             "\1\u00f9",
-            "\1\u00fa",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u00fb",
             "\1\u00fc",
             "\1\u00fd",
             "\1\u00fe",
@@ -3189,25 +3218,25 @@
             "",
             "",
             "\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\u010a",
+            "",
             "\1\u010b",
-            "",
             "\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",
-            "\1\u0110",
             "\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"+
@@ -3228,12 +3257,12 @@
             "",
             "\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\u011d",
             "\1\u011e",
             "\1\u011f",
@@ -3242,9 +3271,9 @@
             "",
             "",
             "",
-            "\1\u0120",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
+            "\1\u0121",
             "\12\52\7\uffff\32\52\4\uffff\1\52\1\uffff\32\52\105\uffff\100"+
             "\52",
             "",
@@ -3282,7 +3311,7 @@
             this.transition = DFA18_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | 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 | 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 | MISC );";
+            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 );";
         }
     }
  

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-04 00:48:52 UTC (rev 11658)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2007-05-04 00:56:11 UTC (rev 11659)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0b7 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-02 14:34:31
+// $ANTLR 3.0b7 /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2007-05-03 21:46:26
 
 	package org.drools.lang;
 	import java.util.List;
@@ -18,74 +18,76 @@
 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", "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", "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", "';'", "':'", "'.'", "'.*'", "'||'", "'&'", "'|'", "'->'", "'=='", "'>'", "'>='", "'<'", "'<='", "'!='", "'&&'"
     };
-    public static final int EXISTS=51;
+    public static final int EXISTS=53;
+    public static final int COMMA=44;
     public static final int AUTO_FOCUS=22;
     public static final int END=10;
-    public static final int HexDigit=58;
-    public static final int FORALL=53;
+    public static final int HexDigit=60;
+    public static final int FORALL=55;
     public static final int TEMPLATE=11;
-    public static final int MISC=64;
-    public static final int FLOAT=43;
+    public static final int MISC=66;
+    public static final int FLOAT=45;
     public static final int QUERY=9;
-    public static final int THEN=54;
+    public static final int THEN=56;
     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=49;
+    public static final int AND=51;
     public static final int FUNCTION=7;
     public static final int GLOBAL=8;
-    public static final int EscapeSequence=57;
+    public static final int EscapeSequence=59;
     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=47;
+    public static final int LEFT_SQUARE=49;
     public static final int CONTAINS=38;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=61;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=63;
     public static final int ATTRIBUTES=4;
-    public static final int LEFT_CURLY=45;
+    public static final int LEFT_CURLY=47;
     public static final int RESULT=32;
-    public static final int FROM=50;
+    public static final int FROM=52;
     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=46;
+    public static final int RIGHT_CURLY=48;
     public static final int BOOL=18;
     public static final int EXCLUDES=40;
     public static final int MEMBEROF=41;
     public static final int WHEN=13;
     public static final int RULEFLOW_GROUP=24;
-    public static final int WS=56;
+    public static final int WS=58;
     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 NO_LOOP=21;
     public static final int ACCUMULATE=29;
-    public static final int UnicodeEscape=59;
+    public static final int UnicodeEscape=61;
     public static final int DURATION=26;
-    public static final int EVAL=52;
+    public static final int EVAL=54;
     public static final int MATCHES=39;
     public static final int EOF=-1;
-    public static final int EOL=55;
-    public static final int NULL=44;
+    public static final int EOL=57;
+    public static final int NULL=46;
     public static final int AGENDA_GROUP=25;
-    public static final int OctalEscape=60;
+    public static final int OctalEscape=62;
     public static final int SALIENCE=19;
-    public static final int MULTI_LINE_COMMENT=63;
+    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 ENABLED=17;
-    public static final int RIGHT_SQUARE=48;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=62;
+    public static final int RIGHT_SQUARE=50;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=64;
 
         public DRLParser(TokenStream input) {
             super(input);
-            ruleMemo = new HashMap[201+1];
+            ruleMemo = new HashMap[208+1];
          }
         
 
@@ -253,14 +255,14 @@
             int alt1=2;
             int LA1_0 = input.LA(1);
 
-            if ( (LA1_0==65) ) {
+            if ( (LA1_0==67) ) {
                 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,65,FOLLOW_65_in_opt_semicolon46); if (failed) return ;
+                    match(input,67,FOLLOW_67_in_opt_semicolon46); if (failed) return ;
 
                     }
                     break;
@@ -398,7 +400,7 @@
                     // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:185:5: ATTRIBUTES ':'
                     {
                     match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_prolog105); if (failed) return ;
-                    match(input,66,FOLLOW_66_in_prolog107); if (failed) return ;
+                    match(input,68,FOLLOW_68_in_prolog107); if (failed) return ;
 
                     }
                     break;
@@ -411,7 +413,7 @@
                 int alt6=2;
                 int LA6_0 = input.LA(1);
 
-                if ( (LA6_0==DATE_EFFECTIVE||(LA6_0>=DATE_EXPIRES && LA6_0<=ENABLED)||LA6_0==SALIENCE||(LA6_0>=NO_LOOP && LA6_0<=LOCK_ON_ACTIVE)||LA6_0==67) ) {
+                if ( (LA6_0==DATE_EFFECTIVE||(LA6_0>=DATE_EXPIRES && LA6_0<=ENABLED)||LA6_0==SALIENCE||(LA6_0>=NO_LOOP && LA6_0<=LOCK_ON_ACTIVE)||LA6_0==COMMA) ) {
                     alt6=1;
                 }
 
@@ -424,14 +426,14 @@
             	    int alt5=2;
             	    int LA5_0 = input.LA(1);
 
-            	    if ( (LA5_0==67) ) {
+            	    if ( (LA5_0==COMMA) ) {
             	        alt5=1;
             	    }
             	    switch (alt5) {
             	        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_prolog116); if (failed) return ;
+            	            match(input,COMMA,FOLLOW_COMMA_in_prolog116); if (failed) return ;
 
             	            }
             	            break;
@@ -808,7 +810,7 @@
                 int alt8=2;
                 int LA8_0 = input.LA(1);
 
-                if ( (LA8_0==68) ) {
+                if ( (LA8_0==69) ) {
                     alt8=1;
                 }
 
@@ -817,7 +819,7 @@
             	case 1 :
             	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:259:5: '.' id= identifier
             	    {
-            	    match(input,68,FOLLOW_68_in_import_name391); if (failed) return name;
+            	    match(input,69,FOLLOW_69_in_import_name391); if (failed) return name;
             	    pushFollow(FOLLOW_identifier_in_import_name395);
             	    id=identifier();
             	    _fsp--;
@@ -842,7 +844,7 @@
             int alt9=2;
             int LA9_0 = input.LA(1);
 
-            if ( (LA9_0==69) ) {
+            if ( (LA9_0==70) ) {
                 alt9=1;
             }
             switch (alt9) {
@@ -850,7 +852,7 @@
                     // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:266:5: star= '.*'
                     {
                     star=(Token)input.LT(1);
-                    match(input,69,FOLLOW_69_in_import_name419); if (failed) return name;
+                    match(input,70,FOLLOW_70_in_import_name419); if (failed) return name;
                     if ( backtracking==0 ) {
                        
                       		        name = name + star.getText(); 
@@ -973,7 +975,7 @@
             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<=NOT)||LA10_1==NULL||LA10_1==LEFT_SQUARE||(LA10_1>=AND && LA10_1<=THEN)||LA10_1==68) ) {
+                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) ) {
                     alt10=1;
                 }
             }
@@ -1009,7 +1011,7 @@
             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<=NOT)||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<=OR)||(LA14_0>=CONTAINS && LA14_0<=IN)||LA14_0==NULL||(LA14_0>=AND && LA14_0<=THEN)) ) {
                 alt14=1;
             }
             switch (alt14) {
@@ -1048,7 +1050,7 @@
                         int alt13=2;
                         int LA13_0 = input.LA(1);
 
-                        if ( (LA13_0==67) ) {
+                        if ( (LA13_0==COMMA) ) {
                             alt13=1;
                         }
 
@@ -1057,7 +1059,7 @@
                     	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
                     	    {
-                    	    match(input,67,FOLLOW_67_in_function559); if (failed) return ;
+                    	    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] )?
                     	    int alt12=2;
                     	    alt12 = dfa12.predict(input);
@@ -1403,14 +1405,14 @@
                     int alt16=2;
                     int LA16_0 = input.LA(1);
 
-                    if ( (LA16_0==66) ) {
+                    if ( (LA16_0==68) ) {
                         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,66,FOLLOW_66_in_rule860); if (failed) return rule;
+                            match(input,68,FOLLOW_68_in_rule860); if (failed) return rule;
 
                             }
                             break;
@@ -1481,7 +1483,7 @@
                     // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:5: ATTRIBUTES ':'
                     {
                     match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_rule_attributes920); if (failed) return ;
-                    match(input,66,FOLLOW_66_in_rule_attributes922); if (failed) return ;
+                    match(input,68,FOLLOW_68_in_rule_attributes922); if (failed) return ;
 
                     }
                     break;
@@ -1494,7 +1496,7 @@
                 int alt20=2;
                 int LA20_0 = input.LA(1);
 
-                if ( (LA20_0==DATE_EFFECTIVE||(LA20_0>=DATE_EXPIRES && LA20_0<=ENABLED)||LA20_0==SALIENCE||(LA20_0>=NO_LOOP && LA20_0<=LOCK_ON_ACTIVE)||LA20_0==67) ) {
+                if ( (LA20_0==DATE_EFFECTIVE||(LA20_0>=DATE_EXPIRES && LA20_0<=ENABLED)||LA20_0==SALIENCE||(LA20_0>=NO_LOOP && LA20_0<=LOCK_ON_ACTIVE)||LA20_0==COMMA) ) {
                     alt20=1;
                 }
 
@@ -1507,14 +1509,14 @@
             	    int alt19=2;
             	    int LA19_0 = input.LA(1);
 
-            	    if ( (LA19_0==67) ) {
+            	    if ( (LA19_0==COMMA) ) {
             	        alt19=1;
             	    }
             	    switch (alt19) {
             	        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_rule_attributes931); if (failed) return ;
+            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes931); if (failed) return ;
 
             	            }
             	            break;
@@ -1998,7 +2000,7 @@
                 if ( (LA22_1==BOOL) ) {
                     alt22=2;
                 }
-                else if ( (LA22_1==EOF||(LA22_1>=IMPORT && LA22_1<=QUERY)||(LA22_1>=TEMPLATE && LA22_1<=DATE_EFFECTIVE)||(LA22_1>=DATE_EXPIRES && LA22_1<=ENABLED)||LA22_1==SALIENCE||(LA22_1>=NO_LOOP && LA22_1<=LOCK_ON_ACTIVE)||LA22_1==THEN||LA22_1==67) ) {
+                else if ( (LA22_1==EOF||(LA22_1>=IMPORT && LA22_1<=QUERY)||(LA22_1>=TEMPLATE && LA22_1<=DATE_EFFECTIVE)||(LA22_1>=DATE_EXPIRES && LA22_1<=ENABLED)||LA22_1==SALIENCE||(LA22_1>=NO_LOOP && LA22_1<=LOCK_ON_ACTIVE)||LA22_1==COMMA||LA22_1==THEN) ) {
                     alt22=1;
                 }
                 else {
@@ -2099,7 +2101,7 @@
                 if ( (LA23_1==BOOL) ) {
                     alt23=2;
                 }
-                else if ( (LA23_1==EOF||(LA23_1>=IMPORT && LA23_1<=QUERY)||(LA23_1>=TEMPLATE && LA23_1<=DATE_EFFECTIVE)||(LA23_1>=DATE_EXPIRES && LA23_1<=ENABLED)||LA23_1==SALIENCE||(LA23_1>=NO_LOOP && LA23_1<=LOCK_ON_ACTIVE)||LA23_1==THEN||LA23_1==67) ) {
+                else if ( (LA23_1==EOF||(LA23_1>=IMPORT && LA23_1<=QUERY)||(LA23_1>=TEMPLATE && LA23_1<=DATE_EFFECTIVE)||(LA23_1>=DATE_EXPIRES && LA23_1<=ENABLED)||LA23_1==SALIENCE||(LA23_1>=NO_LOOP && LA23_1<=LOCK_ON_ACTIVE)||LA23_1==COMMA||LA23_1==THEN) ) {
                     alt23=1;
                 }
                 else {
@@ -2410,7 +2412,7 @@
                 if ( (LA24_1==BOOL) ) {
                     alt24=2;
                 }
-                else if ( (LA24_1==EOF||(LA24_1>=IMPORT && LA24_1<=QUERY)||(LA24_1>=TEMPLATE && LA24_1<=DATE_EFFECTIVE)||(LA24_1>=DATE_EXPIRES && LA24_1<=ENABLED)||LA24_1==SALIENCE||(LA24_1>=NO_LOOP && LA24_1<=LOCK_ON_ACTIVE)||LA24_1==THEN||LA24_1==67) ) {
+                else if ( (LA24_1==EOF||(LA24_1>=IMPORT && LA24_1<=QUERY)||(LA24_1>=TEMPLATE && LA24_1<=DATE_EFFECTIVE)||(LA24_1>=DATE_EXPIRES && LA24_1<=ENABLED)||LA24_1==SALIENCE||(LA24_1>=NO_LOOP && LA24_1<=LOCK_ON_ACTIVE)||LA24_1==COMMA||LA24_1==THEN) ) {
                     alt24=1;
                 }
                 else {
@@ -2601,10 +2603,10 @@
             if ( (LA26_0==ID) ) {
                 int LA26_1 = input.LA(2);
 
-                if ( (LA26_1==66) ) {
+                if ( (LA26_1==68) ) {
                     alt26=1;
                 }
-                else if ( (LA26_1==LEFT_PAREN||LA26_1==LEFT_SQUARE||LA26_1==68) ) {
+                else if ( (LA26_1==LEFT_PAREN||LA26_1==LEFT_SQUARE||LA26_1==69) ) {
                     alt26=2;
                 }
                 else {
@@ -2776,7 +2778,7 @@
             int alt28=2;
             int LA28_0 = input.LA(1);
 
-            if ( (LA28_0==68) ) {
+            if ( (LA28_0==69) ) {
                 alt28=1;
             }
             switch (alt28) {
@@ -2829,7 +2831,7 @@
             // /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] )?
             {
-            match(input,68,FOLLOW_68_in_expression_chain1915); if (failed) return ;
+            match(input,69,FOLLOW_69_in_expression_chain1915); if (failed) return ;
             pushFollow(FOLLOW_identifier_in_expression_chain1919);
             field=identifier();
             _fsp--;
@@ -2905,7 +2907,7 @@
             int alt30=2;
             int LA30_0 = input.LA(1);
 
-            if ( (LA30_0==68) ) {
+            if ( (LA30_0==69) ) {
                 alt30=1;
             }
             switch (alt30) {
@@ -2971,7 +2973,7 @@
             pattern=lhs_pattern();
             _fsp--;
             if (failed) return d;
-            match(input,67,FOLLOW_67_in_accumulate_statement2062); if (failed) return d;
+            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2062); if (failed) return d;
             if ( backtracking==0 ) {
 
               		        d.setSourcePattern( (PatternDescr)pattern );
@@ -2982,7 +2984,7 @@
             text=paren_chunk(null);
             _fsp--;
             if (failed) return d;
-            match(input,67,FOLLOW_67_in_accumulate_statement2078); if (failed) return d;
+            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2078); if (failed) return d;
             if ( backtracking==0 ) {
 
               		        d.setInitCode( text.substring(1, text.length()-1) );
@@ -2993,7 +2995,7 @@
             text=paren_chunk(null);
             _fsp--;
             if (failed) return d;
-            match(input,67,FOLLOW_67_in_accumulate_statement2094); if (failed) return d;
+            match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2094); if (failed) return d;
             if ( backtracking==0 ) {
 
               		        d.setActionCode( text.substring(1, text.length()-1) );
@@ -3098,7 +3100,7 @@
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_fact_binding2207); if (failed) return d;
-            match(input,66,FOLLOW_66_in_fact_binding2209); if (failed) return d;
+            match(input,68,FOLLOW_68_in_fact_binding2209); if (failed) return d;
             if ( backtracking==0 ) {
 
                		        // handling incomplete parsing
@@ -3201,7 +3203,7 @@
                         int alt31=2;
                         int LA31_0 = input.LA(1);
 
-                        if ( (LA31_0==OR||LA31_0==70) ) {
+                        if ( (LA31_0==OR||LA31_0==71) ) {
                             int LA31_6 = input.LA(2);
 
                             if ( (synpred49()) ) {
@@ -3216,7 +3218,7 @@
                     	case 1 :
                     	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874:6: ( OR | '||' ) f= fact
                     	    {
-                    	    if ( input.LA(1)==OR||input.LA(1)==70 ) {
+                    	    if ( input.LA(1)==OR||input.LA(1)==71 ) {
                     	        input.consume();
                     	        errorRecovery=false;failed=false;
                     	    }
@@ -3318,7 +3320,7 @@
             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<=NOT)||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>=CONTAINS && LA33_0<=IN)||LA33_0==NULL||(LA33_0>=AND && LA33_0<=THEN)) ) {
                 alt33=1;
             }
             switch (alt33) {
@@ -3372,7 +3374,7 @@
             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<=NOT)||LA34_0==NULL||(LA34_0>=AND && LA34_0<=THEN)) ) {
+            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;
             }
             else if ( (LA34_0==LEFT_PAREN) ) {
@@ -3415,7 +3417,7 @@
                 int alt36=2;
                 int LA36_0 = input.LA(1);
 
-                if ( (LA36_0==67) ) {
+                if ( (LA36_0==COMMA) ) {
                     alt36=1;
                 }
 
@@ -3424,12 +3426,12 @@
             	case 1 :
             	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:5: ',' ( constraint[pattern] | predicate[pattern] )
             	    {
-            	    match(input,67,FOLLOW_67_in_constraints2432); if (failed) return ;
+            	    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);
 
-            	    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<=NOT)||LA35_0==NULL||(LA35_0>=AND && LA35_0<=THEN)) ) {
+            	    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) ) {
@@ -3491,22 +3493,20 @@
 
 
     // $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 ( (rd= constraint_expression (con= ( '&' | '|' ) rd= constraint_expression )* ) | '->' predicate[pattern] )? ;
+    // /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 {
         Token fb=null;
         Token con=null;
         Token f = null;
 
-        RestrictionDescr rd = null;
 
 
-
         		FieldBindingDescr fbd = null;
         		FieldConstraintDescr fc = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:3: ( (fb= ID ':' )? f= identifier ( (rd= constraint_expression (con= ( '&' | '|' ) rd= constraint_expression )* ) | '->' predicate[pattern] )? )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:3: (fb= ID ':' )? f= identifier ( (rd= constraint_expression (con= ( '&' | '|' ) rd= constraint_expression )* ) | '->' 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: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 ':' )?
             int alt37=2;
@@ -3515,7 +3515,7 @@
             if ( (LA37_0==ID) ) {
                 int LA37_1 = input.LA(2);
 
-                if ( (LA37_1==66) ) {
+                if ( (LA37_1==68) ) {
                     alt37=1;
                 }
             }
@@ -3525,7 +3525,7 @@
                     {
                     fb=(Token)input.LT(1);
                     match(input,ID,FOLLOW_ID_in_constraint2467); if (failed) return ;
-                    match(input,66,FOLLOW_66_in_constraint2469); if (failed) return ;
+                    match(input,68,FOLLOW_68_in_constraint2469); if (failed) return ;
                     if ( backtracking==0 ) {
                        
                       			fbd = new FieldBindingDescr();
@@ -3565,53 +3565,52 @@
               		    }
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:960:3: ( (rd= constraint_expression (con= ( '&' | '|' ) rd= constraint_expression )* ) | '->' predicate[pattern] )?
+            // /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] )?
             int alt39=3;
             int LA39_0 = input.LA(1);
 
-            if ( ((LA39_0>=CONTAINS && LA39_0<=NOT)||(LA39_0>=74 && LA39_0<=79)) ) {
+            if ( ((LA39_0>=CONTAINS && LA39_0<=IN)||(LA39_0>=75 && LA39_0<=80)) ) {
                 alt39=1;
             }
-            else if ( (LA39_0==73) ) {
+            else if ( (LA39_0==74) ) {
                 alt39=2;
             }
             switch (alt39) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:4: (rd= constraint_expression (con= ( '&' | '|' ) rd= constraint_expression )* )
+                    // /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:4: (rd= constraint_expression (con= ( '&' | '|' ) rd= constraint_expression )* )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:6: rd= constraint_expression (con= ( '&' | '|' ) rd= constraint_expression )*
+                    // /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_constraint2508);
-                    rd=constraint_expression();
+                    pushFollow(FOLLOW_constraint_expression_in_constraint2506);
+                    constraint_expression(fc);
                     _fsp--;
                     if (failed) return ;
                     if ( backtracking==0 ) {
 
-                      					fc.addRestriction(rd);
                       					// we must add now as we didn't before
                       					if( fb != null) {
                       					    pattern.addDescr( fc );
                       					}
                       				
                     }
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:969:5: (con= ( '&' | '|' ) rd= constraint_expression )*
+                    // /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>=71 && LA38_0<=72)) ) {
+                        if ( ((LA38_0>=72 && LA38_0<=73)) ) {
                             alt38=1;
                         }
 
 
                         switch (alt38) {
                     	case 1 :
-                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:6: con= ( '&' | '|' ) rd= constraint_expression
+                    	    // /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)>=71 && input.LA(1)<=72) ) {
+                    	    if ( (input.LA(1)>=72 && input.LA(1)<=73) ) {
                     	        input.consume();
                     	        errorRecovery=false;failed=false;
                     	    }
@@ -3619,7 +3618,7 @@
                     	        if (backtracking>0) {failed=true; return ;}
                     	        MismatchedSetException mse =
                     	            new MismatchedSetException(null,input);
-                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint2529);    throw mse;
+                    	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_constraint2528);    throw mse;
                     	    }
 
                     	    if ( backtracking==0 ) {
@@ -3631,19 +3630,12 @@
                     	      						}							
                     	      					
                     	    }
-                    	    pushFollow(FOLLOW_constraint_expression_in_constraint2549);
-                    	    rd=constraint_expression();
+                    	    pushFollow(FOLLOW_constraint_expression_in_constraint2546);
+                    	    constraint_expression(fc);
                     	    _fsp--;
                     	    if (failed) return ;
-                    	    if ( backtracking==0 ) {
 
-                    	      					        if( rd != null ) {
-                    	      							fc.addRestriction(rd);
-                    	      					        }
-                    	      					
                     	    }
-
-                    	    }
                     	    break;
 
                     	default :
@@ -3658,10 +3650,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:4: '->' predicate[pattern]
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:981:4: '->' predicate[pattern]
                     {
-                    match(input,73,FOLLOW_73_in_constraint2577); if (failed) return ;
-                    pushFollow(FOLLOW_predicate_in_constraint2579);
+                    match(input,74,FOLLOW_74_in_constraint2568); if (failed) return ;
+                    pushFollow(FOLLOW_predicate_in_constraint2570);
                     predicate(pattern);
                     _fsp--;
                     if (failed) return ;
@@ -3687,135 +3679,109 @@
 
 
     // $ANTLR start constraint_expression
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:1: constraint_expression returns [RestrictionDescr rd] : op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint ) ;
-    public final RestrictionDescr constraint_expression() throws RecognitionException {
-        RestrictionDescr rd = null;
-
-        Token bvc=null;
+    // /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;
 
-        String lc = null;
+        RestrictionDescr rd = null;
 
-        String rvc = null;
 
-
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:3: (op= operator (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:993:3: op= operator (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
-            {
-            pushFollow(FOLLOW_operator_in_constraint_expression2614);
-            op=operator();
-            _fsp--;
-            if (failed) return rd;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
-            int alt40=4;
+            // /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;
             switch ( input.LA(1) ) {
-            case ID:
+            case IN:
                 {
-                int LA40_1 = input.LA(2);
+                alt40=1;
+                }
+                break;
+            case NOT:
+                {
+                int LA40_2 = input.LA(2);
 
-                if ( (LA40_1==EOF||LA40_1==RIGHT_PAREN||LA40_1==67||(LA40_1>=71 && LA40_1<=72)) ) {
+                if ( (LA40_2==MEMBEROF) ) {
+                    alt40=2;
+                }
+                else if ( (LA40_2==IN) ) {
                     alt40=1;
                 }
-                else if ( (LA40_1==68) ) {
-                    alt40=2;
-                }
                 else {
-                    if (backtracking>0) {failed=true; return rd;}
+                    if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("994:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 40, 1, input);
+                        new NoViableAltException("985:1: constraint_expression[FieldConstraintDescr fc] : ( ( compound_operator[fc] ) | (op= simple_operator rd= expression_value[op] ) );", 40, 2, input);
 
                     throw nvae;
                 }
                 }
                 break;
-            case STRING:
-            case BOOL:
-            case INT:
-            case FLOAT:
-            case NULL:
+            case CONTAINS:
+            case MATCHES:
+            case EXCLUDES:
+            case MEMBEROF:
+            case 75:
+            case 76:
+            case 77:
+            case 78:
+            case 79:
+            case 80:
                 {
-                alt40=3;
+                alt40=2;
                 }
                 break;
-            case LEFT_PAREN:
-                {
-                alt40=4;
-                }
-                break;
             default:
-                if (backtracking>0) {failed=true; return rd;}
+                if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("994:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 40, 0, input);
+                    new NoViableAltException("985:1: constraint_expression[FieldConstraintDescr fc] : ( ( compound_operator[fc] ) | (op= simple_operator rd= expression_value[op] ) );", 40, 0, input);
 
                 throw nvae;
             }
 
             switch (alt40) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:5: bvc= ID
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:3: ( compound_operator[fc] )
                     {
-                    bvc=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_constraint_expression2622); if (failed) return rd;
-                    if ( backtracking==0 ) {
+                    // /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);
+                    _fsp--;
+                    if (failed) return ;
 
-                      				rd = new VariableRestrictionDescr(op, bvc.getText());
-                      			
                     }
 
+
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:4: lc= enum_constraint
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:3: (op= simple_operator rd= expression_value[op] )
                     {
-                    pushFollow(FOLLOW_enum_constraint_in_constraint_expression2638);
-                    lc=enum_constraint();
+                    // /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();
                     _fsp--;
-                    if (failed) return rd;
+                    if (failed) return ;
+                    pushFollow(FOLLOW_expression_value_in_constraint_expression2629);
+                    rd=expression_value(op);
+                    _fsp--;
+                    if (failed) return ;
                     if ( backtracking==0 ) {
-                       
-                      				rd  = new LiteralRestrictionDescr(op, lc, true);
-                      			
-                    }
 
-                    }
-                    break;
-                case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:4: lc= literal_constraint
-                    {
-                    pushFollow(FOLLOW_literal_constraint_in_constraint_expression2661);
-                    lc=literal_constraint();
-                    _fsp--;
-                    if (failed) return rd;
-                    if ( backtracking==0 ) {
-                       
-                      				rd  = new LiteralRestrictionDescr(op, lc);
+                      			    if( rd != null ) {
+                      			        fc.addRestriction( rd );
+                      			    }
                       			
                     }
 
                     }
-                    break;
-                case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:5: rvc= retval_constraint
-                    {
-                    pushFollow(FOLLOW_retval_constraint_in_constraint_expression2675);
-                    rvc=retval_constraint();
-                    _fsp--;
-                    if (failed) return rd;
-                    if ( backtracking==0 ) {
-                       
-                      				rd = new ReturnValueRestrictionDescr(op, rvc);							
-                      			
-                    }
 
+
                     }
                     break;
 
             }
-
-
-            }
-
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -3823,52 +3789,52 @@
         }
         finally {
         }
-        return rd;
+        return ;
     }
     // $ANTLR end constraint_expression
 
 
-    // $ANTLR start operator
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:1: 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 operator() throws RecognitionException {
+    // $ANTLR start simple_operator
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1001: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;
 
         Token t=null;
         Token n=null;
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1017: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:1017: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:1003: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:1003: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:1017: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:1003:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )
             int alt41=11;
             switch ( input.LA(1) ) {
-            case 74:
+            case 75:
                 {
                 alt41=1;
                 }
                 break;
-            case 75:
+            case 76:
                 {
                 alt41=2;
                 }
                 break;
-            case 76:
+            case 77:
                 {
                 alt41=3;
                 }
                 break;
-            case 77:
+            case 78:
                 {
                 alt41=4;
                 }
                 break;
-            case 78:
+            case 79:
                 {
                 alt41=5;
                 }
                 break;
-            case 79:
+            case 80:
                 {
                 alt41=6;
                 }
@@ -3901,99 +3867,99 @@
             default:
                 if (backtracking>0) {failed=true; return op;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1017:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )", 41, 0, input);
+                    new NoViableAltException("1003:3: (t= '==' | t= '>' | t= '>=' | t= '<' | t= '<=' | t= '!=' | t= CONTAINS | t= MATCHES | t= EXCLUDES | t= MEMBEROF | n= NOT t= MEMBEROF )", 41, 0, input);
 
                 throw nvae;
             }
 
             switch (alt41) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1017:5: t= '=='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:5: t= '=='
                     {
                     t=(Token)input.LT(1);
-                    match(input,74,FOLLOW_74_in_operator2709); if (failed) return op;
+                    match(input,75,FOLLOW_75_in_simple_operator2663); if (failed) return op;
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:5: t= '>'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:5: t= '>'
                     {
                     t=(Token)input.LT(1);
-                    match(input,75,FOLLOW_75_in_operator2717); if (failed) return op;
+                    match(input,76,FOLLOW_76_in_simple_operator2671); if (failed) return op;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:5: t= '>='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1005:5: t= '>='
                     {
                     t=(Token)input.LT(1);
-                    match(input,76,FOLLOW_76_in_operator2725); if (failed) return op;
+                    match(input,77,FOLLOW_77_in_simple_operator2679); if (failed) return op;
 
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1020:5: t= '<'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:5: t= '<'
                     {
                     t=(Token)input.LT(1);
-                    match(input,77,FOLLOW_77_in_operator2733); if (failed) return op;
+                    match(input,78,FOLLOW_78_in_simple_operator2687); if (failed) return op;
 
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1021:5: t= '<='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:5: t= '<='
                     {
                     t=(Token)input.LT(1);
-                    match(input,78,FOLLOW_78_in_operator2741); if (failed) return op;
+                    match(input,79,FOLLOW_79_in_simple_operator2695); if (failed) return op;
 
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:5: t= '!='
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:5: t= '!='
                     {
                     t=(Token)input.LT(1);
-                    match(input,79,FOLLOW_79_in_operator2749); if (failed) return op;
+                    match(input,80,FOLLOW_80_in_simple_operator2703); if (failed) return op;
 
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023:5: t= CONTAINS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:5: t= CONTAINS
                     {
                     t=(Token)input.LT(1);
-                    match(input,CONTAINS,FOLLOW_CONTAINS_in_operator2757); if (failed) return op;
+                    match(input,CONTAINS,FOLLOW_CONTAINS_in_simple_operator2711); if (failed) return op;
 
                     }
                     break;
                 case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1024:5: t= MATCHES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:5: t= MATCHES
                     {
                     t=(Token)input.LT(1);
-                    match(input,MATCHES,FOLLOW_MATCHES_in_operator2765); if (failed) return op;
+                    match(input,MATCHES,FOLLOW_MATCHES_in_simple_operator2719); if (failed) return op;
 
                     }
                     break;
                 case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1025:5: t= EXCLUDES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:5: t= EXCLUDES
                     {
                     t=(Token)input.LT(1);
-                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_operator2773); if (failed) return op;
+                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_simple_operator2727); if (failed) return op;
 
                     }
                     break;
                 case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1026:5: t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1012:5: t= MEMBEROF
                     {
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_operator2781); if (failed) return op;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator2735); if (failed) return op;
 
                     }
                     break;
                 case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:5: n= NOT t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1013:5: n= NOT t= MEMBEROF
                     {
                     n=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_operator2789); if (failed) return op;
+                    match(input,NOT,FOLLOW_NOT_in_simple_operator2743); if (failed) return op;
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_operator2793); if (failed) return op;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_simple_operator2747); if (failed) return op;
 
                     }
                     break;
@@ -4021,11 +3987,326 @@
         }
         return op;
     }
-    // $ANTLR end operator
+    // $ANTLR end simple_operator
 
 
+    // $ANTLR start compound_operator
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1024: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 {
+        RestrictionDescr rd = null;
+
+
+
+        		String op = null;
+        	
+        try {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029: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 ) )
+            int alt44=2;
+            int LA44_0 = input.LA(1);
+
+            if ( (LA44_0==IN) ) {
+                alt44=1;
+            }
+            else if ( (LA44_0==NOT) ) {
+                alt44=2;
+            }
+            else {
+                if (backtracking>0) {failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("1024: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);
+
+                throw nvae;
+            }
+            switch (alt44) {
+                case 1 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029: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:1029: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:1029: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 ;
+                    if ( backtracking==0 ) {
+
+                      		  op = "==";
+                      		
+                    }
+                    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:1039: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:1039: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:1050: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:1050: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:1050: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 ;
+                    if ( backtracking==0 ) {
+
+                      		  op = "!=";
+                      		
+                    }
+                    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:1060:3: ( COMMA rd= expression_value[op] )*
+                    loop43:
+                    do {
+                        int alt43=2;
+                        int LA43_0 = input.LA(1);
+
+                        if ( (LA43_0==COMMA) ) {
+                            alt43=1;
+                        }
+
+
+                        switch (alt43) {
+                    	case 1 :
+                    	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1060: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 ) {
+                    	      			fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.AND));	
+                    	      		        fc.addRestriction( rd );
+                    	      		    }
+                    	      		
+                    	    }
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop43;
+                        }
+                    } while (true);
+
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator2886); if (failed) return ;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end compound_operator
+
+
+    // $ANTLR start expression_value
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072: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;
+
+        Token bvc=null;
+        String lc = null;
+
+        String rvc = null;
+
+
+        try {
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074: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:1074: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:1074:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )
+            int alt45=4;
+            switch ( input.LA(1) ) {
+            case ID:
+                {
+                int LA45_1 = input.LA(2);
+
+                if ( (LA45_1==EOF||LA45_1==RIGHT_PAREN||LA45_1==COMMA||(LA45_1>=72 && LA45_1<=73)) ) {
+                    alt45=1;
+                }
+                else if ( (LA45_1==69) ) {
+                    alt45=2;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return rd;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("1074:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 45, 1, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case STRING:
+            case BOOL:
+            case INT:
+            case FLOAT:
+            case NULL:
+                {
+                alt45=3;
+                }
+                break;
+            case LEFT_PAREN:
+                {
+                alt45=4;
+                }
+                break;
+            default:
+                if (backtracking>0) {failed=true; return rd;}
+                NoViableAltException nvae =
+                    new NoViableAltException("1074:3: (bvc= ID | lc= enum_constraint | lc= literal_constraint | rvc= retval_constraint )", 45, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt45) {
+                case 1 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074:5: bvc= ID
+                    {
+                    bvc=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_expression_value2914); if (failed) return rd;
+                    if ( backtracking==0 ) {
+
+                      				rd = new VariableRestrictionDescr(op, bvc.getText());
+                      			
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1079:4: lc= enum_constraint
+                    {
+                    pushFollow(FOLLOW_enum_constraint_in_expression_value2930);
+                    lc=enum_constraint();
+                    _fsp--;
+                    if (failed) return rd;
+                    if ( backtracking==0 ) {
+                       
+                      				rd  = new LiteralRestrictionDescr(op, lc, true);
+                      			
+                    }
+
+                    }
+                    break;
+                case 3 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:4: lc= literal_constraint
+                    {
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value2953);
+                    lc=literal_constraint();
+                    _fsp--;
+                    if (failed) return rd;
+                    if ( backtracking==0 ) {
+                       
+                      				rd  = new LiteralRestrictionDescr(op, lc);
+                      			
+                    }
+
+                    }
+                    break;
+                case 4 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1088:5: rvc= retval_constraint
+                    {
+                    pushFollow(FOLLOW_retval_constraint_in_expression_value2967);
+                    rvc=retval_constraint();
+                    _fsp--;
+                    if (failed) return rd;
+                    if ( backtracking==0 ) {
+                       
+                      				rd = new ReturnValueRestrictionDescr(op, rvc);							
+                      			
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return rd;
+    }
+    // $ANTLR end expression_value
+
+
     // $ANTLR start literal_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038: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:1095: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;
 
@@ -4035,51 +4316,51 @@
         		text = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1042: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:1042: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:1099: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:1099: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:1042:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
-            int alt42=5;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1099:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )
+            int alt46=5;
             switch ( input.LA(1) ) {
             case STRING:
                 {
-                alt42=1;
+                alt46=1;
                 }
                 break;
             case INT:
                 {
-                alt42=2;
+                alt46=2;
                 }
                 break;
             case FLOAT:
                 {
-                alt42=3;
+                alt46=3;
                 }
                 break;
             case BOOL:
                 {
-                alt42=4;
+                alt46=4;
                 }
                 break;
             case NULL:
                 {
-                alt42=5;
+                alt46=5;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return text;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1042:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )", 42, 0, input);
+                    new NoViableAltException("1099:4: (t= STRING | t= INT | t= FLOAT | t= BOOL | t= NULL )", 46, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt42) {
+            switch (alt46) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1042:6: t= STRING
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1099:6: t= STRING
                     {
                     t=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_literal_constraint2829); if (failed) return text;
+                    match(input,STRING,FOLLOW_STRING_in_literal_constraint3006); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = getString( t ); 
                     }
@@ -4087,10 +4368,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1043:5: t= INT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1100:5: t= INT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_literal_constraint2840); if (failed) return text;
+                    match(input,INT,FOLLOW_INT_in_literal_constraint3017); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -4098,10 +4379,10 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:5: t= FLOAT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:5: t= FLOAT
                     {
                     t=(Token)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint2853); if (failed) return text;
+                    match(input,FLOAT,FOLLOW_FLOAT_in_literal_constraint3030); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -4109,10 +4390,10 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1045:5: t= BOOL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:5: t= BOOL
                     {
                     t=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint2864); if (failed) return text;
+                    match(input,BOOL,FOLLOW_BOOL_in_literal_constraint3041); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = t.getText(); 
                     }
@@ -4120,10 +4401,10 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1046:5: t= NULL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1103:5: t= NULL
                     {
                     t=(Token)input.LT(1);
-                    match(input,NULL,FOLLOW_NULL_in_literal_constraint2876); if (failed) return text;
+                    match(input,NULL,FOLLOW_NULL_in_literal_constraint3053); if (failed) return text;
                     if ( backtracking==0 ) {
                        text = null; 
                     }
@@ -4149,7 +4430,7 @@
 
 
     // $ANTLR start enum_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1050: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:1107:1: enum_constraint returns [String text] : id= ID ( '.' ident= identifier )+ ;
     public final String enum_constraint() throws RecognitionException {
         String text = null;
 
@@ -4161,32 +4442,32 @@
         		text = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:3: (id= ID ( '.' ident= identifier )+ )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:3: id= ID ( '.' ident= identifier )+
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1112:3: (id= ID ( '.' ident= identifier )+ )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1112:3: id= ID ( '.' ident= identifier )+
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enum_constraint2911); if (failed) return text;
+            match(input,ID,FOLLOW_ID_in_enum_constraint3088); 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:1055:32: ( '.' ident= identifier )+
-            int cnt43=0;
-            loop43:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1112:32: ( '.' ident= identifier )+
+            int cnt47=0;
+            loop47:
             do {
-                int alt43=2;
-                int LA43_0 = input.LA(1);
+                int alt47=2;
+                int LA47_0 = input.LA(1);
 
-                if ( (LA43_0==68) ) {
-                    alt43=1;
+                if ( (LA47_0==69) ) {
+                    alt47=1;
                 }
 
 
-                switch (alt43) {
+                switch (alt47) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:34: '.' ident= identifier
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1112:34: '.' ident= identifier
             	    {
-            	    match(input,68,FOLLOW_68_in_enum_constraint2917); if (failed) return text;
-            	    pushFollow(FOLLOW_identifier_in_enum_constraint2921);
+            	    match(input,69,FOLLOW_69_in_enum_constraint3094); if (failed) return text;
+            	    pushFollow(FOLLOW_identifier_in_enum_constraint3098);
             	    ident=identifier();
             	    _fsp--;
             	    if (failed) return text;
@@ -4198,13 +4479,13 @@
             	    break;
 
             	default :
-            	    if ( cnt43 >= 1 ) break loop43;
+            	    if ( cnt47 >= 1 ) break loop47;
             	    if (backtracking>0) {failed=true; return text;}
                         EarlyExitException eee =
-                            new EarlyExitException(43, input);
+                            new EarlyExitException(47, input);
                         throw eee;
                 }
-                cnt43++;
+                cnt47++;
             } while (true);
 
 
@@ -4223,7 +4504,7 @@
 
 
     // $ANTLR start predicate
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:1: predicate[PatternDescr pattern] : text= paren_chunk[d] ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1116:1: predicate[PatternDescr pattern] : text= paren_chunk[d] ;
     public final void predicate(PatternDescr pattern) throws RecognitionException {
         String text = null;
 
@@ -4232,15 +4513,15 @@
         		PredicateDescr d = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1064:3: (text= paren_chunk[d] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1064:3: text= paren_chunk[d]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1121:3: (text= paren_chunk[d] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1121:3: text= paren_chunk[d]
             {
             if ( backtracking==0 ) {
 
               			d = new PredicateDescr( );
               		
             }
-            pushFollow(FOLLOW_paren_chunk_in_predicate2963);
+            pushFollow(FOLLOW_paren_chunk_in_predicate3140);
             text=paren_chunk(d);
             _fsp--;
             if (failed) return ;
@@ -4269,7 +4550,7 @@
 
 
     // $ANTLR start paren_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077: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:1134: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;
 
@@ -4282,8 +4563,8 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083: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:1083: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:1140: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:1140:10: loc= LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )* loc= RIGHT_PAREN
             {
             if ( backtracking==0 ) {
 
@@ -4293,32 +4574,32 @@
               	        
             }
             loc=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk3012); if (failed) return text;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk3189); 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:1093:3: (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )*
-            loop44:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:3: (~ ( LEFT_PAREN | RIGHT_PAREN ) | chunk= paren_chunk[null] )*
+            loop48:
             do {
-                int alt44=3;
-                int LA44_0 = input.LA(1);
+                int alt48=3;
+                int LA48_0 = input.LA(1);
 
-                if ( ((LA44_0>=ATTRIBUTES && LA44_0<=OR)||(LA44_0>=CONTAINS && LA44_0<=80)) ) {
-                    alt44=1;
+                if ( ((LA48_0>=ATTRIBUTES && LA48_0<=OR)||(LA48_0>=CONTAINS && LA48_0<=81)) ) {
+                    alt48=1;
                 }
-                else if ( (LA44_0==LEFT_PAREN) ) {
-                    alt44=2;
+                else if ( (LA48_0==LEFT_PAREN) ) {
+                    alt48=2;
                 }
 
 
-                switch (alt44) {
+                switch (alt48) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1094:4: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1151:4: ~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
-            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=OR)||(input.LA(1)>=CONTAINS && input.LA(1)<=80) ) {
+            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=OR)||(input.LA(1)>=CONTAINS && input.LA(1)<=81) ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -4326,7 +4607,7 @@
             	        if (backtracking>0) {failed=true; return text;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk3028);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk3205);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -4338,9 +4619,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1099:4: chunk= paren_chunk[null]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1156:4: chunk= paren_chunk[null]
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_in_paren_chunk3052);
+            	    pushFollow(FOLLOW_paren_chunk_in_paren_chunk3229);
             	    chunk=paren_chunk(null);
             	    _fsp--;
             	    if (failed) return text;
@@ -4354,7 +4635,7 @@
             	    break;
 
             	default :
-            	    break loop44;
+            	    break loop48;
                 }
             } while (true);
 
@@ -4368,7 +4649,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk3089); if (failed) return text;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk3266); if (failed) return text;
             if ( backtracking==0 ) {
 
                                   buf.append( loc.getText() );
@@ -4394,7 +4675,7 @@
 
 
     // $ANTLR start curly_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1121: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:1178: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;
 
@@ -4407,11 +4688,11 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1127: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:1127: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:1184: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:1184: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_chunk3140); if (failed) return text;
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk3317); if (failed) return text;
             if ( backtracking==0 ) {
 
               	            channel = ((SwitchingCommonTokenStream)input).getTokenTypeChannel( WS ); 
@@ -4421,25 +4702,25 @@
               		    buf.append( loc.getText() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:3: (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )*
-            loop45:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1192:3: (~ ( LEFT_CURLY | RIGHT_CURLY ) | chunk= curly_chunk[descr] )*
+            loop49:
             do {
-                int alt45=3;
-                int LA45_0 = input.LA(1);
+                int alt49=3;
+                int LA49_0 = input.LA(1);
 
-                if ( ((LA45_0>=ATTRIBUTES && LA45_0<=NULL)||(LA45_0>=LEFT_SQUARE && LA45_0<=80)) ) {
-                    alt45=1;
+                if ( ((LA49_0>=ATTRIBUTES && LA49_0<=NULL)||(LA49_0>=LEFT_SQUARE && LA49_0<=81)) ) {
+                    alt49=1;
                 }
-                else if ( (LA45_0==LEFT_CURLY) ) {
-                    alt45=2;
+                else if ( (LA49_0==LEFT_CURLY) ) {
+                    alt49=2;
                 }
 
 
-                switch (alt45) {
+                switch (alt49) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:4: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1193:4: ~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
-            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=NULL)||(input.LA(1)>=LEFT_SQUARE && input.LA(1)<=80) ) {
+            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=NULL)||(input.LA(1)>=LEFT_SQUARE && input.LA(1)<=81) ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -4447,7 +4728,7 @@
             	        if (backtracking>0) {failed=true; return text;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk3156);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk3333);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -4459,9 +4740,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:4: chunk= curly_chunk[descr]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1198:4: chunk= curly_chunk[descr]
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_in_curly_chunk3180);
+            	    pushFollow(FOLLOW_curly_chunk_in_curly_chunk3357);
             	    chunk=curly_chunk(descr);
             	    _fsp--;
             	    if (failed) return text;
@@ -4475,7 +4756,7 @@
             	    break;
 
             	default :
-            	    break loop45;
+            	    break loop49;
                 }
             } while (true);
 
@@ -4489,7 +4770,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk3217); if (failed) return text;
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk3394); if (failed) return text;
             if ( backtracking==0 ) {
 
                                   buf.append( loc.getText() );
@@ -4515,7 +4796,7 @@
 
 
     // $ANTLR start square_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163: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:1220: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;
 
@@ -4528,8 +4809,8 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1169: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:1169: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:1226: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:1226:10: loc= LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )* loc= RIGHT_SQUARE
             {
             if ( backtracking==0 ) {
 
@@ -4539,32 +4820,32 @@
               	        
             }
             loc=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk3280); if (failed) return text;
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk3457); 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:1179:3: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )*
-            loop46:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1236:3: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | chunk= square_chunk[null] )*
+            loop50:
             do {
-                int alt46=3;
-                int LA46_0 = input.LA(1);
+                int alt50=3;
+                int LA50_0 = input.LA(1);
 
-                if ( ((LA46_0>=ATTRIBUTES && LA46_0<=RIGHT_CURLY)||(LA46_0>=AND && LA46_0<=80)) ) {
-                    alt46=1;
+                if ( ((LA50_0>=ATTRIBUTES && LA50_0<=RIGHT_CURLY)||(LA50_0>=AND && LA50_0<=81)) ) {
+                    alt50=1;
                 }
-                else if ( (LA46_0==LEFT_SQUARE) ) {
-                    alt46=2;
+                else if ( (LA50_0==LEFT_SQUARE) ) {
+                    alt50=2;
                 }
 
 
-                switch (alt46) {
+                switch (alt50) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1180:4: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1237:4: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
-            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=RIGHT_CURLY)||(input.LA(1)>=AND && input.LA(1)<=80) ) {
+            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=RIGHT_CURLY)||(input.LA(1)>=AND && input.LA(1)<=81) ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -4572,7 +4853,7 @@
             	        if (backtracking>0) {failed=true; return text;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk3296);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk3473);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -4584,9 +4865,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1185:4: chunk= square_chunk[null]
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1242:4: chunk= square_chunk[null]
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_square_chunk3320);
+            	    pushFollow(FOLLOW_square_chunk_in_square_chunk3497);
             	    chunk=square_chunk(null);
             	    _fsp--;
             	    if (failed) return text;
@@ -4600,7 +4881,7 @@
             	    break;
 
             	default :
-            	    break loop46;
+            	    break loop50;
                 }
             } while (true);
 
@@ -4614,7 +4895,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk3357); if (failed) return text;
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk3534); if (failed) return text;
             if ( backtracking==0 ) {
 
                                   buf.append( loc.getText() );
@@ -4640,7 +4921,7 @@
 
 
     // $ANTLR start retval_constraint
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1207: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:1264:1: retval_constraint returns [String text] : c= paren_chunk[null] ;
     public final String retval_constraint() throws RecognitionException {
         String text = null;
 
@@ -4651,10 +4932,10 @@
         		text = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1212:3: (c= paren_chunk[null] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1212:3: c= paren_chunk[null]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1269:3: (c= paren_chunk[null] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1269:3: c= paren_chunk[null]
             {
-            pushFollow(FOLLOW_paren_chunk_in_retval_constraint3402);
+            pushFollow(FOLLOW_paren_chunk_in_retval_constraint3579);
             c=paren_chunk(null);
             _fsp--;
             if (failed) return text;
@@ -4677,7 +4958,7 @@
 
 
     // $ANTLR start lhs_or
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1215: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:1272:1: lhs_or returns [BaseDescr d] : left= lhs_and ( ( OR | '||' ) right= lhs_and )* ;
     public final BaseDescr lhs_or() throws RecognitionException {
         BaseDescr d = null;
 
@@ -4691,32 +4972,32 @@
         		OrDescr or = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1221:3: (left= lhs_and ( ( OR | '||' ) right= lhs_and )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1221:3: left= lhs_and ( ( OR | '||' ) right= lhs_and )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1278:3: (left= lhs_and ( ( OR | '||' ) right= lhs_and )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1278:3: left= lhs_and ( ( OR | '||' ) right= lhs_and )*
             {
-            pushFollow(FOLLOW_lhs_and_in_lhs_or3430);
+            pushFollow(FOLLOW_lhs_and_in_lhs_or3607);
             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:1222:3: ( ( OR | '||' ) right= lhs_and )*
-            loop47:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1279:3: ( ( OR | '||' ) right= lhs_and )*
+            loop51:
             do {
-                int alt47=2;
-                int LA47_0 = input.LA(1);
+                int alt51=2;
+                int LA51_0 = input.LA(1);
 
-                if ( (LA47_0==OR||LA47_0==70) ) {
-                    alt47=1;
+                if ( (LA51_0==OR||LA51_0==71) ) {
+                    alt51=1;
                 }
 
 
-                switch (alt47) {
+                switch (alt51) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1222:5: ( OR | '||' ) right= lhs_and
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1279:5: ( OR | '||' ) right= lhs_and
             	    {
-            	    if ( input.LA(1)==OR||input.LA(1)==70 ) {
+            	    if ( input.LA(1)==OR||input.LA(1)==71 ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -4724,10 +5005,10 @@
             	        if (backtracking>0) {failed=true; return d;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or3438);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_or3615);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_lhs_and_in_lhs_or3449);
+            	    pushFollow(FOLLOW_lhs_and_in_lhs_or3626);
             	    right=lhs_and();
             	    _fsp--;
             	    if (failed) return d;
@@ -4747,7 +5028,7 @@
             	    break;
 
             	default :
-            	    break loop47;
+            	    break loop51;
                 }
             } while (true);
 
@@ -4767,7 +5048,7 @@
 
 
     // $ANTLR start lhs_and
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1236: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:1293:1: lhs_and returns [BaseDescr d] : left= lhs_unary ( ( AND | '&&' ) right= lhs_unary )* ;
     public final BaseDescr lhs_and() throws RecognitionException {
         BaseDescr d = null;
 
@@ -4781,32 +5062,32 @@
         		AndDescr and = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1242:3: (left= lhs_unary ( ( AND | '&&' ) right= lhs_unary )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1242:3: left= lhs_unary ( ( AND | '&&' ) right= lhs_unary )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1299:3: (left= lhs_unary ( ( AND | '&&' ) right= lhs_unary )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1299:3: left= lhs_unary ( ( AND | '&&' ) right= lhs_unary )*
             {
-            pushFollow(FOLLOW_lhs_unary_in_lhs_and3485);
+            pushFollow(FOLLOW_lhs_unary_in_lhs_and3662);
             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:1243:3: ( ( AND | '&&' ) right= lhs_unary )*
-            loop48:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1300:3: ( ( AND | '&&' ) right= lhs_unary )*
+            loop52:
             do {
-                int alt48=2;
-                int LA48_0 = input.LA(1);
+                int alt52=2;
+                int LA52_0 = input.LA(1);
 
-                if ( (LA48_0==AND||LA48_0==80) ) {
-                    alt48=1;
+                if ( (LA52_0==AND||LA52_0==81) ) {
+                    alt52=1;
                 }
 
 
-                switch (alt48) {
+                switch (alt52) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1243:5: ( AND | '&&' ) right= lhs_unary
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1300:5: ( AND | '&&' ) right= lhs_unary
             	    {
-            	    if ( input.LA(1)==AND||input.LA(1)==80 ) {
+            	    if ( input.LA(1)==AND||input.LA(1)==81 ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -4814,10 +5095,10 @@
             	        if (backtracking>0) {failed=true; return d;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and3493);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_lhs_and3670);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_lhs_unary_in_lhs_and3504);
+            	    pushFollow(FOLLOW_lhs_unary_in_lhs_and3681);
             	    right=lhs_unary();
             	    _fsp--;
             	    if (failed) return d;
@@ -4837,7 +5118,7 @@
             	    break;
 
             	default :
-            	    break loop48;
+            	    break loop52;
                 }
             } while (true);
 
@@ -4857,7 +5138,7 @@
 
 
     // $ANTLR start lhs_unary
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1257: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:1314: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;
 
@@ -4874,55 +5155,55 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1261: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:1261: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:1318: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:1318: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:1261: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 alt51=6;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1318: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;
             switch ( input.LA(1) ) {
             case EXISTS:
                 {
-                alt51=1;
+                alt55=1;
                 }
                 break;
             case NOT:
                 {
-                alt51=2;
+                alt55=2;
                 }
                 break;
             case EVAL:
                 {
-                alt51=3;
+                alt55=3;
                 }
                 break;
             case ID:
                 {
-                alt51=4;
+                alt55=4;
                 }
                 break;
             case FORALL:
                 {
-                alt51=5;
+                alt55=5;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt51=6;
+                alt55=6;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1261: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 ')' )", 51, 0, input);
+                    new NoViableAltException("1318: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);
 
                 throw nvae;
             }
 
-            switch (alt51) {
+            switch (alt55) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1261:6: u= lhs_exist
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1318:6: u= lhs_exist
                     {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary3541);
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary3718);
                     u=lhs_exist();
                     _fsp--;
                     if (failed) return d;
@@ -4930,9 +5211,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1262:5: u= lhs_not
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1319:5: u= lhs_not
                     {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary3549);
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary3726);
                     u=lhs_not();
                     _fsp--;
                     if (failed) return d;
@@ -4940,9 +5221,9 @@
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1263:5: u= lhs_eval
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1320:5: u= lhs_eval
                     {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary3557);
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary3734);
                     u=lhs_eval();
                     _fsp--;
                     if (failed) return d;
@@ -4950,80 +5231,80 @@
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1264: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:1321:5: u= lhs_pattern ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_unary3565);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_unary3742);
                     u=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1264:19: ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
-                    int alt50=2;
-                    int LA50_0 = input.LA(1);
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1321:19: ( FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) ) )?
+                    int alt54=2;
+                    int LA54_0 = input.LA(1);
 
-                    if ( (LA50_0==FROM) ) {
-                        alt50=1;
+                    if ( (LA54_0==FROM) ) {
+                        alt54=1;
                     }
-                    switch (alt50) {
+                    switch (alt54) {
                         case 1 :
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1265: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:1322:13: FROM ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
                             {
-                            match(input,FROM,FOLLOW_FROM_in_lhs_unary3581); if (failed) return d;
-                            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1265:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
-                            int alt49=3;
-                            int LA49_0 = input.LA(1);
+                            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:1322:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )
+                            int alt53=3;
+                            int LA53_0 = input.LA(1);
 
-                            if ( (LA49_0==ACCUMULATE) && ((synpred96()||synpred93()))) {
-                                int LA49_1 = input.LA(2);
+                            if ( (LA53_0==ACCUMULATE) && ((synpred100()||synpred97()))) {
+                                int LA53_1 = input.LA(2);
 
-                                if ( (synpred93()) ) {
-                                    alt49=1;
+                                if ( (synpred97()) ) {
+                                    alt53=1;
                                 }
-                                else if ( (synpred96()) ) {
-                                    alt49=3;
+                                else if ( (synpred100()) ) {
+                                    alt53=3;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return d;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("1265:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 49, 1, input);
+                                        new NoViableAltException("1322:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 53, 1, input);
 
                                     throw nvae;
                                 }
                             }
-                            else if ( (LA49_0==COLLECT) && ((synpred96()||synpred94()))) {
-                                int LA49_2 = input.LA(2);
+                            else if ( (LA53_0==COLLECT) && ((synpred98()||synpred100()))) {
+                                int LA53_2 = input.LA(2);
 
-                                if ( (synpred94()) ) {
-                                    alt49=2;
+                                if ( (synpred98()) ) {
+                                    alt53=2;
                                 }
-                                else if ( (synpred96()) ) {
-                                    alt49=3;
+                                else if ( (synpred100()) ) {
+                                    alt53=3;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return d;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("1265:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 49, 2, input);
+                                        new NoViableAltException("1322:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 53, 2, input);
 
                                     throw nvae;
                                 }
                             }
-                            else if ( ((LA49_0>=ATTRIBUTES && LA49_0<=WHEN)||LA49_0==ENABLED||LA49_0==SALIENCE||LA49_0==DURATION||(LA49_0>=INIT && LA49_0<=RESULT)||(LA49_0>=ID && LA49_0<=OR)||(LA49_0>=CONTAINS && LA49_0<=NOT)||LA49_0==NULL||(LA49_0>=AND && LA49_0<=THEN)) && (synpred96())) {
-                                alt49=3;
+                            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 (backtracking>0) {failed=true; return d;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("1265:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 49, 0, input);
+                                    new NoViableAltException("1322:18: ( ( ACCUMULATE )=> (ac= accumulate_statement ) | ( COLLECT )=> (cs= collect_statement ) | (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement ) )", 53, 0, input);
 
                                 throw nvae;
                             }
-                            switch (alt49) {
+                            switch (alt53) {
                                 case 1 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1266:14: ( ACCUMULATE )=> (ac= accumulate_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1323:14: ( ACCUMULATE )=> (ac= accumulate_statement )
                                     {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1266:32: (ac= accumulate_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1266:33: ac= accumulate_statement
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1323:32: (ac= accumulate_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1323:33: ac= accumulate_statement
                                     {
-                                    pushFollow(FOLLOW_accumulate_statement_in_lhs_unary3609);
+                                    pushFollow(FOLLOW_accumulate_statement_in_lhs_unary3786);
                                     ac=accumulate_statement();
                                     _fsp--;
                                     if (failed) return d;
@@ -5037,12 +5318,12 @@
                                     }
                                     break;
                                 case 2 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1267:14: ( COLLECT )=> (cs= collect_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1324:14: ( COLLECT )=> (cs= collect_statement )
                                     {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1267:29: (cs= collect_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1267:30: cs= collect_statement
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1324:29: (cs= collect_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1324:30: cs= collect_statement
                                     {
-                                    pushFollow(FOLLOW_collect_statement_in_lhs_unary3638);
+                                    pushFollow(FOLLOW_collect_statement_in_lhs_unary3815);
                                     cs=collect_statement();
                                     _fsp--;
                                     if (failed) return d;
@@ -5056,12 +5337,12 @@
                                     }
                                     break;
                                 case 3 :
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1268:14: (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1325:14: (~ ( ACCUMULATE | COLLECT ) )=> (fm= from_statement )
                                     {
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1268:43: (fm= from_statement )
-                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1268:44: fm= from_statement
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1325:43: (fm= from_statement )
+                                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1325:44: fm= from_statement
                                     {
-                                    pushFollow(FOLLOW_from_statement_in_lhs_unary3673);
+                                    pushFollow(FOLLOW_from_statement_in_lhs_unary3850);
                                     fm=from_statement();
                                     _fsp--;
                                     if (failed) return d;
@@ -5087,9 +5368,9 @@
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1271:5: u= lhs_forall
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1328:5: u= lhs_forall
                     {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary3712);
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary3889);
                     u=lhs_forall();
                     _fsp--;
                     if (failed) return d;
@@ -5097,14 +5378,14 @@
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1272:5: '(' u= lhs_or ')'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1329:5: '(' u= lhs_or ')'
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary3720); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary3724);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary3897); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary3901);
                     u=lhs_or();
                     _fsp--;
                     if (failed) return d;
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary3726); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary3903); if (failed) return d;
 
                     }
                     break;
@@ -5114,7 +5395,7 @@
             if ( backtracking==0 ) {
                d = u; 
             }
-            pushFollow(FOLLOW_opt_semicolon_in_lhs_unary3736);
+            pushFollow(FOLLOW_opt_semicolon_in_lhs_unary3913);
             opt_semicolon();
             _fsp--;
             if (failed) return d;
@@ -5134,7 +5415,7 @@
 
 
     // $ANTLR start lhs_exist
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1277: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:1334: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;
 
@@ -5147,11 +5428,11 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1281: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:1281: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:1338: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:1338:4: loc= EXISTS ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
             {
             loc=(Token)input.LT(1);
-            match(input,EXISTS,FOLLOW_EXISTS_in_lhs_exist3760); if (failed) return d;
+            match(input,EXISTS,FOLLOW_EXISTS_in_lhs_exist3937); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new ExistsDescr( ); 
@@ -5159,32 +5440,32 @@
               			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1287:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
-            int alt52=2;
-            int LA52_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1344:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
+            int alt56=2;
+            int LA56_0 = input.LA(1);
 
-            if ( (LA52_0==LEFT_PAREN) ) {
-                alt52=1;
+            if ( (LA56_0==LEFT_PAREN) ) {
+                alt56=1;
             }
-            else if ( (LA52_0==ID) ) {
-                alt52=2;
+            else if ( (LA56_0==ID) ) {
+                alt56=2;
             }
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1287:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 52, 0, input);
+                    new NoViableAltException("1344:10: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 56, 0, input);
 
                 throw nvae;
             }
-            switch (alt52) {
+            switch (alt56) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1287:12: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1344:12: ( '(' pattern= lhs_or end= ')' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1287:12: ( '(' pattern= lhs_or end= ')' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1287:14: '(' pattern= lhs_or end= ')'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1344:12: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1344:14: '(' pattern= lhs_or end= ')'
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist3780); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist3784);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist3957); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist3961);
                     pattern=lhs_or();
                     _fsp--;
                     if (failed) return d;
@@ -5192,7 +5473,7 @@
                        if ( pattern != null ) ((ExistsDescr)d).addDescr( pattern ); 
                     }
                     end=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist3816); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist3993); if (failed) return d;
                     if ( backtracking==0 ) {
                        if ( end != null ) d.setEndCharacter( ((CommonToken)end).getStopIndex() ); 
                     }
@@ -5203,9 +5484,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1292:12: pattern= lhs_pattern
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1349:12: pattern= lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist3866);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist4043);
                     pattern=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
@@ -5239,7 +5520,7 @@
 
 
     // $ANTLR start lhs_not
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1302: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:1359: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;
 
@@ -5252,11 +5533,11 @@
         		d = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1306: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:1306: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:1363: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:1363:4: loc= NOT ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
             {
             loc=(Token)input.LT(1);
-            match(input,NOT,FOLLOW_NOT_in_lhs_not3920); if (failed) return d;
+            match(input,NOT,FOLLOW_NOT_in_lhs_not4097); if (failed) return d;
             if ( backtracking==0 ) {
 
               			d = new NotDescr( ); 
@@ -5264,32 +5545,32 @@
               			d.setStartCharacter( ((CommonToken)loc).getStartIndex() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1312:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
-            int alt53=2;
-            int LA53_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1369:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )
+            int alt57=2;
+            int LA57_0 = input.LA(1);
 
-            if ( (LA53_0==LEFT_PAREN) ) {
-                alt53=1;
+            if ( (LA57_0==LEFT_PAREN) ) {
+                alt57=1;
             }
-            else if ( (LA53_0==ID) ) {
-                alt53=2;
+            else if ( (LA57_0==ID) ) {
+                alt57=2;
             }
             else {
                 if (backtracking>0) {failed=true; return d;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1312:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 53, 0, input);
+                    new NoViableAltException("1369:3: ( ( '(' pattern= lhs_or end= ')' ) | pattern= lhs_pattern )", 57, 0, input);
 
                 throw nvae;
             }
-            switch (alt53) {
+            switch (alt57) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1312:5: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1369:5: ( '(' pattern= lhs_or end= ')' )
                     {
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1312:5: ( '(' pattern= lhs_or end= ')' )
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1312:7: '(' pattern= lhs_or end= ')'
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1369:5: ( '(' pattern= lhs_or end= ')' )
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1369:7: '(' pattern= lhs_or end= ')'
                     {
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not3933); if (failed) return d;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not3937);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not4110); if (failed) return d;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not4114);
                     pattern=lhs_or();
                     _fsp--;
                     if (failed) return d;
@@ -5297,7 +5578,7 @@
                        if ( pattern != null ) d.addDescr( pattern ); 
                     }
                     end=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not3970); if (failed) return d;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not4147); if (failed) return d;
                     if ( backtracking==0 ) {
                        if ( end != null ) d.setEndCharacter( ((CommonToken)end).getStopIndex() ); 
                     }
@@ -5308,9 +5589,9 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1318:3: pattern= lhs_pattern
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1375:3: pattern= lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not4007);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not4184);
                     pattern=lhs_pattern();
                     _fsp--;
                     if (failed) return d;
@@ -5344,7 +5625,7 @@
 
 
     // $ANTLR start lhs_eval
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1328: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:1385:1: lhs_eval returns [BaseDescr d] : loc= EVAL c= paren_chunk[d] ;
     public final BaseDescr lhs_eval() throws RecognitionException {
         BaseDescr d = null;
 
@@ -5356,12 +5637,12 @@
         		d = new EvalDescr( );
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1333:3: (loc= EVAL c= paren_chunk[d] )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1333:3: loc= EVAL c= paren_chunk[d]
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1390:3: (loc= EVAL c= paren_chunk[d] )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1390:3: loc= EVAL c= paren_chunk[d]
             {
             loc=(Token)input.LT(1);
-            match(input,EVAL,FOLLOW_EVAL_in_lhs_eval4055); if (failed) return d;
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval4059);
+            match(input,EVAL,FOLLOW_EVAL_in_lhs_eval4232); if (failed) return d;
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval4236);
             c=paren_chunk(d);
             _fsp--;
             if (failed) return d;
@@ -5391,7 +5672,7 @@
 
 
     // $ANTLR start lhs_forall
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1344: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:1401: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;
 
@@ -5406,13 +5687,13 @@
         		d = factory.createForall();
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1348: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:1348: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:1405: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:1405:4: loc= FORALL '(' base= lhs_pattern ( ( ',' )? pattern= lhs_pattern )+ end= ')'
             {
             loc=(Token)input.LT(1);
-            match(input,FORALL,FOLLOW_FORALL_in_lhs_forall4088); if (failed) return d;
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall4090); if (failed) return d;
-            pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4094);
+            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);
             base=lhs_pattern();
             _fsp--;
             if (failed) return d;
@@ -5424,41 +5705,41 @@
               			d.setLocation( offset(loc.getLine()), loc.getCharPositionInLine() );
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1355:3: ( ( ',' )? pattern= lhs_pattern )+
-            int cnt55=0;
-            loop55:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1412:3: ( ( ',' )? pattern= lhs_pattern )+
+            int cnt59=0;
+            loop59:
             do {
-                int alt55=2;
-                int LA55_0 = input.LA(1);
+                int alt59=2;
+                int LA59_0 = input.LA(1);
 
-                if ( (LA55_0==ID||LA55_0==67) ) {
-                    alt55=1;
+                if ( (LA59_0==ID||LA59_0==COMMA) ) {
+                    alt59=1;
                 }
 
 
-                switch (alt55) {
+                switch (alt59) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1355:5: ( ',' )? pattern= lhs_pattern
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1412:5: ( ',' )? pattern= lhs_pattern
             	    {
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1355:5: ( ',' )?
-            	    int alt54=2;
-            	    int LA54_0 = input.LA(1);
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1412:5: ( ',' )?
+            	    int alt58=2;
+            	    int LA58_0 = input.LA(1);
 
-            	    if ( (LA54_0==67) ) {
-            	        alt54=1;
+            	    if ( (LA58_0==COMMA) ) {
+            	        alt58=1;
             	    }
-            	    switch (alt54) {
+            	    switch (alt58) {
             	        case 1 :
-            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1355:6: ','
+            	            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1412:6: ','
             	            {
-            	            match(input,67,FOLLOW_67_in_lhs_forall4108); if (failed) return d;
+            	            match(input,COMMA,FOLLOW_COMMA_in_lhs_forall4285); if (failed) return d;
 
             	            }
             	            break;
 
             	    }
 
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4114);
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall4291);
             	    pattern=lhs_pattern();
             	    _fsp--;
             	    if (failed) return d;
@@ -5473,17 +5754,17 @@
             	    break;
 
             	default :
-            	    if ( cnt55 >= 1 ) break loop55;
+            	    if ( cnt59 >= 1 ) break loop59;
             	    if (backtracking>0) {failed=true; return d;}
                         EarlyExitException eee =
-                            new EarlyExitException(55, input);
+                            new EarlyExitException(59, input);
                         throw eee;
                 }
-                cnt55++;
+                cnt59++;
             } while (true);
 
             end=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall4129); if (failed) return d;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall4306); if (failed) return d;
             if ( backtracking==0 ) {
 
               		        if ( end != null ) d.setEndCharacter( ((CommonToken)end).getStopIndex() );
@@ -5505,7 +5786,7 @@
 
 
     // $ANTLR start dotted_name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1367: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:1424: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;
 
@@ -5518,11 +5799,11 @@
         		name = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1372:3: (id= ID ( '.' ident= identifier )* ( '[' loc= ']' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1372:3: id= ID ( '.' ident= identifier )* ( '[' loc= ']' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1429:3: (id= ID ( '.' ident= identifier )* ( '[' loc= ']' )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1429:3: id= ID ( '.' ident= identifier )* ( '[' loc= ']' )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dotted_name4160); if (failed) return name;
+            match(input,ID,FOLLOW_ID_in_dotted_name4337); if (failed) return name;
             if ( backtracking==0 ) {
                
               		    name=id.getText(); 
@@ -5532,23 +5813,23 @@
               		    }
               		
             }
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1380:3: ( '.' ident= identifier )*
-            loop56:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1437:3: ( '.' ident= identifier )*
+            loop60:
             do {
-                int alt56=2;
-                int LA56_0 = input.LA(1);
+                int alt60=2;
+                int LA60_0 = input.LA(1);
 
-                if ( (LA56_0==68) ) {
-                    alt56=1;
+                if ( (LA60_0==69) ) {
+                    alt60=1;
                 }
 
 
-                switch (alt56) {
+                switch (alt60) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1380:5: '.' ident= identifier
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1437:5: '.' ident= identifier
             	    {
-            	    match(input,68,FOLLOW_68_in_dotted_name4172); if (failed) return name;
-            	    pushFollow(FOLLOW_identifier_in_dotted_name4176);
+            	    match(input,69,FOLLOW_69_in_dotted_name4349); if (failed) return name;
+            	    pushFollow(FOLLOW_identifier_in_dotted_name4353);
             	    ident=identifier();
             	    _fsp--;
             	    if (failed) return name;
@@ -5565,28 +5846,28 @@
             	    break;
 
             	default :
-            	    break loop56;
+            	    break loop60;
                 }
             } while (true);
 
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:3: ( '[' loc= ']' )*
-            loop57:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1445:3: ( '[' loc= ']' )*
+            loop61:
             do {
-                int alt57=2;
-                int LA57_0 = input.LA(1);
+                int alt61=2;
+                int LA61_0 = input.LA(1);
 
-                if ( (LA57_0==LEFT_SQUARE) ) {
-                    alt57=1;
+                if ( (LA61_0==LEFT_SQUARE) ) {
+                    alt61=1;
                 }
 
 
-                switch (alt57) {
+                switch (alt61) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1388:5: '[' loc= ']'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1445:5: '[' loc= ']'
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dotted_name4198); if (failed) return name;
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dotted_name4375); if (failed) return name;
             	    loc=(Token)input.LT(1);
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dotted_name4202); if (failed) return name;
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dotted_name4379); if (failed) return name;
             	    if ( backtracking==0 ) {
             	       
             	      		        name = name + "[]";
@@ -5600,7 +5881,7 @@
             	    break;
 
             	default :
-            	    break loop57;
+            	    break loop61;
                 }
             } while (true);
 
@@ -5620,7 +5901,7 @@
 
 
     // $ANTLR start argument
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1398:1: argument returns [String name] : id= identifier ( '[' ']' )* ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1455:1: argument returns [String name] : id= identifier ( '[' ']' )* ;
     public final String argument() throws RecognitionException {
         String name = null;
 
@@ -5631,33 +5912,33 @@
         		name = null;
         	
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1403:3: (id= identifier ( '[' ']' )* )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1403:3: id= identifier ( '[' ']' )*
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1460:3: (id= identifier ( '[' ']' )* )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1460:3: id= identifier ( '[' ']' )*
             {
-            pushFollow(FOLLOW_identifier_in_argument4241);
+            pushFollow(FOLLOW_identifier_in_argument4418);
             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:1403:40: ( '[' ']' )*
-            loop58:
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1460:40: ( '[' ']' )*
+            loop62:
             do {
-                int alt58=2;
-                int LA58_0 = input.LA(1);
+                int alt62=2;
+                int LA62_0 = input.LA(1);
 
-                if ( (LA58_0==LEFT_SQUARE) ) {
-                    alt58=1;
+                if ( (LA62_0==LEFT_SQUARE) ) {
+                    alt62=1;
                 }
 
 
-                switch (alt58) {
+                switch (alt62) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1403:42: '[' ']'
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1460:42: '[' ']'
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_argument4247); if (failed) return name;
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_argument4249); if (failed) return name;
+            	    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;
             	    if ( backtracking==0 ) {
             	       name = name + "[]";
             	    }
@@ -5666,7 +5947,7 @@
             	    break;
 
             	default :
-            	    break loop58;
+            	    break loop62;
                 }
             } while (true);
 
@@ -5686,7 +5967,7 @@
 
 
     // $ANTLR start rhs_chunk
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1406: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:1463: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;
@@ -5696,8 +5977,8 @@
                    Integer channel = null;
                 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1412:10: (start= THEN (~ END )* loc= END )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1412:10: start= THEN (~ END )* loc= END
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1469:10: (start= THEN (~ END )* loc= END )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1469:10: start= THEN (~ END )* loc= END
             {
             if ( backtracking==0 ) {
 
@@ -5707,23 +5988,23 @@
               	        
             }
             start=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk4293); if (failed) return ;
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1418:3: (~ END )*
-            loop59:
+            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:1475:3: (~ END )*
+            loop63:
             do {
-                int alt59=2;
-                int LA59_0 = input.LA(1);
+                int alt63=2;
+                int LA63_0 = input.LA(1);
 
-                if ( ((LA59_0>=ATTRIBUTES && LA59_0<=QUERY)||(LA59_0>=TEMPLATE && LA59_0<=80)) ) {
-                    alt59=1;
+                if ( ((LA63_0>=ATTRIBUTES && LA63_0<=QUERY)||(LA63_0>=TEMPLATE && LA63_0<=81)) ) {
+                    alt63=1;
                 }
 
 
-                switch (alt59) {
+                switch (alt63) {
             	case 1 :
-            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1419:6: ~ END
+            	    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:6: ~ END
             	    {
-            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=QUERY)||(input.LA(1)>=TEMPLATE && input.LA(1)<=80) ) {
+            	    if ( (input.LA(1)>=ATTRIBUTES && input.LA(1)<=QUERY)||(input.LA(1)>=TEMPLATE && input.LA(1)<=81) ) {
             	        input.consume();
             	        errorRecovery=false;failed=false;
             	    }
@@ -5731,7 +6012,7 @@
             	        if (backtracking>0) {failed=true; return ;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk4305);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk4482);    throw mse;
             	    }
 
             	    if ( backtracking==0 ) {
@@ -5744,7 +6025,7 @@
             	    break;
 
             	default :
-            	    break loop59;
+            	    break loop63;
                 }
             } while (true);
 
@@ -5758,7 +6039,7 @@
               		
             }
             loc=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk4342); if (failed) return ;
+            match(input,END,FOLLOW_END_in_rhs_chunk4519); if (failed) return ;
             if ( backtracking==0 ) {
 
                                   // ignoring first line in the consequence
@@ -5792,7 +6073,7 @@
 
 
     // $ANTLR start name
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1449:1: name returns [String s] : (tok= ID | str= STRING ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1506:1: name returns [String s] : (tok= ID | str= STRING ) ;
     public final String name() throws RecognitionException {
         String s = null;
 
@@ -5800,32 +6081,32 @@
         Token str=null;
 
         try {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1451:2: ( (tok= ID | str= STRING ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1451:2: (tok= ID | str= STRING )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1508:2: ( (tok= ID | str= STRING ) )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1508:2: (tok= ID | str= STRING )
             {
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1451:2: (tok= ID | str= STRING )
-            int alt60=2;
-            int LA60_0 = input.LA(1);
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1508:2: (tok= ID | str= STRING )
+            int alt64=2;
+            int LA64_0 = input.LA(1);
 
-            if ( (LA60_0==ID) ) {
-                alt60=1;
+            if ( (LA64_0==ID) ) {
+                alt64=1;
             }
-            else if ( (LA60_0==STRING) ) {
-                alt60=2;
+            else if ( (LA64_0==STRING) ) {
+                alt64=2;
             }
             else {
                 if (backtracking>0) {failed=true; return s;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1451:2: (tok= ID | str= STRING )", 60, 0, input);
+                    new NoViableAltException("1508:2: (tok= ID | str= STRING )", 64, 0, input);
 
                 throw nvae;
             }
-            switch (alt60) {
+            switch (alt64) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1452:6: tok= ID
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1509:6: tok= ID
                     {
                     tok=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_name4386); if (failed) return s;
+                    match(input,ID,FOLLOW_ID_in_name4563); if (failed) return s;
                     if ( backtracking==0 ) {
 
                       	        s = tok.getText();
@@ -5835,10 +6116,10 @@
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1457:6: str= STRING
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1514:6: str= STRING
                     {
                     str=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_name4405); if (failed) return s;
+                    match(input,STRING,FOLLOW_STRING_in_name4582); if (failed) return s;
                     if ( backtracking==0 ) {
 
                       	       s = getString( str );
@@ -5866,445 +6147,458 @@
 
 
     // $ANTLR start identifier
-    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1464: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 ) ;
+    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1521: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:1466: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 ) )
-            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1466: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 )
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1523: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:1523: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:1466: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 )
-            int alt61=32;
+            // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1523: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;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                alt61=1;
+                alt65=1;
                 }
                 break;
             case PACKAGE:
                 {
-                alt61=2;
+                alt65=2;
                 }
                 break;
             case FUNCTION:
                 {
-                alt61=3;
+                alt65=3;
                 }
                 break;
             case GLOBAL:
                 {
-                alt61=4;
+                alt65=4;
                 }
                 break;
             case IMPORT:
                 {
-                alt61=5;
+                alt65=5;
                 }
                 break;
             case RULE:
                 {
-                alt61=6;
+                alt65=6;
                 }
                 break;
             case QUERY:
                 {
-                alt61=7;
+                alt65=7;
                 }
                 break;
             case TEMPLATE:
                 {
-                alt61=8;
+                alt65=8;
                 }
                 break;
             case ATTRIBUTES:
                 {
-                alt61=9;
+                alt65=9;
                 }
                 break;
             case ENABLED:
                 {
-                alt61=10;
+                alt65=10;
                 }
                 break;
             case SALIENCE:
                 {
-                alt61=11;
+                alt65=11;
                 }
                 break;
             case DURATION:
                 {
-                alt61=12;
+                alt65=12;
                 }
                 break;
             case FROM:
                 {
-                alt61=13;
+                alt65=13;
                 }
                 break;
             case ACCUMULATE:
                 {
-                alt61=14;
+                alt65=14;
                 }
                 break;
             case INIT:
                 {
-                alt61=15;
+                alt65=15;
                 }
                 break;
             case ACTION:
                 {
-                alt61=16;
+                alt65=16;
                 }
                 break;
             case RESULT:
                 {
-                alt61=17;
+                alt65=17;
                 }
                 break;
             case COLLECT:
                 {
-                alt61=18;
+                alt65=18;
                 }
                 break;
             case OR:
                 {
-                alt61=19;
+                alt65=19;
                 }
                 break;
             case AND:
                 {
-                alt61=20;
+                alt65=20;
                 }
                 break;
             case CONTAINS:
                 {
-                alt61=21;
+                alt65=21;
                 }
                 break;
             case EXCLUDES:
                 {
-                alt61=22;
+                alt65=22;
                 }
                 break;
             case MEMBEROF:
                 {
-                alt61=23;
+                alt65=23;
                 }
                 break;
             case MATCHES:
                 {
-                alt61=24;
+                alt65=24;
                 }
                 break;
             case NULL:
                 {
-                alt61=25;
+                alt65=25;
                 }
                 break;
             case EXISTS:
                 {
-                alt61=26;
+                alt65=26;
                 }
                 break;
             case NOT:
                 {
-                alt61=27;
+                alt65=27;
                 }
                 break;
             case EVAL:
                 {
-                alt61=28;
+                alt65=28;
                 }
                 break;
             case FORALL:
                 {
-                alt61=29;
+                alt65=29;
                 }
                 break;
             case WHEN:
                 {
-                alt61=30;
+                alt65=30;
                 }
                 break;
             case THEN:
                 {
-                alt61=31;
+                alt65=31;
                 }
                 break;
             case END:
                 {
-                alt61=32;
+                alt65=32;
                 }
                 break;
+            case IN:
+                {
+                alt65=33;
+                }
+                break;
             default:
                 if (backtracking>0) {failed=true; return tok;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1466: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 )", 61, 0, input);
+                    new NoViableAltException("1523: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);
 
                 throw nvae;
             }
 
-            switch (alt61) {
+            switch (alt65) {
                 case 1 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1466:10: t= ID
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1523:10: t= ID
                     {
                     t=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_identifier4443); if (failed) return tok;
+                    match(input,ID,FOLLOW_ID_in_identifier4620); if (failed) return tok;
 
                     }
                     break;
                 case 2 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1467:4: t= PACKAGE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1524:4: t= PACKAGE
                     {
                     t=(Token)input.LT(1);
-                    match(input,PACKAGE,FOLLOW_PACKAGE_in_identifier4456); if (failed) return tok;
+                    match(input,PACKAGE,FOLLOW_PACKAGE_in_identifier4633); if (failed) return tok;
 
                     }
                     break;
                 case 3 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1468:4: t= FUNCTION
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1525:4: t= FUNCTION
                     {
                     t=(Token)input.LT(1);
-                    match(input,FUNCTION,FOLLOW_FUNCTION_in_identifier4463); if (failed) return tok;
+                    match(input,FUNCTION,FOLLOW_FUNCTION_in_identifier4640); if (failed) return tok;
 
                     }
                     break;
                 case 4 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1469:4: t= GLOBAL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1526:4: t= GLOBAL
                     {
                     t=(Token)input.LT(1);
-                    match(input,GLOBAL,FOLLOW_GLOBAL_in_identifier4470); if (failed) return tok;
+                    match(input,GLOBAL,FOLLOW_GLOBAL_in_identifier4647); if (failed) return tok;
 
                     }
                     break;
                 case 5 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1470:4: t= IMPORT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1527:4: t= IMPORT
                     {
                     t=(Token)input.LT(1);
-                    match(input,IMPORT,FOLLOW_IMPORT_in_identifier4477); if (failed) return tok;
+                    match(input,IMPORT,FOLLOW_IMPORT_in_identifier4654); if (failed) return tok;
 
                     }
                     break;
                 case 6 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1471:4: t= RULE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1528:4: t= RULE
                     {
                     t=(Token)input.LT(1);
-                    match(input,RULE,FOLLOW_RULE_in_identifier4486); if (failed) return tok;
+                    match(input,RULE,FOLLOW_RULE_in_identifier4663); if (failed) return tok;
 
                     }
                     break;
                 case 7 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1472:4: t= QUERY
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1529:4: t= QUERY
                     {
                     t=(Token)input.LT(1);
-                    match(input,QUERY,FOLLOW_QUERY_in_identifier4493); if (failed) return tok;
+                    match(input,QUERY,FOLLOW_QUERY_in_identifier4670); if (failed) return tok;
 
                     }
                     break;
                 case 8 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1473:17: t= TEMPLATE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1530:17: t= TEMPLATE
                     {
                     t=(Token)input.LT(1);
-                    match(input,TEMPLATE,FOLLOW_TEMPLATE_in_identifier4514); if (failed) return tok;
+                    match(input,TEMPLATE,FOLLOW_TEMPLATE_in_identifier4691); if (failed) return tok;
 
                     }
                     break;
                 case 9 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1474:17: t= ATTRIBUTES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1531:17: t= ATTRIBUTES
                     {
                     t=(Token)input.LT(1);
-                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_identifier4542); if (failed) return tok;
+                    match(input,ATTRIBUTES,FOLLOW_ATTRIBUTES_in_identifier4719); if (failed) return tok;
 
                     }
                     break;
                 case 10 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1475:17: t= ENABLED
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1532:17: t= ENABLED
                     {
                     t=(Token)input.LT(1);
-                    match(input,ENABLED,FOLLOW_ENABLED_in_identifier4568); if (failed) return tok;
+                    match(input,ENABLED,FOLLOW_ENABLED_in_identifier4745); if (failed) return tok;
 
                     }
                     break;
                 case 11 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1476:17: t= SALIENCE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1533:17: t= SALIENCE
                     {
                     t=(Token)input.LT(1);
-                    match(input,SALIENCE,FOLLOW_SALIENCE_in_identifier4597); if (failed) return tok;
+                    match(input,SALIENCE,FOLLOW_SALIENCE_in_identifier4774); if (failed) return tok;
 
                     }
                     break;
                 case 12 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1477:17: t= DURATION
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1534:17: t= DURATION
                     {
                     t=(Token)input.LT(1);
-                    match(input,DURATION,FOLLOW_DURATION_in_identifier4619); if (failed) return tok;
+                    match(input,DURATION,FOLLOW_DURATION_in_identifier4796); if (failed) return tok;
 
                     }
                     break;
                 case 13 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1478:17: t= FROM
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1535:17: t= FROM
                     {
                     t=(Token)input.LT(1);
-                    match(input,FROM,FOLLOW_FROM_in_identifier4641); if (failed) return tok;
+                    match(input,FROM,FOLLOW_FROM_in_identifier4818); if (failed) return tok;
 
                     }
                     break;
                 case 14 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1479:17: t= ACCUMULATE
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1536:17: t= ACCUMULATE
                     {
                     t=(Token)input.LT(1);
-                    match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_identifier4670); if (failed) return tok;
+                    match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_identifier4847); if (failed) return tok;
 
                     }
                     break;
                 case 15 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1480:17: t= INIT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1537:17: t= INIT
                     {
                     t=(Token)input.LT(1);
-                    match(input,INIT,FOLLOW_INIT_in_identifier4692); if (failed) return tok;
+                    match(input,INIT,FOLLOW_INIT_in_identifier4869); if (failed) return tok;
 
                     }
                     break;
                 case 16 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1481:17: t= ACTION
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1538:17: t= ACTION
                     {
                     t=(Token)input.LT(1);
-                    match(input,ACTION,FOLLOW_ACTION_in_identifier4721); if (failed) return tok;
+                    match(input,ACTION,FOLLOW_ACTION_in_identifier4898); if (failed) return tok;
 
                     }
                     break;
                 case 17 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1482:17: t= RESULT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1539:17: t= RESULT
                     {
                     t=(Token)input.LT(1);
-                    match(input,RESULT,FOLLOW_RESULT_in_identifier4750); if (failed) return tok;
+                    match(input,RESULT,FOLLOW_RESULT_in_identifier4927); if (failed) return tok;
 
                     }
                     break;
                 case 18 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1483:17: t= COLLECT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1540:17: t= COLLECT
                     {
                     t=(Token)input.LT(1);
-                    match(input,COLLECT,FOLLOW_COLLECT_in_identifier4779); if (failed) return tok;
+                    match(input,COLLECT,FOLLOW_COLLECT_in_identifier4956); if (failed) return tok;
 
                     }
                     break;
                 case 19 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1484:17: t= OR
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1541:17: t= OR
                     {
                     t=(Token)input.LT(1);
-                    match(input,OR,FOLLOW_OR_in_identifier4808); if (failed) return tok;
+                    match(input,OR,FOLLOW_OR_in_identifier4985); if (failed) return tok;
 
                     }
                     break;
                 case 20 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1485:17: t= AND
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1542:17: t= AND
                     {
                     t=(Token)input.LT(1);
-                    match(input,AND,FOLLOW_AND_in_identifier4837); if (failed) return tok;
+                    match(input,AND,FOLLOW_AND_in_identifier5014); if (failed) return tok;
 
                     }
                     break;
                 case 21 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1486:17: t= CONTAINS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1543:17: t= CONTAINS
                     {
                     t=(Token)input.LT(1);
-                    match(input,CONTAINS,FOLLOW_CONTAINS_in_identifier4866); if (failed) return tok;
+                    match(input,CONTAINS,FOLLOW_CONTAINS_in_identifier5043); if (failed) return tok;
 
                     }
                     break;
                 case 22 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1487:17: t= EXCLUDES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1544:17: t= EXCLUDES
                     {
                     t=(Token)input.LT(1);
-                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_identifier4888); if (failed) return tok;
+                    match(input,EXCLUDES,FOLLOW_EXCLUDES_in_identifier5065); if (failed) return tok;
 
                     }
                     break;
                 case 23 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1488:17: t= MEMBEROF
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1545:17: t= MEMBEROF
                     {
                     t=(Token)input.LT(1);
-                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_identifier4910); if (failed) return tok;
+                    match(input,MEMBEROF,FOLLOW_MEMBEROF_in_identifier5087); if (failed) return tok;
 
                     }
                     break;
                 case 24 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1489:17: t= MATCHES
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1546:17: t= MATCHES
                     {
                     t=(Token)input.LT(1);
-                    match(input,MATCHES,FOLLOW_MATCHES_in_identifier4930); if (failed) return tok;
+                    match(input,MATCHES,FOLLOW_MATCHES_in_identifier5107); if (failed) return tok;
 
                     }
                     break;
                 case 25 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1490:17: t= NULL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1547:17: t= NULL
                     {
                     t=(Token)input.LT(1);
-                    match(input,NULL,FOLLOW_NULL_in_identifier4959); if (failed) return tok;
+                    match(input,NULL,FOLLOW_NULL_in_identifier5136); if (failed) return tok;
 
                     }
                     break;
                 case 26 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1491:17: t= EXISTS
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1548:17: t= EXISTS
                     {
                     t=(Token)input.LT(1);
-                    match(input,EXISTS,FOLLOW_EXISTS_in_identifier4988); if (failed) return tok;
+                    match(input,EXISTS,FOLLOW_EXISTS_in_identifier5165); if (failed) return tok;
 
                     }
                     break;
                 case 27 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1492:17: t= NOT
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1549:17: t= NOT
                     {
                     t=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_identifier5017); if (failed) return tok;
+                    match(input,NOT,FOLLOW_NOT_in_identifier5194); if (failed) return tok;
 
                     }
                     break;
                 case 28 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1493:17: t= EVAL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1550:17: t= EVAL
                     {
                     t=(Token)input.LT(1);
-                    match(input,EVAL,FOLLOW_EVAL_in_identifier5046); if (failed) return tok;
+                    match(input,EVAL,FOLLOW_EVAL_in_identifier5223); if (failed) return tok;
 
                     }
                     break;
                 case 29 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1494:17: t= FORALL
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1551:17: t= FORALL
                     {
                     t=(Token)input.LT(1);
-                    match(input,FORALL,FOLLOW_FORALL_in_identifier5075); if (failed) return tok;
+                    match(input,FORALL,FOLLOW_FORALL_in_identifier5252); if (failed) return tok;
 
                     }
                     break;
                 case 30 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1495:17: t= WHEN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1552:17: t= WHEN
                     {
                     t=(Token)input.LT(1);
-                    match(input,WHEN,FOLLOW_WHEN_in_identifier5113); if (failed) return tok;
+                    match(input,WHEN,FOLLOW_WHEN_in_identifier5290); if (failed) return tok;
 
                     }
                     break;
                 case 31 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1496:17: t= THEN
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1553:17: t= THEN
                     {
                     t=(Token)input.LT(1);
-                    match(input,THEN,FOLLOW_THEN_in_identifier5145); if (failed) return tok;
+                    match(input,THEN,FOLLOW_THEN_in_identifier5322); if (failed) return tok;
 
                     }
                     break;
                 case 32 :
-                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1497:17: t= END
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1554:17: t= END
                     {
                     t=(Token)input.LT(1);
-                    match(input,END,FOLLOW_END_in_identifier5174); if (failed) return tok;
+                    match(input,END,FOLLOW_END_in_identifier5351); if (failed) return tok;
 
                     }
                     break;
+                case 33 :
+                    // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1555:11: t= IN
+                    {
+                    t=(Token)input.LT(1);
+                    match(input,IN,FOLLOW_IN_in_identifier5370); if (failed) return tok;
 
+                    }
+                    break;
+
             }
 
             if ( backtracking==0 ) {
@@ -6395,7 +6689,7 @@
         // /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
         {
-        if ( input.LA(1)==OR||input.LA(1)==70 ) {
+        if ( input.LA(1)==OR||input.LA(1)==71 ) {
             input.consume();
             errorRecovery=false;failed=false;
         }
@@ -6415,34 +6709,34 @@
     }
     // $ANTLR end synpred49
 
-    // $ANTLR start synpred93
-    public final void synpred93_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1266:14: ( ACCUMULATE )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1266:16: ACCUMULATE
+    // $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:1323:14: ( ACCUMULATE )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1323:16: ACCUMULATE
         {
-        match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_synpred933600); if (failed) return ;
+        match(input,ACCUMULATE,FOLLOW_ACCUMULATE_in_synpred973777); if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred93
+    // $ANTLR end synpred97
 
-    // $ANTLR start synpred94
-    public final void synpred94_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1267:14: ( COLLECT )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1267:16: COLLECT
+    // $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:1324:14: ( COLLECT )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1324:16: COLLECT
         {
-        match(input,COLLECT,FOLLOW_COLLECT_in_synpred943629); if (failed) return ;
+        match(input,COLLECT,FOLLOW_COLLECT_in_synpred983806); if (failed) return ;
 
         }
     }
-    // $ANTLR end synpred94
+    // $ANTLR end synpred98
 
-    // $ANTLR start synpred96
-    public final void synpred96_fragment() throws RecognitionException {   
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1268:14: (~ ( ACCUMULATE | COLLECT ) )
-        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1268:16: ~ ( ACCUMULATE | COLLECT )
+    // $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:1325:14: (~ ( ACCUMULATE | COLLECT ) )
+        // /home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1325: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)<=80) ) {
+        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) ) {
             input.consume();
             errorRecovery=false;failed=false;
         }
@@ -6450,13 +6744,13 @@
             if (backtracking>0) {failed=true; return ;}
             MismatchedSetException mse =
                 new MismatchedSetException(null,input);
-            recoverFromMismatchedSet(input,mse,FOLLOW_set_in_synpred963659);    throw mse;
+            recoverFromMismatchedSet(input,mse,FOLLOW_set_in_synpred1003836);    throw mse;
         }
 
 
         }
     }
-    // $ANTLR end synpred96
+    // $ANTLR end synpred100
 
     public final boolean synpred44() {
         backtracking++;
@@ -6486,11 +6780,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred96() {
+    public final boolean synpred98() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred96_fragment(); // can never throw exception
+            synpred98_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -6514,11 +6808,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred94() {
+    public final boolean synpred100() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred94_fragment(); // can never throw exception
+            synpred100_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -6542,11 +6836,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred8() {
+    public final boolean synpred97() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred8_fragment(); // can never throw exception
+            synpred97_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -6556,11 +6850,11 @@
         failed=false;
         return success;
     }
-    public final boolean synpred93() {
+    public final boolean synpred8() {
         backtracking++;
         int start = input.mark();
         try {
-            synpred93_fragment(); // can never throw exception
+            synpred8_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
         }
@@ -6593,24 +6887,24 @@
     static final String DFA11_eofS =
         "\6\uffff";
     static final String DFA11_minS =
-        "\2\4\2\uffff\1\60\1\4";
+        "\2\4\1\uffff\1\62\1\uffff\1\4";
     static final String DFA11_maxS =
-        "\1\66\1\104\2\uffff\1\60\1\103";
+        "\1\70\1\105\1\uffff\1\62\1\uffff\1\70";
     static final String DFA11_acceptS =
-        "\2\uffff\1\2\1\1\2\uffff";
+        "\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\5\2\1\uffff\1\2\4\uffff\6\2",
-            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\7\3\1\uffff"+
-            "\1\2\5\3\1\uffff\1\3\2\uffff\1\4\1\uffff\6\3\14\uffff\1\2\1"+
-            "\3",
+            "\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",
             "",
+            "\1\5",
             "",
-            "\1\5",
-            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\7\3\1\uffff"+
-            "\1\2\5\3\1\uffff\1\3\2\uffff\1\4\1\uffff\6\3\14\uffff\1\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"
     };
 
     static final short[] DFA11_eot = DFA.unpackEncodedString(DFA11_eotS);
@@ -6651,24 +6945,24 @@
     static final String DFA12_eofS =
         "\6\uffff";
     static final String DFA12_minS =
-        "\2\4\2\uffff\1\60\1\4";
+        "\2\4\1\uffff\1\62\1\uffff\1\4";
     static final String DFA12_maxS =
-        "\1\66\1\104\2\uffff\1\60\1\103";
+        "\1\70\1\105\1\uffff\1\62\1\uffff\1\70";
     static final String DFA12_acceptS =
-        "\2\uffff\1\2\1\1\2\uffff";
+        "\2\uffff\1\2\1\uffff\1\1\1\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\5\2\1\uffff\1\2\4\uffff\6\2",
-            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\7\3\1\uffff"+
-            "\1\2\5\3\1\uffff\1\3\2\uffff\1\4\1\uffff\6\3\14\uffff\1\2\1"+
-            "\3",
+            "\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",
             "",
+            "\1\5",
             "",
-            "\1\5",
-            "\12\3\3\uffff\1\3\1\uffff\1\3\6\uffff\1\3\2\uffff\7\3\1\uffff"+
-            "\1\2\5\3\1\uffff\1\3\2\uffff\1\4\1\uffff\6\3\14\uffff\1\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"
     };
 
     static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
@@ -6706,14 +7000,14 @@
     }
  
 
-    public static final BitSet FOLLOW_65_in_opt_semicolon46 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_67_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[]{0x000000001FEB4012L,0x0000000000000008L});
-    public static final BitSet FOLLOW_ATTRIBUTES_in_prolog105 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_prolog107 = new BitSet(new long[]{0x000000001FEB4002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_67_in_prolog116 = new BitSet(new long[]{0x000000001FEB4000L});
-    public static final BitSet FOLLOW_rule_attribute_in_prolog121 = new BitSet(new long[]{0x000000001FEB4002L,0x0000000000000008L});
+    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_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_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});
@@ -6722,58 +7016,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,0x0000000000000002L});
+    public static final BitSet FOLLOW_dotted_name_in_package_statement236 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
     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[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_import_name_in_import_statement294 = new BitSet(new long[]{0x0000000000000002L,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_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[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_import_name_in_function_import_statement348 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
+    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_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,0x0000000000000030L});
-    public static final BitSet FOLLOW_68_in_import_name391 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_import_name395 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000030L});
-    public static final BitSet FOLLOW_69_in_import_name419 = 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_GLOBAL_in_global455 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_dotted_name_in_global466 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_global478 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
+    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_opt_semicolon_in_global480 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_function507 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_dotted_name_in_function512 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
+    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[]{0x007E17EFE40A3FF0L});
-    public static final BitSet FOLLOW_dotted_name_in_function538 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_argument_in_function545 = new BitSet(new long[]{0x0000002000000000L,0x0000000000000008L});
-    public static final BitSet FOLLOW_67_in_function559 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_dotted_name_in_function564 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_argument_in_function571 = new BitSet(new long[]{0x0000002000000000L,0x0000000000000008L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_function595 = new BitSet(new long[]{0x0000200000000000L});
+    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_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[]{0x0038041400000400L});
+    public static final BitSet FOLLOW_name_in_query637 = new BitSet(new long[]{0x00E0041400000400L});
     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[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_template701 = new BitSet(new long[]{0x0000000400000000L,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_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,0x0000000000000002L});
+    public static final BitSet FOLLOW_END_in_template735 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
     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[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_template_slot801 = new BitSet(new long[]{0x0000000000000002L,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_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[]{0x004000001FEB6010L,0x0000000000000008L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule849 = new BitSet(new long[]{0x0040000000002000L});
-    public static final BitSet FOLLOW_WHEN_in_rule858 = new BitSet(new long[]{0x0078041400000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_rule860 = new BitSet(new long[]{0x0078041400000000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_rule878 = new BitSet(new long[]{0x0040000000000000L});
+    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_rhs_chunk_in_rule899 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ATTRIBUTES_in_rule_attributes920 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_rule_attributes922 = new BitSet(new long[]{0x000000001FEB4002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_67_in_rule_attributes931 = new BitSet(new long[]{0x000000001FEB4000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes936 = new BitSet(new long[]{0x000000001FEB4002L,0x0000000000000008L});
+    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_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_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});
@@ -6813,29 +7107,29 @@
     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[]{0x0038041400000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1722 = new BitSet(new long[]{0x00E0041400000002L});
     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,0x0000000000000010L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source1876 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000010L});
+    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_expression_chain_in_from_source1890 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_68_in_expression_chain1915 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_expression_chain1919 = new BitSet(new long[]{0x0000801000000002L,0x0000000000000010L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain1950 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000010L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain1984 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000010L});
+    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_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_LEFT_PAREN_in_accumulate_statement2056 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_accumulate_statement2060 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000008L});
-    public static final BitSet FOLLOW_67_in_accumulate_statement2062 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_accumulate_statement2060 = new BitSet(new long[]{0x0000100000000000L});
+    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[]{0x0000000000000000L,0x0000000000000008L});
-    public static final BitSet FOLLOW_67_in_accumulate_statement2078 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2075 = new BitSet(new long[]{0x0000100000000000L});
+    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[]{0x0000000000000000L,0x0000000000000008L});
-    public static final BitSet FOLLOW_67_in_accumulate_statement2094 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_statement2091 = new BitSet(new long[]{0x0000100000000000L});
+    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_RIGHT_PAREN_in_accumulate_statement2112 = new BitSet(new long[]{0x0000000000000002L});
@@ -6843,153 +7137,169 @@
     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_RIGHT_PAREN_in_collect_statement2173 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_fact_binding2207 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_fact_binding2209 = new BitSet(new long[]{0x0000001400000000L});
+    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_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_RIGHT_PAREN_in_fact_expression2261 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_expression2272 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000040L});
+    public static final BitSet FOLLOW_fact_in_fact_expression2272 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000080L});
     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,0x0000000000000040L});
+    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[]{0x007E17FFE40A3FF0L});
+    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_RIGHT_PAREN_in_fact2400 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints2421 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_predicate_in_constraints2424 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_67_in_constraints2432 = new BitSet(new long[]{0x007E17DFE40A3FF0L});
-    public static final BitSet FOLLOW_constraint_in_constraints2435 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_predicate_in_constraints2438 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000008L});
-    public static final BitSet FOLLOW_ID_in_constraint2467 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000004L});
-    public static final BitSet FOLLOW_66_in_constraint2469 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_constraint2490 = new BitSet(new long[]{0x000007C000000002L,0x000000000000FE00L});
-    public static final BitSet FOLLOW_constraint_expression_in_constraint2508 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000180L});
-    public static final BitSet FOLLOW_set_in_constraint2529 = new BitSet(new long[]{0x000007C000000000L,0x000000000000FC00L});
-    public static final BitSet FOLLOW_constraint_expression_in_constraint2549 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000180L});
-    public static final BitSet FOLLOW_73_in_constraint2577 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_predicate_in_constraint2579 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_operator_in_constraint_expression2614 = new BitSet(new long[]{0x0000181400148000L});
-    public static final BitSet FOLLOW_ID_in_constraint_expression2622 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enum_constraint_in_constraint_expression2638 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_constraint_expression2661 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_retval_constraint_in_constraint_expression2675 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_74_in_operator2709 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_75_in_operator2717 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_76_in_operator2725 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_77_in_operator2733 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_78_in_operator2741 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_79_in_operator2749 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_CONTAINS_in_operator2757 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MATCHES_in_operator2765 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXCLUDES_in_operator2773 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MEMBEROF_in_operator2781 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_operator2789 = new BitSet(new long[]{0x0000020000000000L});
-    public static final BitSet FOLLOW_MEMBEROF_in_operator2793 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_literal_constraint2829 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_literal_constraint2840 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_literal_constraint2853 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_literal_constraint2864 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_literal_constraint2876 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enum_constraint2911 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L});
-    public static final BitSet FOLLOW_68_in_enum_constraint2917 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_enum_constraint2921 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000010L});
-    public static final BitSet FOLLOW_paren_chunk_in_predicate2963 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk3012 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_set_in_paren_chunk3028 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_paren_chunk_in_paren_chunk3052 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk3089 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk3140 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_set_in_curly_chunk3156 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_curly_chunk_in_curly_chunk3180 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk3217 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk3280 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_set_in_square_chunk3296 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_square_chunk_in_square_chunk3320 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk3357 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_retval_constraint3402 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or3430 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000040L});
-    public static final BitSet FOLLOW_set_in_lhs_or3438 = new BitSet(new long[]{0x0038041400000000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or3449 = new BitSet(new long[]{0x0000000800000002L,0x0000000000000040L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3485 = new BitSet(new long[]{0x0002000000000002L,0x0000000000010000L});
-    public static final BitSet FOLLOW_set_in_lhs_and3493 = new BitSet(new long[]{0x0038041400000000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and3504 = new BitSet(new long[]{0x0002000000000002L,0x0000000000010000L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary3541 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary3549 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary3557 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_unary3565 = new BitSet(new long[]{0x0004000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_FROM_in_lhs_unary3581 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_accumulate_statement_in_lhs_unary3609 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_statement_in_lhs_unary3638 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_from_statement_in_lhs_unary3673 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary3712 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary3720 = new BitSet(new long[]{0x0038041400000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary3724 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary3726 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000002L});
-    public static final BitSet FOLLOW_opt_semicolon_in_lhs_unary3736 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXISTS_in_lhs_exist3760 = new BitSet(new long[]{0x0000001400000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist3780 = new BitSet(new long[]{0x0038041400000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist3784 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist3816 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist3866 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_lhs_not3920 = new BitSet(new long[]{0x0000001400000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not3933 = new BitSet(new long[]{0x0038041400000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not3937 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not3970 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not4007 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_lhs_eval4055 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval4059 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FORALL_in_lhs_forall4088 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall4090 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall4094 = new BitSet(new long[]{0x0000000400000000L,0x0000000000000008L});
-    public static final BitSet FOLLOW_67_in_lhs_forall4108 = new BitSet(new long[]{0x0000000400000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall4114 = new BitSet(new long[]{0x0000002400000000L,0x0000000000000008L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall4129 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dotted_name4160 = new BitSet(new long[]{0x0000800000000002L,0x0000000000000010L});
-    public static final BitSet FOLLOW_68_in_dotted_name4172 = new BitSet(new long[]{0x007E17CFE40A3FF0L});
-    public static final BitSet FOLLOW_identifier_in_dotted_name4176 = new BitSet(new long[]{0x0000800000000002L,0x0000000000000010L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dotted_name4198 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dotted_name4202 = new BitSet(new long[]{0x0000800000000002L});
-    public static final BitSet FOLLOW_identifier_in_argument4241 = new BitSet(new long[]{0x0000800000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_argument4247 = new BitSet(new long[]{0x0001000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument4249 = new BitSet(new long[]{0x0000800000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk4293 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_set_in_rhs_chunk4305 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x000000000001FFFFL});
-    public static final BitSet FOLLOW_END_in_rhs_chunk4342 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_name4386 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_name4405 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_identifier4443 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_PACKAGE_in_identifier4456 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_identifier4463 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_GLOBAL_in_identifier4470 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IMPORT_in_identifier4477 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_in_identifier4486 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_QUERY_in_identifier4493 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_TEMPLATE_in_identifier4514 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ATTRIBUTES_in_identifier4542 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ENABLED_in_identifier4568 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SALIENCE_in_identifier4597 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DURATION_in_identifier4619 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FROM_in_identifier4641 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACCUMULATE_in_identifier4670 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INIT_in_identifier4692 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ACTION_in_identifier4721 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RESULT_in_identifier4750 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_identifier4779 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_OR_in_identifier4808 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_AND_in_identifier4837 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_CONTAINS_in_identifier4866 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXCLUDES_in_identifier4888 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MEMBEROF_in_identifier4910 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MATCHES_in_identifier4930 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_identifier4959 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EXISTS_in_identifier4988 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_identifier5017 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EVAL_in_identifier5046 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FORALL_in_identifier5075 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_WHEN_in_identifier5113 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_THEN_in_identifier5145 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_END_in_identifier5174 = 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_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});
@@ -6997,8 +7307,8 @@
     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_synpred933600 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COLLECT_in_synpred943629 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_set_in_synpred963659 = 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});
 
 }
\ 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-04 00:48:52 UTC (rev 11658)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRL__.g	2007-05-04 00:56:11 UTC (rev 11659)
@@ -3,24 +3,23 @@
 	package org.drools.lang;
 }
 
-T64 : ';' ;
-T65 : ':' ;
-T66 : ',' ;
-T67 : '.' ;
-T68 : '.*' ;
-T69 : '||' ;
-T70 : '&' ;
-T71 : '|' ;
-T72 : '->' ;
-T73 : '==' ;
-T74 : '>' ;
-T75 : '>=' ;
-T76 : '<' ;
-T77 : '<=' ;
-T78 : '!=' ;
-T79 : '&&' ;
+T67 : ';' ;
+T68 : ':' ;
+T69 : '.' ;
+T70 : '.*' ;
+T71 : '||' ;
+T72 : '&' ;
+T73 : '|' ;
+T74 : '->' ;
+T75 : '==' ;
+T76 : '>' ;
+T77 : '>=' ;
+T78 : '<' ;
+T79 : '<=' ;
+T80 : '!=' ;
+T81 : '&&' ;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1489
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1562
 WS      :       (	' '
                 |	'\t'
                 |	'\f'
@@ -29,7 +28,7 @@
                 { $channel=HIDDEN; }
         ;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1497
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1570
 fragment
 EOL 	:	     
    		(       ( '\r\n' )=> '\r\n'  // Evil DOS
@@ -38,27 +37,27 @@
                 )
         ;  
         
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1505
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1578
 INT	
 	:	('-')?('0'..'9')+
 		;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1509
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1582
 FLOAT
 	:	('-')?('0'..'9')+ '.' ('0'..'9')+
 	;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1513
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1586
 STRING
     :  ('"' ( EscapeSequence | ~('\\'|'"') )* '"')
      | ('\'' ( EscapeSequence | ~('\\'|'\'') )* '\'')
     ;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1518
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1591
 fragment
 HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1521
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1594
 fragment
 EscapeSequence
     :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\'|'.')
@@ -66,7 +65,7 @@
     |   OctalEscape
     ;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1528
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1601
 fragment
 OctalEscape
     :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
@@ -74,204 +73,215 @@
     |   '\\' ('0'..'7')
     ;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1535
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1608
 fragment
 UnicodeEscape
     :   '\\' 'u' HexDigit HexDigit HexDigit HexDigit
     ;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1540
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1613
 BOOL
 	:	('true'|'false') 
 	;	
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1544
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1617
 PACKAGE	:	'package';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1546
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1619
 IMPORT	:	'import';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1548
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1621
 FUNCTION :	'function';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1550
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1623
 GLOBAL	:	'global';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1552
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1625
 RULE    :	'rule';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1554
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1627
 QUERY	:	'query';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1556
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1629
 TEMPLATE :	'template';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1558
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1631
 ATTRIBUTES :	'attributes';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1560
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1633
 DATE_EFFECTIVE 
 	:	'date-effective';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1563
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1636
 DATE_EXPIRES 
 	:	'date-expires';	
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1566
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1639
 ENABLED :	'enabled';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1568
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1641
 SALIENCE 
 	:	'salience';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1571
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1644
 NO_LOOP :	'no-loop';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1573
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1646
 AUTO_FOCUS 
 	:	'auto-focus';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1576
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1649
 ACTIVATION_GROUP 
 	:	'activation-group';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1579
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1652
 AGENDA_GROUP 
 	:	'agenda-group';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1582
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1655
 DIALECT 
 	:	'dialect';	
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1585
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1658
 RULEFLOW_GROUP 
 	:	'ruleflow-group';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1661
 DURATION 
 	:	'duration';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1591
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1664
 LOCK_ON_ACTIVE
 	:	'lock-on-active';	
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1594
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1667
 FROM	:	'from';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1669
 ACCUMULATE 
 	:	'accumulate';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1599
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1672
 INIT	:	'init';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1601
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1674
 ACTION	:	'action';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1676
 RESULT	:	'result';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1605
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1678
 COLLECT :	'collect';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1607
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1680
 OR	:	'or';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1609
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1682
 AND	:	'and';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1611
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1684
 CONTAINS 
 	:	'contains';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1614
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1687
 EXCLUDES 
 	:	'excludes';
 	
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1617
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1690
+MEMBEROF
+	:	'memberOf';
+
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1693
 MATCHES :	'matches';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1695
+IN	:	'in';
+
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1697
 NULL	:	'null';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1699
 EXISTS	:	'exists';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1701
 NOT	:	'not';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1703
 EVAL	:	'eval';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1705
 FORALL	:	'forall';							
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1707
 WHEN    :	'when'; 
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1709
 THEN	:    	'then';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1711
 END     :	'end';
 
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1713
 ID	
 	:	('a'..'z'|'A'..'Z'|'_'|'$'|'\u00c0'..'\u00ff')('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'\u00c0'..'\u00ff')* 
 	;
 		
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1640
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1718
 SH_STYLE_SINGLE_LINE_COMMENT	
 	:	'#' ( options{greedy=false;} : .)* EOL /* ('\r')? '\n'  */
                 { $channel=HIDDEN; }
 	;
         
         
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1724
 C_STYLE_SINGLE_LINE_COMMENT	
 	:	'//' ( options{greedy=false;} : .)* EOL // ('\r')? '\n' 
                 { $channel=HIDDEN; }
 	;
 
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1652
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1730
 LEFT_PAREN
         :	'('
         ;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1656
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1734
 RIGHT_PAREN
         :	')'
         ;
         
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1738
 LEFT_SQUARE
         :	'['
         ;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1664
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1742
 RIGHT_SQUARE
         :	']'
         ;        
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1668
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1746
 LEFT_CURLY
         :	'{'
         ;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1672
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1750
 RIGHT_CURLY
         :	'}'
         ;
         
-// $ANTLR src "/home/michael/projects/jboss-rules/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" 1754
 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" 1759
+COMMA	:	','
+	;
 
-// $ANTLR src "/home/michael/projects/jboss-rules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1681
+// $ANTLR src "/home/etirelli/workspace/jboss/jbossrules/drools-compiler/src/main/resources/org/drools/lang/DRL.g" 1762
 MISC 	:
-		'!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+'  | '?' | '|' | ',' | '=' | '/' | '\'' | '\\'
+		'!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+'  | '?' | '|' | '=' | '/' | '\'' | '\\'
 	;

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-04 00:48:52 UTC (rev 11658)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2007-05-04 00:56:11 UTC (rev 11659)
@@ -958,9 +958,8 @@
 		    }
 		}
 		(
-			(	rd=constraint_expression
+			(	constraint_expression[fc]
 				{
-					fc.addRestriction(rd);
 					// we must add now as we didn't before
 					if( fb != null) {
 					    pattern.addDescr( fc );
@@ -975,12 +974,7 @@
 							fc.addRestriction(new RestrictionConnectiveDescr(RestrictionConnectiveDescr.OR));	
 						}							
 					}
-					rd=constraint_expression
-					{
-					        if( rd != null ) {
-							fc.addRestriction(rd);
-					        }
-					}
+					constraint_expression[fc]
 				)*
 			)
 		|
@@ -988,31 +982,23 @@
 		)?
 	;
 	
-constraint_expression returns [RestrictionDescr rd]
+constraint_expression[FieldConstraintDescr fc]
         :	
-		op=operator
-		(	bvc=ID
+		(
+			compound_operator[fc]
+		)
+		|
+		(
+			op=simple_operator rd=expression_value[op]
 			{
-				rd = new VariableRestrictionDescr(op, bvc.getText());
+			    if( rd != null ) {
+			        fc.addRestriction( rd );
+			    }
 			}
-		|
-			lc=enum_constraint 
-			{ 
-				rd  = new LiteralRestrictionDescr(op, lc, true);
-			}						
-		|
-			lc=literal_constraint 
-			{ 
-				rd  = new LiteralRestrictionDescr(op, lc);
-			}
-		|	rvc=retval_constraint 
-			{ 
-				rd = new ReturnValueRestrictionDescr(op, rvc);							
-			} 
-		)
+ 		)
 	;	
 	
-operator returns [String op]
+simple_operator returns [String op]
 	:
 		(	t='=='
 		|	t='>'
@@ -1034,7 +1020,78 @@
 		    }
 		}
 	;	
-		
+	
+compound_operator[FieldConstraintDescr fc]
+	@init {
+		String op = 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 
+		)
+		|
+		( NOT 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.AND));	
+		        fc.addRestriction( rd );
+		    }
+		}
+		)* 
+		RIGHT_PAREN 
+		)
+	;
+	
+expression_value[String op] returns [RestrictionDescr rd]
+	:
+		(	bvc=ID
+			{
+				rd = new VariableRestrictionDescr(op, bvc.getText());
+			}
+		|
+			lc=enum_constraint 
+			{ 
+				rd  = new LiteralRestrictionDescr(op, lc, true);
+			}						
+		|
+			lc=literal_constraint 
+			{ 
+				rd  = new LiteralRestrictionDescr(op, lc);
+			}
+		|	rvc=retval_constraint 
+			{ 
+				rd = new ReturnValueRestrictionDescr(op, rvc);							
+			} 
+		)	
+	;	
+	
 literal_constraint returns [String text]
 	@init {
 		text = null;
@@ -1494,7 +1551,8 @@
         |       t=FORALL	            					
         |       t=WHEN            
         |       t=THEN	        
-        |       t=END             
+        |       t=END     
+        |	t=IN        
 	) 
 	{
 	    tok = t;
@@ -1634,6 +1692,8 @@
 
 MATCHES :	'matches';
 
+IN	:	'in';
+
 NULL	:	'null';
 
 EXISTS	:	'exists';
@@ -1695,7 +1755,10 @@
 	:	'/*' (options{greedy=false;} : .)* '*/'
                 { $channel=HIDDEN; }
 	;
+	
+COMMA	:	','
+	;
 
 MISC 	:
-		'!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+'  | '?' | '|' | ',' | '=' | '/' | '\'' | '\\'
+		'!' | '@' | '$' | '%' | '^' | '&' | '*' | '_' | '-' | '+'  | '?' | '|' | '=' | '/' | '\'' | '\\'
 	;

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-04 00:48:52 UTC (rev 11658)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2007-05-04 00:56:11 UTC (rev 11659)
@@ -2537,6 +2537,170 @@
         assertEquals( "$cities", restr.getIdentifier() );
     }
 
+    public void testInOperator() throws Exception {
+        final RuleDescr rule = parseResource( "in_operator_test.drl" ).rule();
+
+        assertFalse( this.parser.getErrors().toString(),
+                     this.parser.hasErrors() );
+        assertNotNull( rule );
+
+        assertEqualsIgnoreWhitespace( "consequence();",
+                                      (String) rule.getConsequence() );
+        assertEquals( "simple_rule",
+                      rule.getName() );
+        assertEquals( 2,
+                      rule.getLhs().getDescrs().size() );
+
+        //The first pattern, with 2 restrictions on a single field (plus a connective)
+        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        assertEquals( "Person",
+                      pattern.getObjectType() );
+        assertEquals( 1,
+                      pattern.getDescrs().size() );
+
+        FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
+        assertEquals( 3,
+                      fld.getRestrictions().size() );
+        assertEquals( "age",
+                      fld.getFieldName() );
+
+        LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+        assertEquals( ">",
+                      lit.getEvaluator() );
+        assertEquals( "30",
+                      lit.getText() );
+
+        RestrictionConnectiveDescr con = (RestrictionConnectiveDescr) fld.getRestrictions().get( 1 );
+        assertEquals( RestrictionConnectiveDescr.AND,
+                      con.getConnective() );
+
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 2 );
+        assertEquals( "<",
+                      lit.getEvaluator() );
+        assertEquals( "40",
+                      lit.getText() );
+
+        //the second col, with 2 fields, the first with 2 restrictions, the second field with one
+        pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
+        assertEquals( "Vehicle",
+                      pattern.getObjectType() );
+        assertEquals( 2,
+                      pattern.getDescrs().size() );
+
+        fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
+        assertEquals( 3,
+                      fld.getRestrictions().size() );
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+        assertEquals( "type",
+                      fld.getFieldName() );
+        assertEquals( "==",
+                      lit.getEvaluator() );
+        assertEquals( "sedan",
+                      lit.getText() );
+        con = (RestrictionConnectiveDescr) fld.getRestrictions().get( 1 );
+        assertEquals( RestrictionConnectiveDescr.OR,
+                      con.getConnective() );
+
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 2 );
+        assertEquals( "==",
+                      lit.getEvaluator() );
+        assertEquals( "wagon",
+                      lit.getText() );
+
+        //now the second field
+        fld = (FieldConstraintDescr) pattern.getDescrs().get( 1 );
+        assertEquals( 1,
+                      fld.getRestrictions().size() );
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+        assertEquals( "<",
+                      lit.getEvaluator() );
+        assertEquals( "3",
+                      lit.getText() );
+
+    }
+
+    public void testNotInOperator() throws Exception {
+        final RuleDescr rule = parseResource( "notin_operator_test.drl" ).rule();
+
+        assertFalse( this.parser.getErrors().toString(),
+                     this.parser.hasErrors() );
+        assertNotNull( rule );
+
+        assertEqualsIgnoreWhitespace( "consequence();",
+                                      (String) rule.getConsequence() );
+        assertEquals( "simple_rule",
+                      rule.getName() );
+        assertEquals( 2,
+                      rule.getLhs().getDescrs().size() );
+
+        //The first pattern, with 2 restrictions on a single field (plus a connective)
+        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+        assertEquals( "Person",
+                      pattern.getObjectType() );
+        assertEquals( 1,
+                      pattern.getDescrs().size() );
+
+        FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
+        assertEquals( 3,
+                      fld.getRestrictions().size() );
+        assertEquals( "age",
+                      fld.getFieldName() );
+
+        LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+        assertEquals( ">",
+                      lit.getEvaluator() );
+        assertEquals( "30",
+                      lit.getText() );
+
+        RestrictionConnectiveDescr con = (RestrictionConnectiveDescr) fld.getRestrictions().get( 1 );
+        assertEquals( RestrictionConnectiveDescr.AND,
+                      con.getConnective() );
+
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 2 );
+        assertEquals( "<",
+                      lit.getEvaluator() );
+        assertEquals( "40",
+                      lit.getText() );
+
+        //the second col, with 2 fields, the first with 2 restrictions, the second field with one
+        pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
+        assertEquals( "Vehicle",
+                      pattern.getObjectType() );
+        assertEquals( 2,
+                      pattern.getDescrs().size() );
+
+        fld = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
+        assertEquals( 3,
+                      fld.getRestrictions().size() );
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+        assertEquals( "type",
+                      fld.getFieldName() );
+        assertEquals( "!=",
+                      lit.getEvaluator() );
+        assertEquals( "sedan",
+                      lit.getText() );
+        con = (RestrictionConnectiveDescr) fld.getRestrictions().get( 1 );
+        assertEquals( RestrictionConnectiveDescr.AND,
+                      con.getConnective() );
+
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 2 );
+        assertEquals( "!=",
+                      lit.getEvaluator() );
+        assertEquals( "wagon",
+                      lit.getText() );
+
+        //now the second field
+        fld = (FieldConstraintDescr) pattern.getDescrs().get( 1 );
+        assertEquals( 1,
+                      fld.getRestrictions().size() );
+        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+        assertEquals( "<",
+                      lit.getEvaluator() );
+        assertEquals( "3",
+                      lit.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/lang/in_operator_test.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/in_operator_test.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/in_operator_test.drl	2007-05-04 00:56:11 UTC (rev 11659)
@@ -0,0 +1,9 @@
+#testing 'in' operator
+
+rule simple_rule 
+  when
+  	Person(age > 30 & < 40)
+  	Vehicle(type in ( "sedan", "wagon" ), age < 3)
+  then
+	consequence();
+end
\ No newline at end of file

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/lang/notin_operator_test.drl	2007-05-04 00:56:11 UTC (rev 11659)
@@ -0,0 +1,9 @@
+#testing 'in' operator
+
+rule simple_rule 
+  when
+  	Person(age > 30 & < 40)
+  	Vehicle(type not in ( "sedan", "wagon" ), age < 3)
+  then
+	consequence();
+end
\ No newline at end of file




More information about the jboss-svn-commits mailing list