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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Aug 1 15:27:38 EDT 2008


Author: porcelli
Date: 2008-08-01 15:27:37 -0400 (Fri, 01 Aug 2008)
New Revision: 21325

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/DRLParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
Log:
JBRULES-1692: additional fixes

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	2008-08-01 19:10:57 UTC (rev 21324)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-08-01 19:27:37 UTC (rev 21325)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-07-23 13:47:26
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-08-01 16:05:31
 
 	package org.drools.lang;
 
@@ -164,10 +164,10 @@
     public final void mWS() throws RecognitionException {
         try {
             int _type = WS;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1105:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1105:17: ( ' ' | '\\t' | '\\f' | EOL )+
             {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1105:17: ( ' ' | '\\t' | '\\f' | EOL )+
             int cnt1=0;
             loop1:
             do {
@@ -199,28 +199,28 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:19: ' '
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1105:19: ' '
             	    {
             	    match(' '); if (failed) return ;
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:19: '\\t'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:19: '\\t'
             	    {
             	    match('\t'); if (failed) return ;
 
             	    }
             	    break;
             	case 3 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:19: '\\f'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:19: '\\f'
             	    {
             	    match('\f'); if (failed) return ;
 
             	    }
             	    break;
             	case 4 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:19: EOL
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1108:19: EOL
             	    {
             	    mEOL(); if (failed) return ;
 
@@ -253,10 +253,10 @@
     // $ANTLR start EOL
     public final void mEOL() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1090:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1091:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1115:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1091:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1115:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
@@ -275,13 +275,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1091:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("1115:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
 
                 throw nvae;
             }
             switch (alt2) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1091:14: ( '\\r\\n' )=> '\\r\\n'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1115:14: ( '\\r\\n' )=> '\\r\\n'
                     {
                     match("\r\n"); if (failed) return ;
 
@@ -289,14 +289,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1092:25: '\\r'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1116:25: '\\r'
                     {
                     match('\r'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:25: '\\n'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:25: '\\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -318,10 +318,10 @@
     public final void mINT() throws RecognitionException {
         try {
             int _type = INT;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:2: ( ( '-' )? ( '0' .. '9' )+ )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:4: ( '-' )? ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:2: ( ( '-' )? ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:4: ( '-' )? ( '0' .. '9' )+
             {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:4: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -330,7 +330,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:5: '-'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -339,7 +339,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:10: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -353,7 +353,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -384,10 +384,10 @@
     public final void mFLOAT() throws RecognitionException {
         try {
             int _type = FLOAT;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:4: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -396,7 +396,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:5: '-'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -405,7 +405,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:10: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -419,7 +419,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -437,7 +437,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:26: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:26: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -451,7 +451,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:27: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:27: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -482,7 +482,7 @@
     public final void mSTRING() throws RecognitionException {
         try {
             int _type = STRING;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1130:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -495,19 +495,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1105:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("1129:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
 
                 throw nvae;
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1130:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
                     {
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1130:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1130:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1130:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -523,14 +523,14 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:15: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1130:15: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:32: ~ ( '\\\\' | '\"' )
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1130:32: ~ ( '\\\\' | '\"' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -560,13 +560,13 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
                     {
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
                     loop9:
                     do {
                         int alt9=3;
@@ -582,14 +582,14 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:16: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:16: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:33: ~ ( '\\\\' | '\\'' )
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:33: ~ ( '\\\\' | '\\'' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -630,8 +630,8 @@
     // $ANTLR start HexDigit
     public final void mHexDigit() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1111:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1111:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135: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();
@@ -656,7 +656,7 @@
     // $ANTLR start EscapeSequence
     public final void mEscapeSequence() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1115:5: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1139:5: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape )
             int alt11=3;
             int LA11_0 = input.LA(1);
 
@@ -728,7 +728,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1113:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
+                        new NoViableAltException("1137:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
 
                     throw nvae;
                 }
@@ -737,13 +737,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1113:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
+                    new NoViableAltException("1137:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
 
                 throw nvae;
             }
             switch (alt11) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1115:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1139:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
                     {
                     match('\\'); if (failed) return ;
                     if ( input.LA(1)=='\"'||input.LA(1)=='$'||(input.LA(1)>='&' && input.LA(1)<='+')||(input.LA(1)>='-' && input.LA(1)<='.')||input.LA(1)=='?'||(input.LA(1)>='A' && input.LA(1)<='B')||(input.LA(1)>='D' && input.LA(1)<='E')||input.LA(1)=='G'||input.LA(1)=='Q'||input.LA(1)=='S'||input.LA(1)=='W'||(input.LA(1)>='Z' && input.LA(1)<='^')||(input.LA(1)>='a' && input.LA(1)<='f')||(input.LA(1)>='n' && input.LA(1)<='p')||(input.LA(1)>='r' && input.LA(1)<='t')||(input.LA(1)>='w' && input.LA(1)<='x')||(input.LA(1)>='z' && input.LA(1)<='}') ) {
@@ -761,14 +761,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1119:9: UnicodeEscape
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1143:9: UnicodeEscape
                     {
                     mUnicodeEscape(); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1120:9: OctalEscape
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1144:9: OctalEscape
                     {
                     mOctalEscape(); if (failed) return ;
 
@@ -785,7 +785,7 @@
     // $ANTLR start OctalEscape
     public final void mOctalEscape() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             int alt12=3;
             int LA12_0 = input.LA(1);
 
@@ -819,7 +819,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1123:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("1147:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
 
                     throw nvae;
                 }
@@ -827,31 +827,31 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1123:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("1147:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
 
                 throw nvae;
             }
             switch (alt12) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:14: ( '0' .. '3' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:15: '0' .. '3'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:14: ( '0' .. '3' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:15: '0' .. '3'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:25: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:26: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:36: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:37: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:36: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:37: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -861,18 +861,18 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:14: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:15: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:25: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:26: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -882,11 +882,11 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1127:9: '\\\\' ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1151:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1127:14: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1127:15: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1151:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1151:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -906,8 +906,8 @@
     // $ANTLR start UnicodeEscape
     public final void mUnicodeEscape() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1132:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1132:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1156:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1156:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             {
             match('\\'); if (failed) return ;
             match('u'); if (failed) return ;
@@ -928,10 +928,10 @@
     public final void mBOOL() throws RecognitionException {
         try {
             int _type = BOOL;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:2: ( ( 'true' | 'false' ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1160:2: ( ( 'true' | 'false' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1160:4: ( 'true' | 'false' )
             {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1160:4: ( 'true' | 'false' )
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -944,13 +944,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1136:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("1160:4: ( 'true' | 'false' )", 13, 0, input);
 
                 throw nvae;
             }
             switch (alt13) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:5: 'true'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1160:5: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -958,7 +958,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:12: 'false'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1160:12: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -982,8 +982,8 @@
     public final void mNULL() throws RecognitionException {
         try {
             int _type = NULL;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1139:6: ( 'null' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1139:8: 'null'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:6: ( 'null' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1163:8: 'null'
             {
             match("null"); if (failed) return ;
 
@@ -1001,8 +1001,8 @@
     public final void mOVER() throws RecognitionException {
         try {
             int _type = OVER;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1142:2: ( 'over' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1142:4: 'over'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1166:2: ( 'over' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1166:4: 'over'
             {
             match("over"); if (failed) return ;
 
@@ -1020,8 +1020,8 @@
     public final void mTHEN() throws RecognitionException {
         try {
             int _type = THEN;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:2: ( 'then' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:4: 'then'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1170:2: ( 'then' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1170:4: 'then'
             {
             match("then"); if (failed) return ;
 
@@ -1039,8 +1039,8 @@
     public final void mEND() throws RecognitionException {
         try {
             int _type = END;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:5: ( 'end' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:7: 'end'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1173:5: ( 'end' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1173:7: 'end'
             {
             match("end"); if (failed) return ;
 
@@ -1058,8 +1058,8 @@
     public final void mGRAVE_ACCENT() throws RecognitionException {
         try {
             int _type = GRAVE_ACCENT;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1153:2: ( '`' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1153:4: '`'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1177:2: ( '`' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1177:4: '`'
             {
             match('`'); if (failed) return ;
 
@@ -1076,8 +1076,8 @@
     public final void mAT() throws RecognitionException {
         try {
             int _type = AT;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1156:4: ( '@' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1156:6: '@'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1180:4: ( '@' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1180:6: '@'
             {
             match('@'); if (failed) return ;
 
@@ -1094,8 +1094,8 @@
     public final void mEQUALS() throws RecognitionException {
         try {
             int _type = EQUALS;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1160:2: ( '=' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1160:4: '='
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1184:2: ( '=' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1184:4: '='
             {
             match('='); if (failed) return ;
 
@@ -1112,8 +1112,8 @@
     public final void mSEMICOLON() throws RecognitionException {
         try {
             int _type = SEMICOLON;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1164:2: ( ';' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1164:4: ';'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:2: ( ';' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:4: ';'
             {
             match(';'); if (failed) return ;
 
@@ -1130,8 +1130,8 @@
     public final void mDOT_STAR() throws RecognitionException {
         try {
             int _type = DOT_STAR;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1168:2: ( '.*' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1168:4: '.*'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1192:2: ( '.*' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1192:4: '.*'
             {
             match(".*"); if (failed) return ;
 
@@ -1149,8 +1149,8 @@
     public final void mCOLON() throws RecognitionException {
         try {
             int _type = COLON;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1172:2: ( ':' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1172:4: ':'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1196:2: ( ':' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1196:4: ':'
             {
             match(':'); if (failed) return ;
 
@@ -1167,8 +1167,8 @@
     public final void mEQUAL() throws RecognitionException {
         try {
             int _type = EQUAL;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1176:2: ( '==' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1176:4: '=='
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1200:2: ( '==' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1200:4: '=='
             {
             match("=="); if (failed) return ;
 
@@ -1186,8 +1186,8 @@
     public final void mNOT_EQUAL() throws RecognitionException {
         try {
             int _type = NOT_EQUAL;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1180:2: ( '!=' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1180:4: '!='
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1204:2: ( '!=' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1204:4: '!='
             {
             match("!="); if (failed) return ;
 
@@ -1205,8 +1205,8 @@
     public final void mGREATER() throws RecognitionException {
         try {
             int _type = GREATER;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1184:2: ( '>' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1184:4: '>'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1208:2: ( '>' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1208:4: '>'
             {
             match('>'); if (failed) return ;
 
@@ -1223,8 +1223,8 @@
     public final void mGREATER_EQUAL() throws RecognitionException {
         try {
             int _type = GREATER_EQUAL;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:2: ( '>=' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:4: '>='
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1212:2: ( '>=' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1212:4: '>='
             {
             match(">="); if (failed) return ;
 
@@ -1242,8 +1242,8 @@
     public final void mLESS() throws RecognitionException {
         try {
             int _type = LESS;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1192:2: ( '<' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1192:4: '<'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1216:2: ( '<' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1216:4: '<'
             {
             match('<'); if (failed) return ;
 
@@ -1260,8 +1260,8 @@
     public final void mLESS_EQUAL() throws RecognitionException {
         try {
             int _type = LESS_EQUAL;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1196:2: ( '<=' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1196:4: '<='
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1220:2: ( '<=' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1220:4: '<='
             {
             match("<="); if (failed) return ;
 
@@ -1279,8 +1279,8 @@
     public final void mARROW() throws RecognitionException {
         try {
             int _type = ARROW;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1200:2: ( '->' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1200:4: '->'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1224:2: ( '->' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1224:4: '->'
             {
             match("->"); if (failed) return ;
 
@@ -1298,8 +1298,8 @@
     public final void mID() throws RecognitionException {
         try {
             int _type = ID;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1204:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1204:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1228:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1228: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();
@@ -1312,7 +1312,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1204:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1228:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             loop14:
             do {
                 int alt14=2;
@@ -1361,8 +1361,8 @@
     public final void mLEFT_PAREN() throws RecognitionException {
         try {
             int _type = LEFT_PAREN;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1208:9: ( '(' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1208:11: '('
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1232:9: ( '(' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1232:11: '('
             {
             match('('); if (failed) return ;
 
@@ -1379,8 +1379,8 @@
     public final void mRIGHT_PAREN() throws RecognitionException {
         try {
             int _type = RIGHT_PAREN;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1212:9: ( ')' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1212:11: ')'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1236:9: ( ')' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1236:11: ')'
             {
             match(')'); if (failed) return ;
 
@@ -1397,8 +1397,8 @@
     public final void mLEFT_SQUARE() throws RecognitionException {
         try {
             int _type = LEFT_SQUARE;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1216:9: ( '[' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1216:11: '['
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1240:9: ( '[' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1240:11: '['
             {
             match('['); if (failed) return ;
 
@@ -1415,8 +1415,8 @@
     public final void mRIGHT_SQUARE() throws RecognitionException {
         try {
             int _type = RIGHT_SQUARE;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1220:9: ( ']' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1220:11: ']'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1244:9: ( ']' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1244:11: ']'
             {
             match(']'); if (failed) return ;
 
@@ -1433,8 +1433,8 @@
     public final void mLEFT_CURLY() throws RecognitionException {
         try {
             int _type = LEFT_CURLY;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1224:9: ( '{' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1224:11: '{'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1248:9: ( '{' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1248:11: '{'
             {
             match('{'); if (failed) return ;
 
@@ -1451,8 +1451,8 @@
     public final void mRIGHT_CURLY() throws RecognitionException {
         try {
             int _type = RIGHT_CURLY;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1228:9: ( '}' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1228:11: '}'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252:9: ( '}' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252:11: '}'
             {
             match('}'); if (failed) return ;
 
@@ -1469,8 +1469,8 @@
     public final void mCOMMA() throws RecognitionException {
         try {
             int _type = COMMA;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1231:7: ( ',' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1231:9: ','
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1255:7: ( ',' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1255:9: ','
             {
             match(','); if (failed) return ;
 
@@ -1487,8 +1487,8 @@
     public final void mDOT() throws RecognitionException {
         try {
             int _type = DOT;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1234:5: ( '.' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1234:7: '.'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1258:5: ( '.' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1258:7: '.'
             {
             match('.'); if (failed) return ;
 
@@ -1505,8 +1505,8 @@
     public final void mDOUBLE_AMPER() throws RecognitionException {
         try {
             int _type = DOUBLE_AMPER;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1238:2: ( '&&' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1238:4: '&&'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1262:2: ( '&&' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1262:4: '&&'
             {
             match("&&"); if (failed) return ;
 
@@ -1524,8 +1524,8 @@
     public final void mDOUBLE_PIPE() throws RecognitionException {
         try {
             int _type = DOUBLE_PIPE;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1242:2: ( '||' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1242:4: '||'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1266:2: ( '||' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1266:4: '||'
             {
             match("||"); if (failed) return ;
 
@@ -1543,11 +1543,11 @@
     public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = SH_STYLE_SINGLE_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1246:2: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1246:4: '#' ( options {greedy=false; } : . )* EOL
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1270:2: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1270:4: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1246:8: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1270:8: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -1566,7 +1566,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1246:35: .
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1270:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1596,12 +1596,12 @@
     public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = C_STYLE_SINGLE_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252:2: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252:4: '//' ( options {greedy=false; } : . )* EOL
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:2: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:4: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:9: ( options {greedy=false; } : . )*
             loop16:
             do {
                 int alt16=2;
@@ -1620,7 +1620,7 @@
 
                 switch (alt16) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252:36: .
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1276:36: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1650,12 +1650,12 @@
     public final void mMULTI_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = MULTI_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1257:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1257:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1281:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1281:4: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1257:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1281:9: ( options {greedy=false; } : . )*
             loop17:
             do {
                 int alt17=2;
@@ -1680,7 +1680,7 @@
 
                 switch (alt17) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1257:35: .
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1281:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1711,7 +1711,7 @@
     public final void mMISC() throws RecognitionException {
         try {
             int _type = MISC;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1261:7: ( '!' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1285:7: ( '!' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '/' | '\\'' | '\\\\' | '|' | '&' )
             // /Users/porcelli/Documents/dev/drools-trunk/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)=='|' ) {
@@ -2006,8 +2006,8 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1091:14: ( '\\r\\n' )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1091:16: '\\r\\n'
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1115:14: ( '\\r\\n' )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1115:16: '\\r\\n'
         {
         match("\r\n"); if (failed) return ;
 

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	2008-08-01 19:10:57 UTC (rev 21324)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-08-01 19:27:37 UTC (rev 21325)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-07-23 13:47:24
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-08-01 16:05:30
 
 	package org.drools.lang;
 	
@@ -147,7 +147,7 @@
 
         public DRLParser(TokenStream input) {
             super(input);
-            ruleMemo = new HashMap[145+1];
+            ruleMemo = new HashMap[146+1];
          }
         
     protected TreeAdaptor adaptor = new CommonTreeAdaptor();
@@ -195,6 +195,22 @@
     		}
     	}
     	
+    	private boolean validateNotWithBinding(){
+    		if (input.LA(1) == ID && input.LA(2) == ID && input.LA(3) == COLON){
+    			return true;
+    		}
+    		return false;
+    	}
+
+    	private boolean validateWhenWithParenthesis(){
+    		if (input.LA(1) == ID && validateIdentifierKey(DroolsSoftKeywords.WHEN) && input.LA(2) == COLON && input.LA(3) == LEFT_PAREN && !(validateLT(4, DroolsSoftKeywords.OR) || validateLT(4, DroolsSoftKeywords.AND))){
+    			return true;
+    		} else if (input.LA(1) == ID && validateIdentifierKey(DroolsSoftKeywords.WHEN) && input.LA(2) == LEFT_PAREN && !(validateLT(3, DroolsSoftKeywords.OR) || validateLT(3, DroolsSoftKeywords.AND))){
+    			return true;
+    		}
+    		return false;		
+    	}
+
     	private boolean validateRestr() {
     		int lookahead = 2;
     		int countParen = 1;
@@ -316,7 +332,7 @@
     };
 
     // $ANTLR start compilation_unit
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:279:1: compilation_unit : ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:295:1: compilation_unit : ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
     public final compilation_unit_return compilation_unit() throws RecognitionException {
         compilation_unit_return retval = new compilation_unit_return();
         retval.start = input.LT(1);
@@ -334,17 +350,17 @@
         RewriteRuleSubtreeStream stream_package_statement=new RewriteRuleSubtreeStream(adaptor,"rule package_statement");
         RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:280:2: ( ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:280:4: ( package_statement )? ( statement )* EOF
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:296:2: ( ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:296:4: ( package_statement )? ( statement )* EOF
             {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:280:4: ( package_statement )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:296:4: ( package_statement )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
-            if ( (LA1_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey!
 (DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "functio!
 n") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateI
dentifierKey(DroolsSoftKeywords.PACKAGE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey!
 (DroolsSoftKeywords.DURATION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))))) {
+            if ( (LA1_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3,!
  DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywo!
 rds.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) &
& validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKe!
 ywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
                 int LA1_1 = input.LA(2);
 
-                if ( (LA1_1==ID) && ((((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMP!
 LATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.D!
 ECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((vali
dateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIden!
 tifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.T!
 EMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateId
entifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))))) {
+                if ( (LA1_1==ID) && ((((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateL!
 T(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLA!
 RE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validate
LT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifie!
 rKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEM!
 PLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIden
tifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))))) {
                     int LA1_4 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.PACKAGE))) ) {
@@ -354,7 +370,7 @@
             }
             switch (alt1) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:280:4: package_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:296:4: package_statement
                     {
                     pushFollow(FOLLOW_package_statement_in_compilation_unit408);
                     package_statement1=package_statement();
@@ -367,20 +383,20 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:3: ( statement )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:297:3: ( statement )*
             loop2:
             do {
                 int alt2=2;
                 int LA2_0 = input.LA(1);
 
-                if ( (LA2_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(valid!
 ateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
+                if ( (LA2_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, !
 "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))))) {
                     alt2=1;
                 }
 
 
                 switch (alt2) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:3: statement
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:297:3: statement
             	    {
             	    pushFollow(FOLLOW_statement_in_compilation_unit413);
             	    statement2=statement();
@@ -412,20 +428,20 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 283:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            // 299:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:6: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:6: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_COMPILATION_UNIT, "VT_COMPILATION_UNIT"), root_1);
 
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:28: ( package_statement )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:28: ( package_statement )?
                 if ( stream_package_statement.hasNext() ) {
                     adaptor.addChild(root_1, stream_package_statement.next());
 
                 }
                 stream_package_statement.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:47: ( statement )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:47: ( statement )*
                 while ( stream_statement.hasNext() ) {
                     adaptor.addChild(root_1, stream_statement.next());
 
@@ -469,7 +485,7 @@
     };
 
     // $ANTLR start package_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:291:1: package_statement : package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:307:1: package_statement : package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) ;
     public final package_statement_return package_statement() throws RecognitionException {
         package_statement_return retval = new package_statement_return();
         retval.start = input.LT(1);
@@ -488,8 +504,8 @@
         RewriteRuleSubtreeStream stream_package_id=new RewriteRuleSubtreeStream(adaptor,"rule package_id");
          pushParaphrases(DroolsParaphareseTypes.PACKAGE); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:4: package_key package_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:4: package_key package_id ( SEMICOLON )?
             {
             pushFollow(FOLLOW_package_key_in_package_statement469);
             package_key4=package_key();
@@ -501,7 +517,7 @@
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_package_id.add(package_id5.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:27: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:27: ( SEMICOLON )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -510,7 +526,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:27: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:27: SEMICOLON
                     {
                     SEMICOLON6=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement473); if (failed) return retval;
@@ -534,9 +550,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 295:3: -> ^( package_key package_id )
+            // 311:3: -> ^( package_key package_id )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:295:6: ^( package_key package_id )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311:6: ^( package_key package_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_package_key.nextNode(), root_1);
@@ -578,7 +594,7 @@
     };
 
     // $ANTLR start package_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:1: package_id : id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:1: package_id : id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) ;
     public final package_id_return package_id() throws RecognitionException {
         package_id_return retval = new package_id_return();
         retval.start = input.LT(1);
@@ -593,8 +609,8 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:2: (id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:4: id+= ID (id+= DOT id+= ID )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:2: (id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:4: id+= ID (id+= DOT id+= ID )*
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_package_id497); if (failed) return retval;
@@ -603,7 +619,7 @@
             if (list_id==null) list_id=new ArrayList();
             list_id.add(id);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:11: (id+= DOT id+= ID )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:11: (id+= DOT id+= ID )*
             loop4:
             do {
                 int alt4=2;
@@ -616,7 +632,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:13: id+= DOT id+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
             	    match(input,DOT,FOLLOW_DOT_in_package_id503); if (failed) return retval;
@@ -656,9 +672,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 301:3: -> ^( VT_PACKAGE_ID ( ID )+ )
+            // 317:3: -> ^( VT_PACKAGE_ID ( ID )+ )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:301:6: ^( VT_PACKAGE_ID ( ID )+ )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:317:6: ^( VT_PACKAGE_ID ( ID )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PACKAGE_ID, "VT_PACKAGE_ID"), root_1);
@@ -704,7 +720,7 @@
     };
 
     // $ANTLR start statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );
     public final statement_return statement() throws RecognitionException {
         statement_return retval = new statement_return();
         retval.start = input.LT(1);
@@ -732,17 +748,17 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:307:3: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:323:3: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query )
             int alt5=9;
             int LA5_0 = input.LA(1);
 
-            if ( (LA5_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(valid!
 ateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey!
 (DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DE
CLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLA!
 TE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
+            if ( (LA5_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftK!
 eywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(vali!
 dateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "impo
rt") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords!
 .TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
                 int LA5_1 = input.LA(2);
 
                 if ( (LA5_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-")!
  && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
                     alt5=1;
                 }
-                else if ( (LA5_1==ID) && ((((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoft!
 Keywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLAT!
 E)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1
, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(D!
 roolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKey!
 words.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))
)||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
+                else if ( (LA5_1==ID) && ((((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsS!
 oftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEM!
 PLATE)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((valida
teLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(Drool!
 sSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSof!
 tKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLA
TE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))))) {
                     int LA5_3 = input.LA(3);
 
                     if ( (((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) ) {
@@ -772,13 +788,19 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("304:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 3, input);
+                            new NoViableAltException("320:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 3, input);
 
                         throw nvae;
                     }
                 }
-                else if ( (LA5_1==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, Drool!
 sSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
-                    int LA5_4 = input.LA(3);
+                else if ( (LA5_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
+                    alt5=1;
+                }
+                else if ( (LA5_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
+                    alt5=1;
+                }
+                else if ( (LA5_1==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(Dro!
 olsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
+                    int LA5_6 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {
                         alt5=1;
@@ -795,24 +817,18 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("304:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 4, input);
+                            new NoViableAltException("320:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 6, input);
 
                         throw nvae;
                     }
                 }
-                else if ( (LA5_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
-                    alt5=1;
-                }
-                else if ( (LA5_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
-                    alt5=1;
-                }
                 else if ( (LA5_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {
                     alt5=1;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("304:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 1, input);
+                        new NoViableAltException("320:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 1, input);
 
                     throw nvae;
                 }
@@ -820,13 +836,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("304:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 0, input);
+                    new NoViableAltException("320:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 0, input);
 
                 throw nvae;
             }
             switch (alt5) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:307:5: rule_attribute
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:323:5: rule_attribute
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -839,7 +855,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:3: {...}? => function_import_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324:3: {...}? => function_import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -856,7 +872,7 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:309:4: import_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:325:4: import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -869,7 +885,7 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:4: global
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:326:4: global
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -882,7 +898,7 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311:4: function
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327:4: function
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -895,7 +911,7 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:312:4: {...}? => template
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:328:4: {...}? => template
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -912,7 +928,7 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:313:4: {...}? => type_declaration
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329:4: {...}? => type_declaration
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -929,7 +945,7 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:4: rule
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:4: rule
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -942,7 +958,7 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:4: query
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:331:4: query
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -979,7 +995,7 @@
     };
 
     // $ANTLR start import_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:318:1: import_statement : import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:334:1: import_statement : import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) ;
     public final import_statement_return import_statement() throws RecognitionException {
         import_statement_return retval = new import_statement_return();
         retval.start = input.LT(1);
@@ -998,8 +1014,8 @@
         RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
          pushParaphrases(DroolsParaphareseTypes.IMPORT); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:2: ( import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:4: import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:337:2: ( import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:337:4: import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )?
             {
             pushFollow(FOLLOW_import_key_in_import_statement618);
             import_key16=import_key();
@@ -1011,7 +1027,7 @@
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_name.add(import_name17.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:58: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:337:58: ( SEMICOLON )?
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -1020,7 +1036,7 @@
             }
             switch (alt6) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:58: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:337:58: SEMICOLON
                     {
                     SEMICOLON18=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement623); if (failed) return retval;
@@ -1044,9 +1060,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 322:3: -> ^( import_key import_name )
+            // 338:3: -> ^( import_key import_name )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:322:6: ^( import_key import_name )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:338:6: ^( import_key import_name )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_import_key.nextNode(), root_1);
@@ -1088,7 +1104,7 @@
     };
 
     // $ANTLR start function_import_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:325:1: function_import_statement : imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341:1: function_import_statement : imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) ;
     public final function_import_statement_return function_import_statement() throws RecognitionException {
         function_import_statement_return retval = new function_import_statement_return();
         retval.start = input.LT(1);
@@ -1110,8 +1126,8 @@
         RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
          pushParaphrases(DroolsParaphareseTypes.FUNCTION_IMPORT); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:328:2: (imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:328:4: imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:2: (imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:4: imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )?
             {
             pushFollow(FOLLOW_import_key_in_function_import_statement658);
             imp=import_key();
@@ -1128,7 +1144,7 @@
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_name.add(import_name20.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:328:84: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:84: ( SEMICOLON )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -1137,7 +1153,7 @@
             }
             switch (alt7) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:328:84: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:84: SEMICOLON
                     {
                     SEMICOLON21=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement665); if (failed) return retval;
@@ -1151,7 +1167,7 @@
 
 
             // AST REWRITE
-            // elements: function_key, import_name
+            // elements: import_name, function_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1161,9 +1177,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 329:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+            // 345:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329:6: ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:6: ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FUNCTION_IMPORT, ((Token)imp.start)), root_1);
@@ -1206,7 +1222,7 @@
     };
 
     // $ANTLR start import_name
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:1: import_name[int importType] : id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:348:1: import_name[int importType] : id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
     public final import_name_return import_name(int importType) throws RecognitionException {
         import_name_return retval = new import_name_return();
         retval.start = input.LT(1);
@@ -1222,8 +1238,8 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:2: (id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:4: id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:2: (id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:4: id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )?
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_import_name694); if (failed) return retval;
@@ -1232,7 +1248,7 @@
             if (list_id==null) list_id=new ArrayList();
             list_id.add(id);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:11: (id+= DOT id+= ID )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:11: (id+= DOT id+= ID )*
             loop8:
             do {
                 int alt8=2;
@@ -1245,7 +1261,7 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:13: id+= DOT id+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
             	    match(input,DOT,FOLLOW_DOT_in_import_name700); if (failed) return retval;
@@ -1270,7 +1286,7 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:33: (id+= DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:33: (id+= DOT_STAR )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -1279,7 +1295,7 @@
             }
             switch (alt9) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:33: id+= DOT_STAR
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:33: id+= DOT_STAR
                     {
                     id=(Token)input.LT(1);
                     match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name711); if (failed) return retval;
@@ -1299,7 +1315,7 @@
             }
 
             // AST REWRITE
-            // elements: DOT_STAR, ID
+            // elements: ID, DOT_STAR
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1309,9 +1325,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 335:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            // 351:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:335:6: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:6: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_IMPORT_ID, "VT_IMPORT_ID"), root_1);
@@ -1324,7 +1340,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:335:25: ( DOT_STAR )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:25: ( DOT_STAR )?
                 if ( stream_DOT_STAR.hasNext() ) {
                     adaptor.addChild(root_1, stream_DOT_STAR.next());
 
@@ -1363,7 +1379,7 @@
     };
 
     // $ANTLR start global
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:338:1: global : global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:1: global : global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) ;
     public final global_return global() throws RecognitionException {
         global_return retval = new global_return();
         retval.start = input.LT(1);
@@ -1385,8 +1401,8 @@
         RewriteRuleSubtreeStream stream_global_key=new RewriteRuleSubtreeStream(adaptor,"rule global_key");
          pushParaphrases(DroolsParaphareseTypes.GLOBAL); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341:4: global_key data_type global_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:4: global_key data_type global_id ( SEMICOLON )?
             {
             pushFollow(FOLLOW_global_key_in_global751);
             global_key22=global_key();
@@ -1403,7 +1419,7 @@
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_global_id.add(global_id24.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341:35: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:35: ( SEMICOLON )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -1412,7 +1428,7 @@
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341:35: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:35: SEMICOLON
                     {
                     SEMICOLON25=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global757); if (failed) return retval;
@@ -1426,7 +1442,7 @@
 
 
             // AST REWRITE
-            // elements: global_key, data_type, global_id
+            // elements: data_type, global_id, global_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1436,9 +1452,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 342:3: -> ^( global_key data_type global_id )
+            // 358:3: -> ^( global_key data_type global_id )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:342:6: ^( global_key data_type global_id )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:358:6: ^( global_key data_type global_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_global_key.nextNode(), root_1);
@@ -1481,7 +1497,7 @@
     };
 
     // $ANTLR start global_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:1: global_id : id= ID -> VT_GLOBAL_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:1: global_id : id= ID -> VT_GLOBAL_ID[$id] ;
     public final global_id_return global_id() throws RecognitionException {
         global_id_return retval = new global_id_return();
         retval.start = input.LT(1);
@@ -1494,8 +1510,8 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:2: (id= ID -> VT_GLOBAL_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:4: id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:362:2: (id= ID -> VT_GLOBAL_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:362:4: id= ID
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_global_id783); if (failed) return retval;
@@ -1516,7 +1532,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 348:3: -> VT_GLOBAL_ID[$id]
+            // 364:3: -> VT_GLOBAL_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_GLOBAL_ID, id));
 
@@ -1549,7 +1565,7 @@
     };
 
     // $ANTLR start function
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:1: function : function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:1: function : function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) ;
     public final function_return function() throws RecognitionException {
         function_return retval = new function_return();
         retval.start = input.LT(1);
@@ -1574,15 +1590,15 @@
         RewriteRuleSubtreeStream stream_function_id=new RewriteRuleSubtreeStream(adaptor,"rule function_id");
          pushParaphrases(DroolsParaphareseTypes.FUNCTION); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:4: function_key ( data_type )? function_id parameters curly_chunk
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:370:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:370:4: function_key ( data_type )? function_id parameters curly_chunk
             {
             pushFollow(FOLLOW_function_key_in_function815);
             function_key26=function_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_function_key.add(function_key26.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:17: ( data_type )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:370:17: ( data_type )?
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -1595,7 +1611,7 @@
             }
             switch (alt11) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:17: data_type
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:370:17: data_type
                     {
                     pushFollow(FOLLOW_data_type_in_function817);
                     data_type27=data_type();
@@ -1625,7 +1641,7 @@
             if ( backtracking==0 ) stream_curly_chunk.add(curly_chunk30.getTree());
 
             // AST REWRITE
-            // elements: parameters, function_id, data_type, curly_chunk, function_key
+            // elements: curly_chunk, data_type, function_key, function_id, parameters
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1635,14 +1651,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 355:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
+            // 371:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:6: ^( function_key ( data_type )? function_id parameters curly_chunk )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:6: ^( function_key ( data_type )? function_id parameters curly_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_function_key.nextNode(), root_1);
 
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:21: ( data_type )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:21: ( data_type )?
                 if ( stream_data_type.hasNext() ) {
                     adaptor.addChild(root_1, stream_data_type.next());
 
@@ -1687,7 +1703,7 @@
     };
 
     // $ANTLR start function_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:358:1: function_id : id= ID -> VT_FUNCTION_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:374:1: function_id : id= ID -> VT_FUNCTION_ID[$id] ;
     public final function_id_return function_id() throws RecognitionException {
         function_id_return retval = new function_id_return();
         retval.start = input.LT(1);
@@ -1700,8 +1716,8 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:359:2: (id= ID -> VT_FUNCTION_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:359:4: id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:375:2: (id= ID -> VT_FUNCTION_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:375:4: id= ID
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_function_id854); if (failed) return retval;
@@ -1722,7 +1738,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 361:3: -> VT_FUNCTION_ID[$id]
+            // 377:3: -> VT_FUNCTION_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_FUNCTION_ID, id));
 
@@ -1755,7 +1771,7 @@
     };
 
     // $ANTLR start query
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:364:1: query : query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:1: query : query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) ;
     public final query_return query() throws RecognitionException {
         query_return retval = new query_return();
         retval.start = input.LT(1);
@@ -1783,8 +1799,8 @@
         RewriteRuleSubtreeStream stream_query_id=new RewriteRuleSubtreeStream(adaptor,"rule query_id");
          pushParaphrases(DroolsParaphareseTypes.QUERY); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:2: ( query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:4: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:2: ( query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:4: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
             {
             pushFollow(FOLLOW_query_key_in_query886);
             query_key31=query_key();
@@ -1796,12 +1812,12 @@
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_query_id.add(query_id32.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:23: ( parameters )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:23: ( parameters )?
             int alt12=2;
             alt12 = dfa12.predict(input);
             switch (alt12) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:23: parameters
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:23: parameters
                     {
                     pushFollow(FOLLOW_parameters_in_query890);
                     parameters33=parameters();
@@ -1823,7 +1839,7 @@
             match(input,END,FOLLOW_END_in_query895); if (failed) return retval;
             if ( backtracking==0 ) stream_END.add(END35);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:56: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:56: ( SEMICOLON )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -1832,7 +1848,7 @@
             }
             switch (alt13) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:56: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:383:56: SEMICOLON
                     {
                     SEMICOLON36=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query897); if (failed) return retval;
@@ -1846,7 +1862,7 @@
 
 
             // AST REWRITE
-            // elements: parameters, query_key, normal_lhs_block, query_id, END
+            // elements: normal_lhs_block, query_key, query_id, END, parameters
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1856,15 +1872,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 368:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
+            // 384:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368:6: ^( query_key query_id ( parameters )? normal_lhs_block END )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:384:6: ^( query_key query_id ( parameters )? normal_lhs_block END )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_query_key.nextNode(), root_1);
 
                 adaptor.addChild(root_1, stream_query_id.next());
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368:27: ( parameters )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:384:27: ( parameters )?
                 if ( stream_parameters.hasNext() ) {
                     adaptor.addChild(root_1, stream_parameters.next());
 
@@ -1908,7 +1924,7 @@
     };
 
     // $ANTLR start query_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );
     public final query_id_return query_id() throws RecognitionException {
         query_id_return retval = new query_id_return();
         retval.start = input.LT(1);
@@ -1922,7 +1938,7 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:372:2: (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:388:2: (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] )
             int alt14=2;
             int LA14_0 = input.LA(1);
 
@@ -1935,13 +1951,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("371:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );", 14, 0, input);
+                    new NoViableAltException("387:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );", 14, 0, input);
 
                 throw nvae;
             }
             switch (alt14) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:372:5: id= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:388:5: id= ID
                     {
                     id=(Token)input.LT(1);
                     match(input,ID,FOLLOW_ID_in_query_id929); if (failed) return retval;
@@ -1962,7 +1978,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 373:67: -> VT_QUERY_ID[$id]
+                    // 389:67: -> VT_QUERY_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, id));
 
@@ -1973,7 +1989,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:374:5: id= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:5: id= STRING
                     {
                     id=(Token)input.LT(1);
                     match(input,STRING,FOLLOW_STRING_in_query_id945); if (failed) return retval;
@@ -1994,7 +2010,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 375:67: -> VT_QUERY_ID[$id]
+                    // 391:67: -> VT_QUERY_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, id));
 
@@ -2029,7 +2045,7 @@
     };
 
     // $ANTLR start parameters
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:1: parameters : LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:394:1: parameters : LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) ;
     public final parameters_return parameters() throws RecognitionException {
         parameters_return retval = new parameters_return();
         retval.start = input.LT(1);
@@ -2052,14 +2068,14 @@
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_param_definition=new RewriteRuleSubtreeStream(adaptor,"rule param_definition");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:395:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:395:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
             {
             LEFT_PAREN37=(Token)input.LT(1);
             match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters964); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN37);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:4: ( param_definition ( COMMA param_definition )* )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:4: ( param_definition ( COMMA param_definition )* )?
             int alt16=2;
             int LA16_0 = input.LA(1);
 
@@ -2068,14 +2084,14 @@
             }
             switch (alt16) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:6: param_definition ( COMMA param_definition )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:6: param_definition ( COMMA param_definition )*
                     {
                     pushFollow(FOLLOW_param_definition_in_parameters971);
                     param_definition38=param_definition();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_param_definition.add(param_definition38.getTree());
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:23: ( COMMA param_definition )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:23: ( COMMA param_definition )*
                     loop15:
                     do {
                         int alt15=2;
@@ -2088,7 +2104,7 @@
 
                         switch (alt15) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:24: COMMA param_definition
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:24: COMMA param_definition
                     	    {
                     	    COMMA39=(Token)input.LT(1);
                     	    match(input,COMMA,FOLLOW_COMMA_in_parameters974); if (failed) return retval;
@@ -2130,14 +2146,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 382:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+            // 398:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:6: ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:6: ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PARAM_LIST, "VT_PARAM_LIST"), root_1);
 
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:22: ( param_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:22: ( param_definition )*
                 while ( stream_param_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_param_definition.next());
 
@@ -2177,7 +2193,7 @@
     };
 
     // $ANTLR start param_definition
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:385:1: param_definition : ( data_type )? argument ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:1: param_definition : ( data_type )? argument ;
     public final param_definition_return param_definition() throws RecognitionException {
         param_definition_return retval = new param_definition_return();
         retval.start = input.LT(1);
@@ -2191,17 +2207,17 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:2: ( ( data_type )? argument )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:4: ( data_type )? argument
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:2: ( ( data_type )? argument )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:4: ( data_type )? argument
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:4: ( data_type )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:4: ( data_type )?
             int alt17=2;
             alt17 = dfa17.predict(input);
             switch (alt17) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:4: data_type
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:4: data_type
                     {
                     pushFollow(FOLLOW_data_type_in_param_definition1009);
                     data_type42=data_type();
@@ -2245,7 +2261,7 @@
     };
 
     // $ANTLR start argument
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:389:1: argument : ID ( dimension_definition )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:405:1: argument : ID ( dimension_definition )* ;
     public final argument_return argument() throws RecognitionException {
         argument_return retval = new argument_return();
         retval.start = input.LT(1);
@@ -2259,8 +2275,8 @@
         Object ID44_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:2: ( ID ( dimension_definition )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:4: ID ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:2: ( ID ( dimension_definition )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:4: ID ( dimension_definition )*
             {
             root_0 = (Object)adaptor.nil();
 
@@ -2270,7 +2286,7 @@
             ID44_tree = (Object)adaptor.create(ID44);
             adaptor.addChild(root_0, ID44_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:7: ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:7: ( dimension_definition )*
             loop18:
             do {
                 int alt18=2;
@@ -2283,7 +2299,7 @@
 
                 switch (alt18) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:7: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:7: dimension_definition
             	    {
             	    pushFollow(FOLLOW_dimension_definition_in_argument1025);
             	    dimension_definition45=dimension_definition();
@@ -2325,7 +2341,7 @@
     };
 
     // $ANTLR start type_declaration
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:393:1: type_declaration : declare_key type_declare_id ( decl_metadata )* ( decl_field )* END -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:409:1: type_declaration : declare_key type_declare_id ( decl_metadata )* ( decl_field )* END -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END ) ;
     public final type_declaration_return type_declaration() throws RecognitionException {
         type_declaration_return retval = new type_declaration_return();
         retval.start = input.LT(1);
@@ -2350,8 +2366,8 @@
         RewriteRuleSubtreeStream stream_type_declare_id=new RewriteRuleSubtreeStream(adaptor,"rule type_declare_id");
          pushParaphrases(DroolsParaphareseTypes.TYPE_DECLARE); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:2: ( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:4: declare_key type_declare_id ( decl_metadata )* ( decl_field )* END
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:412:2: ( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:412:4: declare_key type_declare_id ( decl_metadata )* ( decl_field )* END
             {
             pushFollow(FOLLOW_declare_key_in_type_declaration1048);
             declare_key46=declare_key();
@@ -2363,7 +2379,7 @@
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_type_declare_id.add(type_declare_id47.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:397:3: ( decl_metadata )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:3: ( decl_metadata )*
             loop19:
             do {
                 int alt19=2;
@@ -2376,7 +2392,7 @@
 
                 switch (alt19) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:397:3: decl_metadata
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:3: decl_metadata
             	    {
             	    pushFollow(FOLLOW_decl_metadata_in_type_declaration1055);
             	    decl_metadata48=decl_metadata();
@@ -2392,7 +2408,7 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:3: ( decl_field )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:3: ( decl_field )*
             loop20:
             do {
                 int alt20=2;
@@ -2405,7 +2421,7 @@
 
                 switch (alt20) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:3: decl_field
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:3: decl_field
             	    {
             	    pushFollow(FOLLOW_decl_field_in_type_declaration1060);
             	    decl_field49=decl_field();
@@ -2427,7 +2443,7 @@
 
 
             // AST REWRITE
-            // elements: END, declare_key, decl_metadata, type_declare_id, decl_field
+            // elements: decl_metadata, decl_field, END, declare_key, type_declare_id
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2437,21 +2453,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 400:3: -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END )
+            // 416:3: -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:400:6: ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:6: ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_declare_key.nextNode(), root_1);
 
                 adaptor.addChild(root_1, stream_type_declare_id.next());
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:400:36: ( decl_metadata )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:36: ( decl_metadata )*
                 while ( stream_decl_metadata.hasNext() ) {
                     adaptor.addChild(root_1, stream_decl_metadata.next());
 
                 }
                 stream_decl_metadata.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:400:51: ( decl_field )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:51: ( decl_field )*
                 while ( stream_decl_field.hasNext() ) {
                     adaptor.addChild(root_1, stream_decl_field.next());
 
@@ -2494,7 +2510,7 @@
     };
 
     // $ANTLR start type_declare_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:403:1: type_declare_id : id= ID -> VT_TYPE_DECLARE_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:419:1: type_declare_id : id= ID -> VT_TYPE_DECLARE_ID[$id] ;
     public final type_declare_id_return type_declare_id() throws RecognitionException {
         type_declare_id_return retval = new type_declare_id_return();
         retval.start = input.LT(1);
@@ -2507,8 +2523,8 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:404:2: (id= ID -> VT_TYPE_DECLARE_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:404:5: id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:420:2: (id= ID -> VT_TYPE_DECLARE_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:420:5: id= ID
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_type_declare_id1097); if (failed) return retval;
@@ -2529,7 +2545,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 405:74: -> VT_TYPE_DECLARE_ID[$id]
+            // 421:74: -> VT_TYPE_DECLARE_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_TYPE_DECLARE_ID, id));
 
@@ -2562,7 +2578,7 @@
     };
 
     // $ANTLR start decl_metadata
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:408:1: decl_metadata : AT ID paren_chunk -> ^( AT ID paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:424:1: decl_metadata : AT ID paren_chunk -> ^( AT ID paren_chunk ) ;
     public final decl_metadata_return decl_metadata() throws RecognitionException {
         decl_metadata_return retval = new decl_metadata_return();
         retval.start = input.LT(1);
@@ -2580,8 +2596,8 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:409:2: ( AT ID paren_chunk -> ^( AT ID paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:409:4: AT ID paren_chunk
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:425:2: ( AT ID paren_chunk -> ^( AT ID paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:425:4: AT ID paren_chunk
             {
             AT51=(Token)input.LT(1);
             match(input,AT,FOLLOW_AT_in_decl_metadata1116); if (failed) return retval;
@@ -2598,7 +2614,7 @@
             if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk53.getTree());
 
             // AST REWRITE
-            // elements: paren_chunk, ID, AT
+            // elements: ID, AT, paren_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2608,9 +2624,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 410:3: -> ^( AT ID paren_chunk )
+            // 426:3: -> ^( AT ID paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:410:6: ^( AT ID paren_chunk )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:426:6: ^( AT ID paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_AT.next(), root_1);
@@ -2650,7 +2666,7 @@
     };
 
     // $ANTLR start decl_field
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:1: decl_field : ID ( decl_field_initialization )? COLON data_type ( decl_metadata )* -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:1: decl_field : ID ( decl_field_initialization )? COLON data_type ( decl_metadata )* -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) ;
     public final decl_field_return decl_field() throws RecognitionException {
         decl_field_return retval = new decl_field_return();
         retval.start = input.LT(1);
@@ -2674,14 +2690,14 @@
         RewriteRuleSubtreeStream stream_decl_field_initialization=new RewriteRuleSubtreeStream(adaptor,"rule decl_field_initialization");
         RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:2: ( ID ( decl_field_initialization )? COLON data_type ( decl_metadata )* -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:4: ID ( decl_field_initialization )? COLON data_type ( decl_metadata )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:430:2: ( ID ( decl_field_initialization )? COLON data_type ( decl_metadata )* -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:430:4: ID ( decl_field_initialization )? COLON data_type ( decl_metadata )*
             {
             ID54=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_decl_field1143); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID54);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:7: ( decl_field_initialization )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:430:7: ( decl_field_initialization )?
             int alt21=2;
             int LA21_0 = input.LA(1);
 
@@ -2690,7 +2706,7 @@
             }
             switch (alt21) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:7: decl_field_initialization
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:430:7: decl_field_initialization
                     {
                     pushFollow(FOLLOW_decl_field_initialization_in_decl_field1145);
                     decl_field_initialization55=decl_field_initialization();
@@ -2712,7 +2728,7 @@
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_data_type.add(data_type57.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:415:3: ( decl_metadata )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:431:3: ( decl_metadata )*
             loop22:
             do {
                 int alt22=2;
@@ -2725,7 +2741,7 @@
 
                 switch (alt22) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:415:3: decl_metadata
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:431:3: decl_metadata
             	    {
             	    pushFollow(FOLLOW_decl_metadata_in_decl_field1154);
             	    decl_metadata58=decl_metadata();
@@ -2743,7 +2759,7 @@
 
 
             // AST REWRITE
-            // elements: decl_metadata, decl_field_initialization, ID, data_type
+            // elements: decl_field_initialization, data_type, ID, decl_metadata
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2753,21 +2769,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 416:3: -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
+            // 432:3: -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:6: ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:432:6: ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_ID.next(), root_1);
 
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:11: ( decl_field_initialization )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:432:11: ( decl_field_initialization )?
                 if ( stream_decl_field_initialization.hasNext() ) {
                     adaptor.addChild(root_1, stream_decl_field_initialization.next());
 
                 }
                 stream_decl_field_initialization.reset();
                 adaptor.addChild(root_1, stream_data_type.next());
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:48: ( decl_metadata )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:432:48: ( decl_metadata )*
                 while ( stream_decl_metadata.hasNext() ) {
                     adaptor.addChild(root_1, stream_decl_metadata.next());
 
@@ -2806,7 +2822,7 @@
     };
 
     // $ANTLR start decl_field_initialization
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:419:1: decl_field_initialization : EQUALS paren_chunk -> ^( EQUALS paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:435:1: decl_field_initialization : EQUALS paren_chunk -> ^( EQUALS paren_chunk ) ;
     public final decl_field_initialization_return decl_field_initialization() throws RecognitionException {
         decl_field_initialization_return retval = new decl_field_initialization_return();
         retval.start = input.LT(1);
@@ -2821,8 +2837,8 @@
         RewriteRuleTokenStream stream_EQUALS=new RewriteRuleTokenStream(adaptor,"token EQUALS");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:420:2: ( EQUALS paren_chunk -> ^( EQUALS paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:420:4: EQUALS paren_chunk
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:2: ( EQUALS paren_chunk -> ^( EQUALS paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:4: EQUALS paren_chunk
             {
             EQUALS59=(Token)input.LT(1);
             match(input,EQUALS,FOLLOW_EQUALS_in_decl_field_initialization1182); if (failed) return retval;
@@ -2845,9 +2861,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 421:2: -> ^( EQUALS paren_chunk )
+            // 437:2: -> ^( EQUALS paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:5: ^( EQUALS paren_chunk )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:437:5: ^( EQUALS paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_EQUALS.next(), root_1);
@@ -2886,7 +2902,7 @@
     };
 
     // $ANTLR start template
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:424:1: template : template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:1: template : template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) ;
     public final template_return template() throws RecognitionException {
         template_return retval = new template_return();
         retval.start = input.LT(1);
@@ -2913,8 +2929,8 @@
         RewriteRuleSubtreeStream stream_template_key=new RewriteRuleSubtreeStream(adaptor,"rule template_key");
          pushParaphrases(DroolsParaphareseTypes.TEMPLATE); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:2: ( template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:4: template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:443:2: ( template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:443:4: template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )?
             {
             pushFollow(FOLLOW_template_key_in_template1215);
             template_key61=template_key();
@@ -2926,7 +2942,7 @@
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_template_id.add(template_id62.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:29: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:443:29: ( SEMICOLON )?
             int alt23=2;
             int LA23_0 = input.LA(1);
 
@@ -2935,7 +2951,7 @@
             }
             switch (alt23) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:29: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:443:29: SEMICOLON
                     {
                     SEMICOLON63=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1219); if (failed) return retval;
@@ -2947,7 +2963,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:428:3: ( template_slot )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:3: ( template_slot )+
             int cnt24=0;
             loop24:
             do {
@@ -2961,7 +2977,7 @@
 
                 switch (alt24) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:428:3: template_slot
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:3: template_slot
             	    {
             	    pushFollow(FOLLOW_template_slot_in_template1224);
             	    template_slot64=template_slot();
@@ -2986,7 +3002,7 @@
             match(input,END,FOLLOW_END_in_template1229); if (failed) return retval;
             if ( backtracking==0 ) stream_END.add(END65);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:7: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:7: ( SEMICOLON )?
             int alt25=2;
             int LA25_0 = input.LA(1);
 
@@ -2995,7 +3011,7 @@
             }
             switch (alt25) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:7: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:7: SEMICOLON
                     {
                     SEMICOLON66=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1231); if (failed) return retval;
@@ -3009,7 +3025,7 @@
 
 
             // AST REWRITE
-            // elements: END, template_id, template_key, template_slot
+            // elements: template_slot, template_id, END, template_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3019,9 +3035,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 430:3: -> ^( template_key template_id ( template_slot )+ END )
+            // 446:3: -> ^( template_key template_id ( template_slot )+ END )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:430:6: ^( template_key template_id ( template_slot )+ END )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:446:6: ^( template_key template_id ( template_slot )+ END )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_template_key.nextNode(), root_1);
@@ -3072,7 +3088,7 @@
     };
 
     // $ANTLR start template_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:433:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:449:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );
     public final template_id_return template_id() throws RecognitionException {
         template_id_return retval = new template_id_return();
         retval.start = input.LT(1);
@@ -3086,7 +3102,7 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:2: (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:450:2: (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] )
             int alt26=2;
             int LA26_0 = input.LA(1);
 
@@ -3099,13 +3115,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("433:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );", 26, 0, input);
+                    new NoViableAltException("449:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );", 26, 0, input);
 
                 throw nvae;
             }
             switch (alt26) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:5: id= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:450:5: id= ID
                     {
                     id=(Token)input.LT(1);
                     match(input,ID,FOLLOW_ID_in_template_id1261); if (failed) return retval;
@@ -3126,7 +3142,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 435:70: -> VT_TEMPLATE_ID[$id]
+                    // 451:70: -> VT_TEMPLATE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, id));
 
@@ -3137,7 +3153,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:5: id= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:5: id= STRING
                     {
                     id=(Token)input.LT(1);
                     match(input,STRING,FOLLOW_STRING_in_template_id1277); if (failed) return retval;
@@ -3158,7 +3174,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 437:70: -> VT_TEMPLATE_ID[$id]
+                    // 453:70: -> VT_TEMPLATE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, id));
 
@@ -3193,7 +3209,7 @@
     };
 
     // $ANTLR start template_slot
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:1: template_slot : data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:1: template_slot : data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) ;
     public final template_slot_return template_slot() throws RecognitionException {
         template_slot_return retval = new template_slot_return();
         retval.start = input.LT(1);
@@ -3211,8 +3227,8 @@
         RewriteRuleSubtreeStream stream_slot_id=new RewriteRuleSubtreeStream(adaptor,"rule slot_id");
         RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:5: data_type slot_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:5: data_type slot_id ( SEMICOLON )?
             {
             pushFollow(FOLLOW_data_type_in_template_slot1297);
             data_type67=data_type();
@@ -3224,7 +3240,7 @@
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_slot_id.add(slot_id68.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:23: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:23: ( SEMICOLON )?
             int alt27=2;
             int LA27_0 = input.LA(1);
 
@@ -3233,7 +3249,7 @@
             }
             switch (alt27) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:23: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:23: SEMICOLON
                     {
                     SEMICOLON69=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot1301); if (failed) return retval;
@@ -3247,7 +3263,7 @@
 
 
             // AST REWRITE
-            // elements: slot_id, data_type
+            // elements: data_type, slot_id
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3257,9 +3273,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 442:3: -> ^( VT_SLOT data_type slot_id )
+            // 458:3: -> ^( VT_SLOT data_type slot_id )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:442:6: ^( VT_SLOT data_type slot_id )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:458:6: ^( VT_SLOT data_type slot_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_SLOT, "VT_SLOT"), root_1);
@@ -3299,7 +3315,7 @@
     };
 
     // $ANTLR start slot_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:1: slot_id : id= ID -> VT_SLOT_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:1: slot_id : id= ID -> VT_SLOT_ID[$id] ;
     public final slot_id_return slot_id() throws RecognitionException {
         slot_id_return retval = new slot_id_return();
         retval.start = input.LT(1);
@@ -3312,8 +3328,8 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:9: (id= ID -> VT_SLOT_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:11: id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:9: (id= ID -> VT_SLOT_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:11: id= ID
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_slot_id1326); if (failed) return retval;
@@ -3331,7 +3347,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 446:3: -> VT_SLOT_ID[$id]
+            // 462:3: -> VT_SLOT_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SLOT_ID, id));
 
@@ -3364,7 +3380,7 @@
     };
 
     // $ANTLR start rule
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:449:1: rule : rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:465:1: rule : rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) ;
     public final rule_return rule() throws RecognitionException {
         rule_return retval = new rule_return();
         retval.start = input.LT(1);
@@ -3389,8 +3405,8 @@
         RewriteRuleSubtreeStream stream_rhs_chunk=new RewriteRuleSubtreeStream(adaptor,"rule rhs_chunk");
          pushParaphrases(DroolsParaphareseTypes.RULE); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:2: ( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:4: rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:2: ( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:4: rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk
             {
             pushFollow(FOLLOW_rule_key_in_rule1355);
             rule_key70=rule_key();
@@ -3402,12 +3418,12 @@
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_rule_id.add(rule_id71.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:21: ( rule_attributes )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:21: ( rule_attributes )?
             int alt28=2;
             alt28 = dfa28.predict(input);
             switch (alt28) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:21: rule_attributes
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:21: rule_attributes
                     {
                     pushFollow(FOLLOW_rule_attributes_in_rule1359);
                     rule_attributes72=rule_attributes();
@@ -3420,16 +3436,16 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:38: ( when_part )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:38: ( when_part )?
             int alt29=2;
             int LA29_0 = input.LA(1);
 
-            if ( (LA29_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {
+            if ( (LA29_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {
                 alt29=1;
             }
             switch (alt29) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:38: when_part
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:38: when_part
                     {
                     pushFollow(FOLLOW_when_part_in_rule1362);
                     when_part73=when_part();
@@ -3449,7 +3465,7 @@
             if ( backtracking==0 ) stream_rhs_chunk.add(rhs_chunk74.getTree());
 
             // AST REWRITE
-            // elements: rule_attributes, rhs_chunk, rule_key, when_part, rule_id
+            // elements: rule_key, rule_attributes, when_part, rhs_chunk, rule_id
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3459,21 +3475,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 453:3: -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+            // 469:3: -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:453:6: ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:6: ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_rule_key.nextNode(), root_1);
 
                 adaptor.addChild(root_1, stream_rule_id.next());
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:453:25: ( rule_attributes )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:25: ( rule_attributes )?
                 if ( stream_rule_attributes.hasNext() ) {
                     adaptor.addChild(root_1, stream_rule_attributes.next());
 
                 }
                 stream_rule_attributes.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:453:42: ( when_part )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:42: ( when_part )?
                 if ( stream_when_part.hasNext() ) {
                     adaptor.addChild(root_1, stream_when_part.next());
 
@@ -3516,7 +3532,7 @@
     };
 
     // $ANTLR start when_part
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:1: when_part : when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:1: when_part : ({...}? => when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block | when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block );
     public final when_part_return when_part() throws RecognitionException {
         when_part_return retval = new when_part_return();
         retval.start = input.LT(1);
@@ -3524,73 +3540,171 @@
         Object root_0 = null;
 
         Token COLON76=null;
+        Token COLON79=null;
         when_key_return when_key75 = null;
 
         normal_lhs_block_return normal_lhs_block77 = null;
 
+        when_key_return when_key78 = null;
 
+        normal_lhs_block_return normal_lhs_block80 = null;
+
+
         Object COLON76_tree=null;
+        Object COLON79_tree=null;
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleSubtreeStream stream_normal_lhs_block=new RewriteRuleSubtreeStream(adaptor,"rule normal_lhs_block");
         RewriteRuleSubtreeStream stream_when_key=new RewriteRuleSubtreeStream(adaptor,"rule when_key");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:2: ( when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:4: when_key ( COLON )? normal_lhs_block
-            {
-            pushFollow(FOLLOW_when_key_in_when_part1394);
-            when_key75=when_key();
-            _fsp--;
-            if (failed) return retval;
-            if ( backtracking==0 ) stream_when_key.add(when_key75.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:13: ( COLON )?
-            int alt30=2;
-            int LA30_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:2: ({...}? => when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block | when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block )
+            int alt32=2;
+            int LA32_0 = input.LA(1);
 
-            if ( (LA30_0==COLON) ) {
-                alt30=1;
+            if ( (LA32_0==ID) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validat!
 eIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoft!
 Keywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierK
ey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIden!
 tifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(vali!
 dateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenth
esis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWith!
 Parenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validate!
 WhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)
))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeyword!
 s.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSof!
 tKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifier
Key(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIde!
 ntifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {
+                int LA32_1 = input.LA(2);
+
+                if ( ((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))) ) {
+                    alt32=1;
+                }
+                else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {
+                    alt32=2;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("472:1: when_part : ({...}? => when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block | when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block );", 32, 1, input);
+
+                    throw nvae;
+                }
             }
-            switch (alt30) {
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("472:1: when_part : ({...}? => when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block | when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block );", 32, 0, input);
+
+                throw nvae;
+            }
+            switch (alt32) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:13: COLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:4: {...}? => when_key ( COLON )? normal_lhs_block
                     {
-                    COLON76=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_when_part1396); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COLON.add(COLON76);
+                    if ( !(validateWhenWithParenthesis()) ) {
+                        if (backtracking>0) {failed=true; return retval;}
+                        throw new FailedPredicateException(input, "when_part", "validateWhenWithParenthesis()");
+                    }
+                    pushFollow(FOLLOW_when_key_in_when_part1397);
+                    when_key75=when_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_when_key.add(when_key75.getTree());
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:48: ( COLON )?
+                    int alt30=2;
+                    int LA30_0 = input.LA(1);
 
+                    if ( (LA30_0==COLON) ) {
+                        alt30=1;
+                    }
+                    switch (alt30) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:48: COLON
+                            {
+                            COLON76=(Token)input.LT(1);
+                            match(input,COLON,FOLLOW_COLON_in_when_part1399); if (failed) return retval;
+                            if ( backtracking==0 ) stream_COLON.add(COLON76);
 
+
+                            }
+                            break;
+
                     }
+
+                    pushFollow(FOLLOW_normal_lhs_block_in_when_part1402);
+                    normal_lhs_block77=normal_lhs_block();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block77.getTree());
+
+                    // AST REWRITE
+                    // elements: normal_lhs_block, when_key
+                    // token labels: 
+                    // rule labels: retval
+                    // token list labels: 
+                    // rule list labels: 
+                    if ( backtracking==0 ) {
+                    retval.tree = root_0;
+                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+                    root_0 = (Object)adaptor.nil();
+                    // 474:2: -> when_key normal_lhs_block
+                    {
+                        adaptor.addChild(root_0, stream_when_key.next());
+                        adaptor.addChild(root_0, stream_normal_lhs_block.next());
+
+                    }
+
+                    }
+
+                    }
                     break;
+                case 2 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:4: when_key ( COLON )? normal_lhs_block
+                    {
+                    pushFollow(FOLLOW_when_key_in_when_part1414);
+                    when_key78=when_key();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_when_key.add(when_key78.getTree());
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:13: ( COLON )?
+                    int alt31=2;
+                    int LA31_0 = input.LA(1);
 
-            }
+                    if ( (LA31_0==COLON) ) {
+                        alt31=1;
+                    }
+                    switch (alt31) {
+                        case 1 :
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:13: COLON
+                            {
+                            COLON79=(Token)input.LT(1);
+                            match(input,COLON,FOLLOW_COLON_in_when_part1416); if (failed) return retval;
+                            if ( backtracking==0 ) stream_COLON.add(COLON79);
 
-            pushFollow(FOLLOW_normal_lhs_block_in_when_part1399);
-            normal_lhs_block77=normal_lhs_block();
-            _fsp--;
-            if (failed) return retval;
-            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block77.getTree());
 
-            // AST REWRITE
-            // elements: normal_lhs_block, when_key
-            // token labels: 
-            // rule labels: retval
-            // token list labels: 
-            // rule list labels: 
-            if ( backtracking==0 ) {
-            retval.tree = root_0;
-            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+                            }
+                            break;
 
-            root_0 = (Object)adaptor.nil();
-            // 458:2: -> when_key normal_lhs_block
-            {
-                adaptor.addChild(root_0, stream_when_key.next());
-                adaptor.addChild(root_0, stream_normal_lhs_block.next());
+                    }
 
-            }
+                    pushFollow(FOLLOW_normal_lhs_block_in_when_part1419);
+                    normal_lhs_block80=normal_lhs_block();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block80.getTree());
 
-            }
+                    // AST REWRITE
+                    // elements: when_key, normal_lhs_block
+                    // token labels: 
+                    // rule labels: retval
+                    // token list labels: 
+                    // rule list labels: 
+                    if ( backtracking==0 ) {
+                    retval.tree = root_0;
+                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
+                    root_0 = (Object)adaptor.nil();
+                    // 476:2: -> when_key normal_lhs_block
+                    {
+                        adaptor.addChild(root_0, stream_when_key.next());
+                        adaptor.addChild(root_0, stream_normal_lhs_block.next());
+
+                    }
+
+                    }
+
+                    }
+                    break;
+
             }
-
             retval.stop = input.LT(-1);
 
             if ( backtracking==0 ) {
@@ -3614,7 +3728,7 @@
     };
 
     // $ANTLR start rule_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );
     public final rule_id_return rule_id() throws RecognitionException {
         rule_id_return retval = new rule_id_return();
         retval.start = input.LT(1);
@@ -3628,29 +3742,29 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:462:2: (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] )
-            int alt31=2;
-            int LA31_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:480:2: (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] )
+            int alt33=2;
+            int LA33_0 = input.LA(1);
 
-            if ( (LA31_0==ID) ) {
-                alt31=1;
+            if ( (LA33_0==ID) ) {
+                alt33=1;
             }
-            else if ( (LA31_0==STRING) ) {
-                alt31=2;
+            else if ( (LA33_0==STRING) ) {
+                alt33=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("461:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );", 31, 0, input);
+                    new NoViableAltException("479:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );", 33, 0, input);
 
                 throw nvae;
             }
-            switch (alt31) {
+            switch (alt33) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:462:5: id= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:480:5: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_rule_id1420); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_rule_id1440); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(id);
 
                     if ( backtracking==0 ) {
@@ -3668,7 +3782,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 463:66: -> VT_RULE_ID[$id]
+                    // 481:66: -> VT_RULE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, id));
 
@@ -3679,10 +3793,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:5: id= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:5: id= STRING
                     {
                     id=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_id1436); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_rule_id1456); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(id);
 
                     if ( backtracking==0 ) {
@@ -3700,7 +3814,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 465:66: -> VT_RULE_ID[$id]
+                    // 483:66: -> VT_RULE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, id));
 
@@ -3735,55 +3849,55 @@
     };
 
     // $ANTLR start rule_attributes
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:1: rule_attributes : ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:1: rule_attributes : ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) ;
     public final rule_attributes_return rule_attributes() throws RecognitionException {
         rule_attributes_return retval = new rule_attributes_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COLON79=null;
-        Token COMMA81=null;
+        Token COLON82=null;
+        Token COMMA84=null;
         rule_attribute_return attr = null;
 
-        attributes_key_return attributes_key78 = null;
+        attributes_key_return attributes_key81 = null;
 
-        rule_attribute_return rule_attribute80 = null;
+        rule_attribute_return rule_attribute83 = null;
 
 
-        Object COLON79_tree=null;
-        Object COMMA81_tree=null;
+        Object COLON82_tree=null;
+        Object COMMA84_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleSubtreeStream stream_attributes_key=new RewriteRuleSubtreeStream(adaptor,"rule attributes_key");
         RewriteRuleSubtreeStream stream_rule_attribute=new RewriteRuleSubtreeStream(adaptor,"rule rule_attribute");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
             {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:4: ( attributes_key COLON )?
-            int alt32=2;
-            int LA32_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:4: ( attributes_key COLON )?
+            int alt34=2;
+            int LA34_0 = input.LA(1);
 
-            if ( (LA32_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(Drool!
 sSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
-                int LA32_1 = input.LA(2);
+            if ( (LA34_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(Drool!
 sSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
+                int LA34_1 = input.LA(2);
 
-                if ( (LA32_1==COLON) && ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES)))) {
-                    alt32=1;
+                if ( (LA34_1==COLON) && ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES)))) {
+                    alt34=1;
                 }
             }
-            switch (alt32) {
+            switch (alt34) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:6: attributes_key COLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:6: attributes_key COLON
                     {
-                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1457);
-                    attributes_key78=attributes_key();
+                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1477);
+                    attributes_key81=attributes_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_attributes_key.add(attributes_key78.getTree());
-                    COLON79=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1459); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COLON.add(COLON79);
+                    if ( backtracking==0 ) stream_attributes_key.add(attributes_key81.getTree());
+                    COLON82=(Token)input.LT(1);
+                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1479); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COLON.add(COLON82);
 
 
                     }
@@ -3791,34 +3905,34 @@
 
             }
 
-            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1464);
-            rule_attribute80=rule_attribute();
+            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1484);
+            rule_attribute83=rule_attribute();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_rule_attribute.add(rule_attribute80.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:45: ( ( COMMA )? attr= rule_attribute )*
-            loop34:
+            if ( backtracking==0 ) stream_rule_attribute.add(rule_attribute83.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:45: ( ( COMMA )? attr= rule_attribute )*
+            loop36:
             do {
-                int alt34=2;
-                alt34 = dfa34.predict(input);
-                switch (alt34) {
+                int alt36=2;
+                alt36 = dfa36.predict(input);
+                switch (alt36) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:47: ( COMMA )? attr= rule_attribute
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:47: ( COMMA )? attr= rule_attribute
             	    {
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:47: ( COMMA )?
-            	    int alt33=2;
-            	    int LA33_0 = input.LA(1);
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:47: ( COMMA )?
+            	    int alt35=2;
+            	    int LA35_0 = input.LA(1);
 
-            	    if ( (LA33_0==COMMA) ) {
-            	        alt33=1;
+            	    if ( (LA35_0==COMMA) ) {
+            	        alt35=1;
             	    }
-            	    switch (alt33) {
+            	    switch (alt35) {
             	        case 1 :
-            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:47: COMMA
+            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:47: COMMA
             	            {
-            	            COMMA81=(Token)input.LT(1);
-            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1468); if (failed) return retval;
-            	            if ( backtracking==0 ) stream_COMMA.add(COMMA81);
+            	            COMMA84=(Token)input.LT(1);
+            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1488); if (failed) return retval;
+            	            if ( backtracking==0 ) stream_COMMA.add(COMMA84);
 
 
             	            }
@@ -3826,7 +3940,7 @@
 
             	    }
 
-            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1473);
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1493);
             	    attr=rule_attribute();
             	    _fsp--;
             	    if (failed) return retval;
@@ -3836,13 +3950,13 @@
             	    break;
 
             	default :
-            	    break loop34;
+            	    break loop36;
                 }
             } while (true);
 
 
             // AST REWRITE
-            // elements: attributes_key, rule_attribute
+            // elements: rule_attribute, attributes_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3852,14 +3966,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 470:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+            // 488:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:470:6: ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:488:6: ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_RULE_ATTRIBUTES, "VT_RULE_ATTRIBUTES"), root_1);
 
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:470:27: ( attributes_key )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:488:27: ( attributes_key )?
                 if ( stream_attributes_key.hasNext() ) {
                     adaptor.addChild(root_1, stream_attributes_key.next());
 
@@ -3906,93 +4020,93 @@
     };
 
     // $ANTLR start rule_attribute
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:491:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );
     public final rule_attribute_return rule_attribute() throws RecognitionException {
         rule_attribute_return retval = new rule_attribute_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        salience_return salience82 = null;
+        salience_return salience85 = null;
 
-        no_loop_return no_loop83 = null;
+        no_loop_return no_loop86 = null;
 
-        agenda_group_return agenda_group84 = null;
+        agenda_group_return agenda_group87 = null;
 
-        duration_return duration85 = null;
+        duration_return duration88 = null;
 
-        activation_group_return activation_group86 = null;
+        activation_group_return activation_group89 = null;
 
-        auto_focus_return auto_focus87 = null;
+        auto_focus_return auto_focus90 = null;
 
-        date_effective_return date_effective88 = null;
+        date_effective_return date_effective91 = null;
 
-        date_expires_return date_expires89 = null;
+        date_expires_return date_expires92 = null;
 
-        enabled_return enabled90 = null;
+        enabled_return enabled93 = null;
 
-        ruleflow_group_return ruleflow_group91 = null;
+        ruleflow_group_return ruleflow_group94 = null;
 
-        lock_on_active_return lock_on_active92 = null;
+        lock_on_active_return lock_on_active95 = null;
 
-        dialect_return dialect93 = null;
+        dialect_return dialect96 = null;
 
 
 
          pushParaphrases(DroolsParaphareseTypes.RULE_ATTRIBUTE); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:2: ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect )
-            int alt35=12;
-            int LA35_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:2: ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect )
+            int alt37=12;
+            int LA37_0 = input.LA(1);
 
-            if ( (LA35_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(Drools!
 SoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
-                int LA35_1 = input.LA(2);
+            if ( (LA37_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(Drools!
 SoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                int LA37_1 = input.LA(2);
 
-                if ( (LA35_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-"!
 ) && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
-                    int LA35_2 = input.LA(3);
+                if ( (LA37_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-"!
 ) && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                    int LA37_2 = input.LA(3);
 
-                    if ( (LA35_2==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "!
 -") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
-                        int LA35_7 = input.LA(4);
+                    if ( (LA37_2==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "!
 -") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                        int LA37_7 = input.LA(4);
 
-                        if ( (LA35_7==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE)))) {
-                            alt35=11;
+                        if ( (LA37_7==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE)))) {
+                            alt37=11;
                         }
-                        else if ( (LA35_7==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
-                            int LA35_10 = input.LA(5);
+                        else if ( (LA37_7==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                            int LA37_10 = input.LA(5);
 
                             if ( ((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
-                                alt35=3;
+                                alt37=3;
                             }
                             else if ( ((validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
-                                alt35=5;
+                                alt37=5;
                             }
                             else if ( ((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))) ) {
-                                alt35=7;
+                                alt37=7;
                             }
                             else if ( ((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))) ) {
-                                alt35=8;
+                                alt37=8;
                             }
                             else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
-                                alt35=10;
+                                alt37=10;
                             }
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("473:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 10, input);
+                                    new NoViableAltException("491:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 37, 10, input);
 
                                 throw nvae;
                             }
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))) ) {
-                            alt35=2;
+                            alt37=2;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))) ) {
-                            alt35=6;
+                            alt37=6;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("473:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 7, input);
+                                new NoViableAltException("491:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 37, 7, input);
 
                             throw nvae;
                         }
@@ -4000,41 +4114,41 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("473:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 2, input);
+                            new NoViableAltException("491:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 37, 2, input);
 
                         throw nvae;
                     }
                 }
-                else if ( (LA35_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {
-                    alt35=12;
-                }
-                else if ( (LA35_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
-                    int LA35_4 = input.LA(3);
+                else if ( (LA37_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
+                    int LA37_3 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {
-                        alt35=1;
+                        alt37=1;
                     }
                     else if ( ((validateIdentifierKey(DroolsSoftKeywords.DURATION))) ) {
-                        alt35=4;
+                        alt37=4;
                     }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("473:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 4, input);
+                            new NoViableAltException("491:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 37, 3, input);
 
                         throw nvae;
                     }
                 }
-                else if ( (LA35_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {
-                    alt35=9;
+                else if ( (LA37_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
+                    alt37=1;
                 }
-                else if ( (LA35_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
-                    alt35=1;
+                else if ( (LA37_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {
+                    alt37=9;
                 }
+                else if ( (LA37_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {
+                    alt37=12;
+                }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("473:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 1, input);
+                        new NoViableAltException("491:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 37, 1, input);
 
                     throw nvae;
                 }
@@ -4042,164 +4156,164 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("473:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 0, input);
+                    new NoViableAltException("491:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 37, 0, input);
 
                 throw nvae;
             }
-            switch (alt35) {
+            switch (alt37) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:4: salience
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:4: salience
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_salience_in_rule_attribute1512);
-                    salience82=salience();
+                    pushFollow(FOLLOW_salience_in_rule_attribute1532);
+                    salience85=salience();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, salience82.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, salience85.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:477:4: no_loop
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:4: no_loop
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_no_loop_in_rule_attribute1518);
-                    no_loop83=no_loop();
+                    pushFollow(FOLLOW_no_loop_in_rule_attribute1538);
+                    no_loop86=no_loop();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, no_loop83.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, no_loop86.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:478:4: agenda_group
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:4: agenda_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1525);
-                    agenda_group84=agenda_group();
+                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1545);
+                    agenda_group87=agenda_group();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, agenda_group84.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, agenda_group87.getTree());
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:4: duration
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:497:4: duration
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_duration_in_rule_attribute1532);
-                    duration85=duration();
+                    pushFollow(FOLLOW_duration_in_rule_attribute1552);
+                    duration88=duration();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, duration85.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, duration88.getTree());
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:480:4: activation_group
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:498:4: activation_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_activation_group_in_rule_attribute1539);
-                    activation_group86=activation_group();
+                    pushFollow(FOLLOW_activation_group_in_rule_attribute1559);
+                    activation_group89=activation_group();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, activation_group86.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, activation_group89.getTree());
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:481:4: auto_focus
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:499:4: auto_focus
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1545);
-                    auto_focus87=auto_focus();
+                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1565);
+                    auto_focus90=auto_focus();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, auto_focus87.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, auto_focus90.getTree());
 
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:4: date_effective
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:500:4: date_effective
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_date_effective_in_rule_attribute1551);
-                    date_effective88=date_effective();
+                    pushFollow(FOLLOW_date_effective_in_rule_attribute1571);
+                    date_effective91=date_effective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, date_effective88.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, date_effective91.getTree());
 
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:4: date_expires
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:4: date_expires
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_date_expires_in_rule_attribute1557);
-                    date_expires89=date_expires();
+                    pushFollow(FOLLOW_date_expires_in_rule_attribute1577);
+                    date_expires92=date_expires();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, date_expires89.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, date_expires92.getTree());
 
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:4: enabled
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:4: enabled
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_enabled_in_rule_attribute1563);
-                    enabled90=enabled();
+                    pushFollow(FOLLOW_enabled_in_rule_attribute1583);
+                    enabled93=enabled();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, enabled90.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, enabled93.getTree());
 
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:4: ruleflow_group
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:4: ruleflow_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1569);
-                    ruleflow_group91=ruleflow_group();
+                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1589);
+                    ruleflow_group94=ruleflow_group();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, ruleflow_group91.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, ruleflow_group94.getTree());
 
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:4: lock_on_active
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:4: lock_on_active
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1575);
-                    lock_on_active92=lock_on_active();
+                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1595);
+                    lock_on_active95=lock_on_active();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lock_on_active92.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lock_on_active95.getTree());
 
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:4: dialect
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:505:4: dialect
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_dialect_in_rule_attribute1580);
-                    dialect93=dialect();
+                    pushFollow(FOLLOW_dialect_in_rule_attribute1600);
+                    dialect96=dialect();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, dialect93.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, dialect96.getTree());
 
                     }
                     break;
@@ -4231,35 +4345,35 @@
     };
 
     // $ANTLR start date_effective
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:490:1: date_effective : date_effective_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:1: date_effective : date_effective_key STRING ;
     public final date_effective_return date_effective() throws RecognitionException {
         date_effective_return retval = new date_effective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING95=null;
-        date_effective_key_return date_effective_key94 = null;
+        Token STRING98=null;
+        date_effective_key_return date_effective_key97 = null;
 
 
-        Object STRING95_tree=null;
+        Object STRING98_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:491:2: ( date_effective_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:491:4: date_effective_key STRING
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:2: ( date_effective_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:4: date_effective_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_date_effective_key_in_date_effective1592);
-            date_effective_key94=date_effective_key();
+            pushFollow(FOLLOW_date_effective_key_in_date_effective1612);
+            date_effective_key97=date_effective_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_effective_key94.getTree(), root_0);
-            STRING95=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_effective1595); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_effective_key97.getTree(), root_0);
+            STRING98=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_date_effective1615); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING95_tree = (Object)adaptor.create(STRING95);
-            adaptor.addChild(root_0, STRING95_tree);
+            STRING98_tree = (Object)adaptor.create(STRING98);
+            adaptor.addChild(root_0, STRING98_tree);
             }
 
             }
@@ -4287,35 +4401,35 @@
     };
 
     // $ANTLR start date_expires
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:1: date_expires : date_expires_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:512:1: date_expires : date_expires_key STRING ;
     public final date_expires_return date_expires() throws RecognitionException {
         date_expires_return retval = new date_expires_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING97=null;
-        date_expires_key_return date_expires_key96 = null;
+        Token STRING100=null;
+        date_expires_key_return date_expires_key99 = null;
 
 
-        Object STRING97_tree=null;
+        Object STRING100_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:2: ( date_expires_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:4: date_expires_key STRING
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:2: ( date_expires_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:4: date_expires_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_date_expires_key_in_date_expires1606);
-            date_expires_key96=date_expires_key();
+            pushFollow(FOLLOW_date_expires_key_in_date_expires1626);
+            date_expires_key99=date_expires_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_expires_key96.getTree(), root_0);
-            STRING97=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_expires1609); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_expires_key99.getTree(), root_0);
+            STRING100=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_date_expires1629); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING97_tree = (Object)adaptor.create(STRING97);
-            adaptor.addChild(root_0, STRING97_tree);
+            STRING100_tree = (Object)adaptor.create(STRING100);
+            adaptor.addChild(root_0, STRING100_tree);
             }
 
             }
@@ -4343,35 +4457,35 @@
     };
 
     // $ANTLR start enabled
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:498:1: enabled : enabled_key BOOL ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:516:1: enabled : enabled_key BOOL ;
     public final enabled_return enabled() throws RecognitionException {
         enabled_return retval = new enabled_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL99=null;
-        enabled_key_return enabled_key98 = null;
+        Token BOOL102=null;
+        enabled_key_return enabled_key101 = null;
 
 
-        Object BOOL99_tree=null;
+        Object BOOL102_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:499:2: ( enabled_key BOOL )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:499:4: enabled_key BOOL
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:2: ( enabled_key BOOL )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:4: enabled_key BOOL
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_enabled_key_in_enabled1623);
-            enabled_key98=enabled_key();
+            pushFollow(FOLLOW_enabled_key_in_enabled1643);
+            enabled_key101=enabled_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(enabled_key98.getTree(), root_0);
-            BOOL99=(Token)input.LT(1);
-            match(input,BOOL,FOLLOW_BOOL_in_enabled1626); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(enabled_key101.getTree(), root_0);
+            BOOL102=(Token)input.LT(1);
+            match(input,BOOL,FOLLOW_BOOL_in_enabled1646); if (failed) return retval;
             if ( backtracking==0 ) {
-            BOOL99_tree = (Object)adaptor.create(BOOL99);
-            adaptor.addChild(root_0, BOOL99_tree);
+            BOOL102_tree = (Object)adaptor.create(BOOL102);
+            adaptor.addChild(root_0, BOOL102_tree);
             }
 
             }
@@ -4399,70 +4513,70 @@
     };
 
     // $ANTLR start salience
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:1: salience : salience_key ( INT | paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:1: salience : salience_key ( INT | paren_chunk ) ;
     public final salience_return salience() throws RecognitionException {
         salience_return retval = new salience_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token INT101=null;
-        salience_key_return salience_key100 = null;
+        Token INT104=null;
+        salience_key_return salience_key103 = null;
 
-        paren_chunk_return paren_chunk102 = null;
+        paren_chunk_return paren_chunk105 = null;
 
 
-        Object INT101_tree=null;
+        Object INT104_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:2: ( salience_key ( INT | paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:4: salience_key ( INT | paren_chunk )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:2: ( salience_key ( INT | paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:4: salience_key ( INT | paren_chunk )
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_salience_key_in_salience1638);
-            salience_key100=salience_key();
+            pushFollow(FOLLOW_salience_key_in_salience1658);
+            salience_key103=salience_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(salience_key100.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:3: ( INT | paren_chunk )
-            int alt36=2;
-            int LA36_0 = input.LA(1);
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(salience_key103.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:3: ( INT | paren_chunk )
+            int alt38=2;
+            int LA38_0 = input.LA(1);
 
-            if ( (LA36_0==INT) ) {
-                alt36=1;
+            if ( (LA38_0==INT) ) {
+                alt38=1;
             }
-            else if ( (LA36_0==LEFT_PAREN) ) {
-                alt36=2;
+            else if ( (LA38_0==LEFT_PAREN) ) {
+                alt38=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("504:3: ( INT | paren_chunk )", 36, 0, input);
+                    new NoViableAltException("522:3: ( INT | paren_chunk )", 38, 0, input);
 
                 throw nvae;
             }
-            switch (alt36) {
+            switch (alt38) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:5: INT
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:5: INT
                     {
-                    INT101=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_salience1645); if (failed) return retval;
+                    INT104=(Token)input.LT(1);
+                    match(input,INT,FOLLOW_INT_in_salience1665); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    INT101_tree = (Object)adaptor.create(INT101);
-                    adaptor.addChild(root_0, INT101_tree);
+                    INT104_tree = (Object)adaptor.create(INT104);
+                    adaptor.addChild(root_0, INT104_tree);
                     }
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:505:5: paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:523:5: paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_salience1654);
-                    paren_chunk102=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_salience1674);
+                    paren_chunk105=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk102.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk105.getTree());
 
                     }
                     break;
@@ -4495,46 +4609,46 @@
     };
 
     // $ANTLR start no_loop
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:1: no_loop : no_loop_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:1: no_loop : no_loop_key ( BOOL )? ;
     public final no_loop_return no_loop() throws RecognitionException {
         no_loop_return retval = new no_loop_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL104=null;
-        no_loop_key_return no_loop_key103 = null;
+        Token BOOL107=null;
+        no_loop_key_return no_loop_key106 = null;
 
 
-        Object BOOL104_tree=null;
+        Object BOOL107_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:510:2: ( no_loop_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:510:4: no_loop_key ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:2: ( no_loop_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:4: no_loop_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_no_loop_key_in_no_loop1670);
-            no_loop_key103=no_loop_key();
+            pushFollow(FOLLOW_no_loop_key_in_no_loop1690);
+            no_loop_key106=no_loop_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(no_loop_key103.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:510:17: ( BOOL )?
-            int alt37=2;
-            int LA37_0 = input.LA(1);
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(no_loop_key106.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:17: ( BOOL )?
+            int alt39=2;
+            int LA39_0 = input.LA(1);
 
-            if ( (LA37_0==BOOL) ) {
-                alt37=1;
+            if ( (LA39_0==BOOL) ) {
+                alt39=1;
             }
-            switch (alt37) {
+            switch (alt39) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:510:17: BOOL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:17: BOOL
                     {
-                    BOOL104=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1673); if (failed) return retval;
+                    BOOL107=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1693); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    BOOL104_tree = (Object)adaptor.create(BOOL104);
-                    adaptor.addChild(root_0, BOOL104_tree);
+                    BOOL107_tree = (Object)adaptor.create(BOOL107);
+                    adaptor.addChild(root_0, BOOL107_tree);
                     }
 
                     }
@@ -4568,46 +4682,46 @@
     };
 
     // $ANTLR start auto_focus
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:1: auto_focus : auto_focus_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:531:1: auto_focus : auto_focus_key ( BOOL )? ;
     public final auto_focus_return auto_focus() throws RecognitionException {
         auto_focus_return retval = new auto_focus_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL106=null;
-        auto_focus_key_return auto_focus_key105 = null;
+        Token BOOL109=null;
+        auto_focus_key_return auto_focus_key108 = null;
 
 
-        Object BOOL106_tree=null;
+        Object BOOL109_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:2: ( auto_focus_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:4: auto_focus_key ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:532:2: ( auto_focus_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:532:4: auto_focus_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1685);
-            auto_focus_key105=auto_focus_key();
+            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1705);
+            auto_focus_key108=auto_focus_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(auto_focus_key105.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:20: ( BOOL )?
-            int alt38=2;
-            int LA38_0 = input.LA(1);
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(auto_focus_key108.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:532:20: ( BOOL )?
+            int alt40=2;
+            int LA40_0 = input.LA(1);
 
-            if ( (LA38_0==BOOL) ) {
-                alt38=1;
+            if ( (LA40_0==BOOL) ) {
+                alt40=1;
             }
-            switch (alt38) {
+            switch (alt40) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:20: BOOL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:532:20: BOOL
                     {
-                    BOOL106=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1688); if (failed) return retval;
+                    BOOL109=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1708); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    BOOL106_tree = (Object)adaptor.create(BOOL106);
-                    adaptor.addChild(root_0, BOOL106_tree);
+                    BOOL109_tree = (Object)adaptor.create(BOOL109);
+                    adaptor.addChild(root_0, BOOL109_tree);
                     }
 
                     }
@@ -4641,35 +4755,35 @@
     };
 
     // $ANTLR start activation_group
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:1: activation_group : activation_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:1: activation_group : activation_group_key STRING ;
     public final activation_group_return activation_group() throws RecognitionException {
         activation_group_return retval = new activation_group_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING108=null;
-        activation_group_key_return activation_group_key107 = null;
+        Token STRING111=null;
+        activation_group_key_return activation_group_key110 = null;
 
 
-        Object STRING108_tree=null;
+        Object STRING111_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518:2: ( activation_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518:4: activation_group_key STRING
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:2: ( activation_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:4: activation_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_activation_group_key_in_activation_group1702);
-            activation_group_key107=activation_group_key();
+            pushFollow(FOLLOW_activation_group_key_in_activation_group1722);
+            activation_group_key110=activation_group_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(activation_group_key107.getTree(), root_0);
-            STRING108=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_activation_group1705); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(activation_group_key110.getTree(), root_0);
+            STRING111=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_activation_group1725); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING108_tree = (Object)adaptor.create(STRING108);
-            adaptor.addChild(root_0, STRING108_tree);
+            STRING111_tree = (Object)adaptor.create(STRING111);
+            adaptor.addChild(root_0, STRING111_tree);
             }
 
             }
@@ -4697,35 +4811,35 @@
     };
 
     // $ANTLR start ruleflow_group
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:1: ruleflow_group : ruleflow_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:539:1: ruleflow_group : ruleflow_group_key STRING ;
     public final ruleflow_group_return ruleflow_group() throws RecognitionException {
         ruleflow_group_return retval = new ruleflow_group_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING110=null;
-        ruleflow_group_key_return ruleflow_group_key109 = null;
+        Token STRING113=null;
+        ruleflow_group_key_return ruleflow_group_key112 = null;
 
 
-        Object STRING110_tree=null;
+        Object STRING113_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:2: ( ruleflow_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:4: ruleflow_group_key STRING
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:540:2: ( ruleflow_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:540:4: ruleflow_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1716);
-            ruleflow_group_key109=ruleflow_group_key();
+            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1736);
+            ruleflow_group_key112=ruleflow_group_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(ruleflow_group_key109.getTree(), root_0);
-            STRING110=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1719); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(ruleflow_group_key112.getTree(), root_0);
+            STRING113=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1739); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING110_tree = (Object)adaptor.create(STRING110);
-            adaptor.addChild(root_0, STRING110_tree);
+            STRING113_tree = (Object)adaptor.create(STRING113);
+            adaptor.addChild(root_0, STRING113_tree);
             }
 
             }
@@ -4753,35 +4867,35 @@
     };
 
     // $ANTLR start agenda_group
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:525:1: agenda_group : agenda_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:1: agenda_group : agenda_group_key STRING ;
     public final agenda_group_return agenda_group() throws RecognitionException {
         agenda_group_return retval = new agenda_group_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING112=null;
-        agenda_group_key_return agenda_group_key111 = null;
+        Token STRING115=null;
+        agenda_group_key_return agenda_group_key114 = null;
 
 
-        Object STRING112_tree=null;
+        Object STRING115_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:526:2: ( agenda_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:526:4: agenda_group_key STRING
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:2: ( agenda_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:4: agenda_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1730);
-            agenda_group_key111=agenda_group_key();
+            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1750);
+            agenda_group_key114=agenda_group_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(agenda_group_key111.getTree(), root_0);
-            STRING112=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_agenda_group1733); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(agenda_group_key114.getTree(), root_0);
+            STRING115=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_agenda_group1753); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING112_tree = (Object)adaptor.create(STRING112);
-            adaptor.addChild(root_0, STRING112_tree);
+            STRING115_tree = (Object)adaptor.create(STRING115);
+            adaptor.addChild(root_0, STRING115_tree);
             }
 
             }
@@ -4809,35 +4923,35 @@
     };
 
     // $ANTLR start duration
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:1: duration : duration_key INT ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:547:1: duration : duration_key INT ;
     public final duration_return duration() throws RecognitionException {
         duration_return retval = new duration_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token INT114=null;
-        duration_key_return duration_key113 = null;
+        Token INT117=null;
+        duration_key_return duration_key116 = null;
 
 
-        Object INT114_tree=null;
+        Object INT117_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:2: ( duration_key INT )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:4: duration_key INT
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:2: ( duration_key INT )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:4: duration_key INT
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_duration_key_in_duration1744);
-            duration_key113=duration_key();
+            pushFollow(FOLLOW_duration_key_in_duration1764);
+            duration_key116=duration_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(duration_key113.getTree(), root_0);
-            INT114=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_duration1747); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(duration_key116.getTree(), root_0);
+            INT117=(Token)input.LT(1);
+            match(input,INT,FOLLOW_INT_in_duration1767); if (failed) return retval;
             if ( backtracking==0 ) {
-            INT114_tree = (Object)adaptor.create(INT114);
-            adaptor.addChild(root_0, INT114_tree);
+            INT117_tree = (Object)adaptor.create(INT117);
+            adaptor.addChild(root_0, INT117_tree);
             }
 
             }
@@ -4865,35 +4979,35 @@
     };
 
     // $ANTLR start dialect
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:533:1: dialect : dialect_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:551:1: dialect : dialect_key STRING ;
     public final dialect_return dialect() throws RecognitionException {
         dialect_return retval = new dialect_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING116=null;
-        dialect_key_return dialect_key115 = null;
+        Token STRING119=null;
+        dialect_key_return dialect_key118 = null;
 
 
-        Object STRING116_tree=null;
+        Object STRING119_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534:2: ( dialect_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534:4: dialect_key STRING
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:2: ( dialect_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:4: dialect_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_dialect_key_in_dialect1761);
-            dialect_key115=dialect_key();
+            pushFollow(FOLLOW_dialect_key_in_dialect1781);
+            dialect_key118=dialect_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(dialect_key115.getTree(), root_0);
-            STRING116=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_dialect1764); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(dialect_key118.getTree(), root_0);
+            STRING119=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_dialect1784); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING116_tree = (Object)adaptor.create(STRING116);
-            adaptor.addChild(root_0, STRING116_tree);
+            STRING119_tree = (Object)adaptor.create(STRING119);
+            adaptor.addChild(root_0, STRING119_tree);
             }
 
             }
@@ -4921,46 +5035,46 @@
     };
 
     // $ANTLR start lock_on_active
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:537:1: lock_on_active : lock_on_active_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:1: lock_on_active : lock_on_active_key ( BOOL )? ;
     public final lock_on_active_return lock_on_active() throws RecognitionException {
         lock_on_active_return retval = new lock_on_active_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL118=null;
-        lock_on_active_key_return lock_on_active_key117 = null;
+        Token BOOL121=null;
+        lock_on_active_key_return lock_on_active_key120 = null;
 
 
-        Object BOOL118_tree=null;
+        Object BOOL121_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:2: ( lock_on_active_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:4: lock_on_active_key ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:2: ( lock_on_active_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:4: lock_on_active_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active1782);
-            lock_on_active_key117=lock_on_active_key();
+            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active1802);
+            lock_on_active_key120=lock_on_active_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(lock_on_active_key117.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:24: ( BOOL )?
-            int alt39=2;
-            int LA39_0 = input.LA(1);
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(lock_on_active_key120.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:24: ( BOOL )?
+            int alt41=2;
+            int LA41_0 = input.LA(1);
 
-            if ( (LA39_0==BOOL) ) {
-                alt39=1;
+            if ( (LA41_0==BOOL) ) {
+                alt41=1;
             }
-            switch (alt39) {
+            switch (alt41) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:24: BOOL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:24: BOOL
                     {
-                    BOOL118=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1785); if (failed) return retval;
+                    BOOL121=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1805); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    BOOL118_tree = (Object)adaptor.create(BOOL118);
-                    adaptor.addChild(root_0, BOOL118_tree);
+                    BOOL121_tree = (Object)adaptor.create(BOOL121);
+                    adaptor.addChild(root_0, BOOL121_tree);
                     }
 
                     }
@@ -4994,47 +5108,47 @@
     };
 
     // $ANTLR start normal_lhs_block
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:541:1: normal_lhs_block : ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:1: normal_lhs_block : ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) ;
     public final normal_lhs_block_return normal_lhs_block() throws RecognitionException {
         normal_lhs_block_return retval = new normal_lhs_block_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_return lhs119 = null;
+        lhs_return lhs122 = null;
 
 
         RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:4: ( lhs )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560:4: ( lhs )*
             {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:4: ( lhs )*
-            loop40:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560:4: ( lhs )*
+            loop42:
             do {
-                int alt40=2;
-                int LA40_0 = input.LA(1);
+                int alt42=2;
+                int LA42_0 = input.LA(1);
 
-                if ( (LA40_0==ID||LA40_0==LEFT_PAREN) ) {
-                    alt40=1;
+                if ( (LA42_0==ID||LA42_0==LEFT_PAREN) ) {
+                    alt42=1;
                 }
 
 
-                switch (alt40) {
+                switch (alt42) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:4: lhs
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560:4: lhs
             	    {
-            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1797);
-            	    lhs119=lhs();
+            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1817);
+            	    lhs122=lhs();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_lhs.add(lhs119.getTree());
+            	    if ( backtracking==0 ) stream_lhs.add(lhs122.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop40;
+            	    break loop42;
                 }
             } while (true);
 
@@ -5050,14 +5164,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 543:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
+            // 561:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:5: ^( VT_AND_IMPLICIT ( lhs )* )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:561:5: ^( VT_AND_IMPLICIT ( lhs )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_IMPLICIT, "VT_AND_IMPLICIT"), root_1);
 
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:23: ( lhs )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:561:23: ( lhs )*
                 while ( stream_lhs.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs.next());
 
@@ -5096,28 +5210,28 @@
     };
 
     // $ANTLR start lhs
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546:1: lhs : lhs_or ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:1: lhs : lhs_or ;
     public final lhs_return lhs() throws RecognitionException {
         lhs_return retval = new lhs_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_or_return lhs_or120 = null;
+        lhs_or_return lhs_or123 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546:5: ( lhs_or )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546:7: lhs_or
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:5: ( lhs_or )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:7: lhs_or
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_or_in_lhs1818);
-            lhs_or120=lhs_or();
+            pushFollow(FOLLOW_lhs_or_in_lhs1838);
+            lhs_or123=lhs_or();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or120.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or123.getTree());
 
             }
 
@@ -5144,7 +5258,7 @@
     };
 
     // $ANTLR start lhs_or
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:549:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );
     public final lhs_or_return lhs_or() throws RecognitionException {
         lhs_or_return retval = new lhs_or_return();
         retval.start = input.LT(1);
@@ -5152,22 +5266,22 @@
         Object root_0 = null;
 
         Token pipe=null;
-        Token LEFT_PAREN121=null;
-        Token RIGHT_PAREN123=null;
+        Token LEFT_PAREN124=null;
+        Token RIGHT_PAREN126=null;
         or_key_return or = null;
 
         or_key_return value = null;
 
-        lhs_and_return lhs_and122 = null;
+        lhs_and_return lhs_and125 = null;
 
-        lhs_and_return lhs_and124 = null;
+        lhs_and_return lhs_and127 = null;
 
-        lhs_and_return lhs_and125 = null;
+        lhs_and_return lhs_and128 = null;
 
 
         Object pipe_tree=null;
-        Object LEFT_PAREN121_tree=null;
-        Object RIGHT_PAREN123_tree=null;
+        Object LEFT_PAREN124_tree=null;
+        Object RIGHT_PAREN126_tree=null;
         RewriteRuleTokenStream stream_DOUBLE_PIPE=new RewriteRuleTokenStream(adaptor,"token DOUBLE_PIPE");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
@@ -5177,36 +5291,36 @@
         	Token orToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:3: ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* )
-            int alt44=2;
-            int LA44_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:3: ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* )
+            int alt46=2;
+            int LA46_0 = input.LA(1);
 
-            if ( (LA44_0==LEFT_PAREN) ) {
-                int LA44_1 = input.LA(2);
+            if ( (LA46_0==LEFT_PAREN) ) {
+                int LA46_1 = input.LA(2);
 
-                if ( (LA44_1==ID) ) {
+                if ( (LA46_1==ID) ) {
                     switch ( input.LA(3) ) {
                     case DOT:
                     case COLON:
                     case LEFT_SQUARE:
                         {
-                        alt44=2;
+                        alt46=2;
                         }
                         break;
                     case LEFT_PAREN:
                         {
-                        int LA44_4 = input.LA(4);
+                        int LA46_4 = input.LA(4);
 
                         if ( (synpred1()) ) {
-                            alt44=1;
+                            alt46=1;
                         }
                         else if ( (true) ) {
-                            alt44=2;
+                            alt46=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("549:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 44, 4, input);
+                                new NoViableAltException("567:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 46, 4, input);
 
                             throw nvae;
                         }
@@ -5214,18 +5328,18 @@
                         break;
                     case ID:
                         {
-                        int LA44_5 = input.LA(4);
+                        int LA46_5 = input.LA(4);
 
                         if ( (synpred1()) ) {
-                            alt44=1;
+                            alt46=1;
                         }
                         else if ( (true) ) {
-                            alt44=2;
+                            alt46=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("549:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 44, 5, input);
+                                new NoViableAltException("567:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 46, 5, input);
 
                             throw nvae;
                         }
@@ -5234,84 +5348,84 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("549:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 44, 3, input);
+                            new NoViableAltException("567:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 46, 3, input);
 
                         throw nvae;
                     }
 
                 }
-                else if ( (LA44_1==LEFT_PAREN) ) {
-                    alt44=2;
+                else if ( (LA46_1==LEFT_PAREN) ) {
+                    alt46=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("549:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 44, 1, input);
+                        new NoViableAltException("567:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 46, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA44_0==ID) ) {
-                alt44=2;
+            else if ( (LA46_0==ID) ) {
+                alt46=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("549:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 44, 0, input);
+                    new NoViableAltException("567:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 46, 0, input);
 
                 throw nvae;
             }
-            switch (alt44) {
+            switch (alt46) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
                     {
-                    LEFT_PAREN121=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or1839); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN121);
+                    LEFT_PAREN124=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or1859); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN124);
 
-                    pushFollow(FOLLOW_or_key_in_lhs_or1843);
+                    pushFollow(FOLLOW_or_key_in_lhs_or1863);
                     or=or_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_or_key.add(or.getTree());
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:48: ( lhs_and )+
-                    int cnt41=0;
-                    loop41:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:48: ( lhs_and )+
+                    int cnt43=0;
+                    loop43:
                     do {
-                        int alt41=2;
-                        int LA41_0 = input.LA(1);
+                        int alt43=2;
+                        int LA43_0 = input.LA(1);
 
-                        if ( (LA41_0==ID||LA41_0==LEFT_PAREN) ) {
-                            alt41=1;
+                        if ( (LA43_0==ID||LA43_0==LEFT_PAREN) ) {
+                            alt43=1;
                         }
 
 
-                        switch (alt41) {
+                        switch (alt43) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:48: lhs_and
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:48: lhs_and
                     	    {
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1845);
-                    	    lhs_and122=lhs_and();
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1865);
+                    	    lhs_and125=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and122.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and125.getTree());
 
                     	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt41 >= 1 ) break loop41;
+                    	    if ( cnt43 >= 1 ) break loop43;
                     	    if (backtracking>0) {failed=true; return retval;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(41, input);
+                                    new EarlyExitException(43, input);
                                 throw eee;
                         }
-                        cnt41++;
+                        cnt43++;
                     } while (true);
 
-                    RIGHT_PAREN123=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or1848); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN123);
+                    RIGHT_PAREN126=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or1868); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN126);
 
 
                     // AST REWRITE
@@ -5325,9 +5439,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 553:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                    // 571:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
                     {
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:553:6: ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:6: ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_OR_PREFIX, ((Token)or.start)), root_1);
@@ -5352,16 +5466,16 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:4: ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:4: ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
                     {
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:4: ( lhs_and -> lhs_and )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:5: lhs_and
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:4: ( lhs_and -> lhs_and )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:5: lhs_and
                     {
-                    pushFollow(FOLLOW_lhs_and_in_lhs_or1869);
-                    lhs_and124=lhs_and();
+                    pushFollow(FOLLOW_lhs_and_in_lhs_or1889);
+                    lhs_and127=lhs_and();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_and.add(lhs_and124.getTree());
+                    if ( backtracking==0 ) stream_lhs_and.add(lhs_and127.getTree());
 
                     // AST REWRITE
                     // elements: lhs_and
@@ -5374,7 +5488,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 554:13: -> lhs_and
+                    // 572:13: -> lhs_and
                     {
                         adaptor.addChild(root_0, stream_lhs_and.next());
 
@@ -5384,58 +5498,58 @@
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
-                    loop43:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    loop45:
                     do {
-                        int alt43=2;
-                        int LA43_0 = input.LA(1);
+                        int alt45=2;
+                        int LA45_0 = input.LA(1);
 
-                        if ( (LA43_0==ID) ) {
-                            int LA43_2 = input.LA(2);
+                        if ( (LA45_0==ID) ) {
+                            int LA45_2 = input.LA(2);
 
                             if ( ((synpred2()&&(validateIdentifierKey(DroolsSoftKeywords.OR)))) ) {
-                                alt43=1;
+                                alt45=1;
                             }
 
 
                         }
-                        else if ( (LA43_0==DOUBLE_PIPE) ) {
-                            int LA43_3 = input.LA(2);
+                        else if ( (LA45_0==DOUBLE_PIPE) ) {
+                            int LA45_3 = input.LA(2);
 
                             if ( (synpred2()) ) {
-                                alt43=1;
+                                alt45=1;
                             }
 
 
                         }
 
 
-                        switch (alt43) {
+                        switch (alt45) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
                     	    {
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:28: (value= or_key | pipe= DOUBLE_PIPE )
-                    	    int alt42=2;
-                    	    int LA42_0 = input.LA(1);
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:28: (value= or_key | pipe= DOUBLE_PIPE )
+                    	    int alt44=2;
+                    	    int LA44_0 = input.LA(1);
 
-                    	    if ( (LA42_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
-                    	        alt42=1;
+                    	    if ( (LA44_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
+                    	        alt44=1;
                     	    }
-                    	    else if ( (LA42_0==DOUBLE_PIPE) ) {
-                    	        alt42=2;
+                    	    else if ( (LA44_0==DOUBLE_PIPE) ) {
+                    	        alt44=2;
                     	    }
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("555:28: (value= or_key | pipe= DOUBLE_PIPE )", 42, 0, input);
+                    	            new NoViableAltException("573:28: (value= or_key | pipe= DOUBLE_PIPE )", 44, 0, input);
 
                     	        throw nvae;
                     	    }
-                    	    switch (alt42) {
+                    	    switch (alt44) {
                     	        case 1 :
-                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:29: value= or_key
+                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:29: value= or_key
                     	            {
-                    	            pushFollow(FOLLOW_or_key_in_lhs_or1891);
+                    	            pushFollow(FOLLOW_or_key_in_lhs_or1911);
                     	            value=or_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -5447,10 +5561,10 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:69: pipe= DOUBLE_PIPE
+                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:69: pipe= DOUBLE_PIPE
                     	            {
                     	            pipe=(Token)input.LT(1);
-                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1898); if (failed) return retval;
+                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1918); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
                     	            if ( backtracking==0 ) {
@@ -5462,11 +5576,11 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1903);
-                    	    lhs_and125=lhs_and();
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1923);
+                    	    lhs_and128=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and125.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and128.getTree());
 
                     	    // AST REWRITE
                     	    // elements: lhs_and, lhs_or
@@ -5479,9 +5593,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 556:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	    // 574:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
                     	    {
-                    	        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:6: ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:574:6: ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
                     	        {
                     	        Object root_1 = (Object)adaptor.nil();
                     	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_OR_INFIX, orToken), root_1);
@@ -5500,7 +5614,7 @@
                     	    break;
 
                     	default :
-                    	    break loop43;
+                    	    break loop45;
                         }
                     } while (true);
 
@@ -5532,7 +5646,7 @@
     };
 
     // $ANTLR start lhs_and
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );
     public final lhs_and_return lhs_and() throws RecognitionException {
         lhs_and_return retval = new lhs_and_return();
         retval.start = input.LT(1);
@@ -5540,22 +5654,22 @@
         Object root_0 = null;
 
         Token amper=null;
-        Token LEFT_PAREN126=null;
-        Token RIGHT_PAREN128=null;
+        Token LEFT_PAREN129=null;
+        Token RIGHT_PAREN131=null;
         and_key_return and = null;
 
         and_key_return value = null;
 
-        lhs_unary_return lhs_unary127 = null;
+        lhs_unary_return lhs_unary130 = null;
 
-        lhs_unary_return lhs_unary129 = null;
+        lhs_unary_return lhs_unary132 = null;
 
-        lhs_unary_return lhs_unary130 = null;
+        lhs_unary_return lhs_unary133 = null;
 
 
         Object amper_tree=null;
-        Object LEFT_PAREN126_tree=null;
-        Object RIGHT_PAREN128_tree=null;
+        Object LEFT_PAREN129_tree=null;
+        Object RIGHT_PAREN131_tree=null;
         RewriteRuleTokenStream stream_DOUBLE_AMPER=new RewriteRuleTokenStream(adaptor,"token DOUBLE_AMPER");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
@@ -5565,23 +5679,20 @@
         	Token andToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:3: ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* )
-            int alt48=2;
-            int LA48_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:3: ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* )
+            int alt50=2;
+            int LA50_0 = input.LA(1);
 
-            if ( (LA48_0==LEFT_PAREN) ) {
-                int LA48_1 = input.LA(2);
+            if ( (LA50_0==LEFT_PAREN) ) {
+                int LA50_1 = input.LA(2);
 
-                if ( (LA48_1==LEFT_PAREN) ) {
-                    alt48=2;
-                }
-                else if ( (LA48_1==ID) ) {
+                if ( (LA50_1==ID) ) {
                     switch ( input.LA(3) ) {
                     case DOT:
                     case COLON:
                     case LEFT_SQUARE:
                         {
-                        alt48=2;
+                        alt50=2;
                         }
                         break;
                     case LEFT_PAREN:
@@ -5589,18 +5700,18 @@
                         switch ( input.LA(4) ) {
                         case ID:
                             {
-                            int LA48_6 = input.LA(5);
+                            int LA50_6 = input.LA(5);
 
                             if ( (synpred3()) ) {
-                                alt48=1;
+                                alt50=1;
                             }
                             else if ( (true) ) {
-                                alt48=2;
+                                alt50=2;
                             }
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("559:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 6, input);
+                                    new NoViableAltException("577:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 50, 6, input);
 
                                 throw nvae;
                             }
@@ -5608,18 +5719,18 @@
                             break;
                         case LEFT_PAREN:
                             {
-                            int LA48_7 = input.LA(5);
+                            int LA50_7 = input.LA(5);
 
                             if ( (synpred3()) ) {
-                                alt48=1;
+                                alt50=1;
                             }
                             else if ( (true) ) {
-                                alt48=2;
+                                alt50=2;
                             }
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("559:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 7, input);
+                                    new NoViableAltException("577:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 50, 7, input);
 
                                 throw nvae;
                             }
@@ -5749,13 +5860,13 @@
                         case C_STYLE_SINGLE_LINE_COMMENT:
                         case MULTI_LINE_COMMENT:
                             {
-                            alt48=2;
+                            alt50=2;
                             }
                             break;
                         default:
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("559:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 4, input);
+                                new NoViableAltException("577:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 50, 4, input);
 
                             throw nvae;
                         }
@@ -5764,18 +5875,18 @@
                         break;
                     case ID:
                         {
-                        int LA48_5 = input.LA(4);
+                        int LA50_5 = input.LA(4);
 
                         if ( (synpred3()) ) {
-                            alt48=1;
+                            alt50=1;
                         }
                         else if ( (true) ) {
-                            alt48=2;
+                            alt50=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("559:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 5, input);
+                                new NoViableAltException("577:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 50, 5, input);
 
                             throw nvae;
                         }
@@ -5784,85 +5895,88 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("559:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 3, input);
+                            new NoViableAltException("577:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 50, 3, input);
 
                         throw nvae;
                     }
 
                 }
+                else if ( (LA50_1==LEFT_PAREN) ) {
+                    alt50=2;
+                }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("559:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 1, input);
+                        new NoViableAltException("577:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 50, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA48_0==ID) ) {
-                alt48=2;
+            else if ( (LA50_0==ID) ) {
+                alt50=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("559:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 0, input);
+                    new NoViableAltException("577:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 50, 0, input);
 
                 throw nvae;
             }
-            switch (alt48) {
+            switch (alt50) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
                     {
-                    LEFT_PAREN126=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and1941); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN126);
+                    LEFT_PAREN129=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and1961); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN129);
 
-                    pushFollow(FOLLOW_and_key_in_lhs_and1945);
+                    pushFollow(FOLLOW_and_key_in_lhs_and1965);
                     and=and_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_and_key.add(and.getTree());
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:51: ( lhs_unary )+
-                    int cnt45=0;
-                    loop45:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:51: ( lhs_unary )+
+                    int cnt47=0;
+                    loop47:
                     do {
-                        int alt45=2;
-                        int LA45_0 = input.LA(1);
+                        int alt47=2;
+                        int LA47_0 = input.LA(1);
 
-                        if ( (LA45_0==ID||LA45_0==LEFT_PAREN) ) {
-                            alt45=1;
+                        if ( (LA47_0==ID||LA47_0==LEFT_PAREN) ) {
+                            alt47=1;
                         }
 
 
-                        switch (alt45) {
+                        switch (alt47) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:51: lhs_unary
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:51: lhs_unary
                     	    {
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1947);
-                    	    lhs_unary127=lhs_unary();
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1967);
+                    	    lhs_unary130=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary127.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary130.getTree());
 
                     	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt45 >= 1 ) break loop45;
+                    	    if ( cnt47 >= 1 ) break loop47;
                     	    if (backtracking>0) {failed=true; return retval;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(45, input);
+                                    new EarlyExitException(47, input);
                                 throw eee;
                         }
-                        cnt45++;
+                        cnt47++;
                     } while (true);
 
-                    RIGHT_PAREN128=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and1950); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN128);
+                    RIGHT_PAREN131=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and1970); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN131);
 
 
                     // AST REWRITE
-                    // elements: RIGHT_PAREN, lhs_unary
+                    // elements: lhs_unary, RIGHT_PAREN
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -5872,9 +5986,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 563:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                    // 581:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
                     {
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563:6: ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:581:6: ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_PREFIX, ((Token)and.start)), root_1);
@@ -5899,16 +6013,16 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:4: ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:582:4: ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
                     {
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:4: ( lhs_unary -> lhs_unary )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:5: lhs_unary
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:582:4: ( lhs_unary -> lhs_unary )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:582:5: lhs_unary
                     {
-                    pushFollow(FOLLOW_lhs_unary_in_lhs_and1971);
-                    lhs_unary129=lhs_unary();
+                    pushFollow(FOLLOW_lhs_unary_in_lhs_and1991);
+                    lhs_unary132=lhs_unary();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary129.getTree());
+                    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary132.getTree());
 
                     // AST REWRITE
                     // elements: lhs_unary
@@ -5921,7 +6035,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 564:15: -> lhs_unary
+                    // 582:15: -> lhs_unary
                     {
                         adaptor.addChild(root_0, stream_lhs_unary.next());
 
@@ -5931,58 +6045,58 @@
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
-                    loop47:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    loop49:
                     do {
-                        int alt47=2;
-                        int LA47_0 = input.LA(1);
+                        int alt49=2;
+                        int LA49_0 = input.LA(1);
 
-                        if ( (LA47_0==ID) ) {
-                            int LA47_2 = input.LA(2);
+                        if ( (LA49_0==ID) ) {
+                            int LA49_2 = input.LA(2);
 
                             if ( ((synpred4()&&(validateIdentifierKey(DroolsSoftKeywords.AND)))) ) {
-                                alt47=1;
+                                alt49=1;
                             }
 
 
                         }
-                        else if ( (LA47_0==DOUBLE_AMPER) ) {
-                            int LA47_3 = input.LA(2);
+                        else if ( (LA49_0==DOUBLE_AMPER) ) {
+                            int LA49_3 = input.LA(2);
 
                             if ( (synpred4()) ) {
-                                alt47=1;
+                                alt49=1;
                             }
 
 
                         }
 
 
-                        switch (alt47) {
+                        switch (alt49) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
                     	    {
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:30: (value= and_key | amper= DOUBLE_AMPER )
-                    	    int alt46=2;
-                    	    int LA46_0 = input.LA(1);
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:30: (value= and_key | amper= DOUBLE_AMPER )
+                    	    int alt48=2;
+                    	    int LA48_0 = input.LA(1);
 
-                    	    if ( (LA46_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.AND)))) {
-                    	        alt46=1;
+                    	    if ( (LA48_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.AND)))) {
+                    	        alt48=1;
                     	    }
-                    	    else if ( (LA46_0==DOUBLE_AMPER) ) {
-                    	        alt46=2;
+                    	    else if ( (LA48_0==DOUBLE_AMPER) ) {
+                    	        alt48=2;
                     	    }
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("565:30: (value= and_key | amper= DOUBLE_AMPER )", 46, 0, input);
+                    	            new NoViableAltException("583:30: (value= and_key | amper= DOUBLE_AMPER )", 48, 0, input);
 
                     	        throw nvae;
                     	    }
-                    	    switch (alt46) {
+                    	    switch (alt48) {
                     	        case 1 :
-                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:31: value= and_key
+                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:31: value= and_key
                     	            {
-                    	            pushFollow(FOLLOW_and_key_in_lhs_and1993);
+                    	            pushFollow(FOLLOW_and_key_in_lhs_and2013);
                     	            value=and_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -5994,10 +6108,10 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:73: amper= DOUBLE_AMPER
+                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:73: amper= DOUBLE_AMPER
                     	            {
                     	            amper=(Token)input.LT(1);
-                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and2000); if (failed) return retval;
+                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and2020); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_AMPER.add(amper);
 
                     	            if ( backtracking==0 ) {
@@ -6009,14 +6123,14 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and2005);
-                    	    lhs_unary130=lhs_unary();
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and2025);
+                    	    lhs_unary133=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary130.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary133.getTree());
 
                     	    // AST REWRITE
-                    	    // elements: lhs_and, lhs_unary
+                    	    // elements: lhs_unary, lhs_and
                     	    // token labels: 
                     	    // rule labels: retval
                     	    // token list labels: 
@@ -6026,9 +6140,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 566:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	    // 584:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
                     	    {
-                    	        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:6: ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:584:6: ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
                     	        {
                     	        Object root_1 = (Object)adaptor.nil();
                     	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_AND_INFIX, andToken), root_1);
@@ -6047,7 +6161,7 @@
                     	    break;
 
                     	default :
-                    	    break loop47;
+                    	    break loop49;
                         }
                     } while (true);
 
@@ -6079,174 +6193,194 @@
     };
 
     // $ANTLR start lhs_unary
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:1: lhs_unary options {backtrack=true; } : ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587:1: lhs_unary options {backtrack=true; } : ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
     public final lhs_unary_return lhs_unary() throws RecognitionException {
         lhs_unary_return retval = new lhs_unary_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN135=null;
-        Token RIGHT_PAREN137=null;
-        Token SEMICOLON139=null;
-        lhs_exist_return lhs_exist131 = null;
+        Token LEFT_PAREN139=null;
+        Token RIGHT_PAREN141=null;
+        Token SEMICOLON143=null;
+        lhs_exist_return lhs_exist134 = null;
 
-        lhs_not_return lhs_not132 = null;
+        lhs_not_binding_return lhs_not_binding135 = null;
 
-        lhs_eval_return lhs_eval133 = null;
+        lhs_not_return lhs_not136 = null;
 
-        lhs_forall_return lhs_forall134 = null;
+        lhs_eval_return lhs_eval137 = null;
 
-        lhs_or_return lhs_or136 = null;
+        lhs_forall_return lhs_forall138 = null;
 
-        pattern_source_return pattern_source138 = null;
+        lhs_or_return lhs_or140 = null;
 
+        pattern_source_return pattern_source142 = null;
 
-        Object LEFT_PAREN135_tree=null;
-        Object RIGHT_PAREN137_tree=null;
-        Object SEMICOLON139_tree=null;
 
+        Object LEFT_PAREN139_tree=null;
+        Object RIGHT_PAREN141_tree=null;
+        Object SEMICOLON143_tree=null;
+
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:2: ( ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:2: ( ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
-            int alt49=6;
-            int LA49_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
+            int alt51=7;
+            int LA51_0 = input.LA(1);
 
-            if ( (LA49_0==ID) ) {
-                int LA49_1 = input.LA(2);
+            if ( (LA51_0==ID) ) {
+                int LA51_1 = input.LA(2);
 
                 if ( ((validateIdentifierKey(DroolsSoftKeywords.EXISTS))) ) {
-                    alt49=1;
+                    alt51=1;
                 }
+                else if ( ((validateNotWithBinding()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))) ) {
+                    alt51=2;
+                }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
-                    alt49=2;
+                    alt51=3;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.EVAL))) ) {
-                    alt49=3;
+                    alt51=4;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.FORALL))) ) {
-                    alt49=4;
+                    alt51=5;
                 }
                 else if ( (true) ) {
-                    alt49=6;
+                    alt51=7;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("571:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 49, 1, input);
+                        new NoViableAltException("589:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 51, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA49_0==LEFT_PAREN) ) {
-                alt49=5;
+            else if ( (LA51_0==LEFT_PAREN) ) {
+                alt51=6;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("571:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 49, 0, input);
+                    new NoViableAltException("589:4: ( lhs_exist | {...}? => lhs_not_binding | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 51, 0, input);
 
                 throw nvae;
             }
-            switch (alt49) {
+            switch (alt51) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:6: lhs_exist
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:6: lhs_exist
                     {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary2043);
-                    lhs_exist131=lhs_exist();
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary2063);
+                    lhs_exist134=lhs_exist();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_exist131.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_exist134.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:5: lhs_not
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:590:4: {...}? => lhs_not_binding
                     {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary2049);
-                    lhs_not132=lhs_not();
+                    if ( !(validateNotWithBinding()) ) {
+                        if (backtracking>0) {failed=true; return retval;}
+                        throw new FailedPredicateException(input, "lhs_unary", "validateNotWithBinding()");
+                    }
+                    pushFollow(FOLLOW_lhs_not_binding_in_lhs_unary2071);
+                    lhs_not_binding135=lhs_not_binding();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not132.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not_binding135.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:5: lhs_eval
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:591:5: lhs_not
                     {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary2055);
-                    lhs_eval133=lhs_eval();
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary2077);
+                    lhs_not136=lhs_not();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_eval133.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not136.getTree());
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:574:5: lhs_forall
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:592:5: lhs_eval
                     {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary2061);
-                    lhs_forall134=lhs_forall();
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary2083);
+                    lhs_eval137=lhs_eval();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_forall134.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_eval137.getTree());
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:575:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:5: lhs_forall
                     {
-                    LEFT_PAREN135=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary2067); if (failed) return retval;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary2070);
-                    lhs_or136=lhs_or();
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary2089);
+                    lhs_forall138=lhs_forall();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or136.getTree());
-                    RIGHT_PAREN137=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary2072); if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_forall138.getTree());
+
+                    }
+                    break;
+                case 6 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    {
+                    LEFT_PAREN139=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary2095); if (failed) return retval;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary2098);
+                    lhs_or140=lhs_or();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or140.getTree());
+                    RIGHT_PAREN141=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary2100); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    RIGHT_PAREN137_tree = (Object)adaptor.create(RIGHT_PAREN137);
-                    adaptor.addChild(root_0, RIGHT_PAREN137_tree);
+                    RIGHT_PAREN141_tree = (Object)adaptor.create(RIGHT_PAREN141);
+                    adaptor.addChild(root_0, RIGHT_PAREN141_tree);
                     }
 
                     }
                     break;
-                case 6 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:5: pattern_source
+                case 7 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:5: pattern_source
                     {
-                    pushFollow(FOLLOW_pattern_source_in_lhs_unary2078);
-                    pattern_source138=pattern_source();
+                    pushFollow(FOLLOW_pattern_source_in_lhs_unary2106);
+                    pattern_source142=pattern_source();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, pattern_source138.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, pattern_source142.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:3: ( ( SEMICOLON )=> SEMICOLON )?
-            int alt50=2;
-            int LA50_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597:3: ( ( SEMICOLON )=> SEMICOLON )?
+            int alt52=2;
+            int LA52_0 = input.LA(1);
 
-            if ( (LA50_0==SEMICOLON) ) {
-                int LA50_1 = input.LA(2);
+            if ( (LA52_0==SEMICOLON) ) {
+                int LA52_1 = input.LA(2);
 
                 if ( (synpred5()) ) {
-                    alt50=1;
+                    alt52=1;
                 }
             }
-            switch (alt50) {
+            switch (alt52) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:4: ( SEMICOLON )=> SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597:4: ( SEMICOLON )=> SEMICOLON
                     {
-                    SEMICOLON139=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary2092); if (failed) return retval;
+                    SEMICOLON143=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary2120); if (failed) return retval;
 
                     }
                     break;
@@ -6279,82 +6413,82 @@
     };
 
     // $ANTLR start lhs_exist
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:581:1: lhs_exist : exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600:1: lhs_exist : exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
     public final lhs_exist_return lhs_exist() throws RecognitionException {
         lhs_exist_return retval = new lhs_exist_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN142=null;
-        Token RIGHT_PAREN144=null;
-        exists_key_return exists_key140 = null;
+        Token LEFT_PAREN146=null;
+        Token RIGHT_PAREN148=null;
+        exists_key_return exists_key144 = null;
 
-        lhs_or_return lhs_or141 = null;
+        lhs_or_return lhs_or145 = null;
 
-        lhs_or_return lhs_or143 = null;
+        lhs_or_return lhs_or147 = null;
 
-        lhs_pattern_return lhs_pattern145 = null;
+        lhs_pattern_return lhs_pattern149 = null;
 
 
-        Object LEFT_PAREN142_tree=null;
-        Object RIGHT_PAREN144_tree=null;
+        Object LEFT_PAREN146_tree=null;
+        Object RIGHT_PAREN148_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         RewriteRuleSubtreeStream stream_exists_key=new RewriteRuleSubtreeStream(adaptor,"rule exists_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:582:2: ( exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:582:4: exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:601:2: ( exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:601:4: exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             {
-            pushFollow(FOLLOW_exists_key_in_lhs_exist2106);
-            exists_key140=exists_key();
+            pushFollow(FOLLOW_exists_key_in_lhs_exist2134);
+            exists_key144=exists_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_exists_key.add(exists_key140.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
-            int alt51=3;
-            alt51 = dfa51.predict(input);
-            switch (alt51) {
+            if ( backtracking==0 ) stream_exists_key.add(exists_key144.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            int alt53=3;
+            alt53 = dfa53.predict(input);
+            switch (alt53) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2130);
-                    lhs_or141=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2158);
+                    lhs_or145=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or141.getTree());
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or145.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:584:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN142=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist2137); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN142);
+                    LEFT_PAREN146=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist2165); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN146);
 
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2139);
-                    lhs_or143=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2167);
+                    lhs_or147=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or143.getTree());
-                    RIGHT_PAREN144=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist2141); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN144);
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or147.getTree());
+                    RIGHT_PAREN148=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist2169); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN148);
 
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:585:12: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:12: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist2154);
-                    lhs_pattern145=lhs_pattern();
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist2182);
+                    lhs_pattern149=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern145.getTree());
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern149.getTree());
 
                     }
                     break;
@@ -6363,7 +6497,7 @@
 
 
             // AST REWRITE
-            // elements: lhs_or, RIGHT_PAREN, exists_key, lhs_pattern
+            // elements: lhs_pattern, exists_key, RIGHT_PAREN, lhs_or
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6373,26 +6507,26 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 587:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            // 606:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587:13: ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:13: ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_exists_key.nextNode(), root_1);
 
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587:26: ( lhs_or )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:26: ( lhs_or )?
                 if ( stream_lhs_or.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_or.next());
 
                 }
                 stream_lhs_or.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587:34: ( lhs_pattern )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:34: ( lhs_pattern )?
                 if ( stream_lhs_pattern.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_pattern.next());
 
                 }
                 stream_lhs_pattern.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587:47: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:47: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -6425,88 +6559,177 @@
     }
     // $ANTLR end lhs_exist
 
+    public static class lhs_not_binding_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start lhs_not_binding
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609:1: lhs_not_binding : not_key fact_binding -> ^( not_key ^( VT_PATTERN fact_binding ) ) ;
+    public final lhs_not_binding_return lhs_not_binding() throws RecognitionException {
+        lhs_not_binding_return retval = new lhs_not_binding_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        not_key_return not_key150 = null;
+
+        fact_binding_return fact_binding151 = null;
+
+
+        RewriteRuleSubtreeStream stream_fact_binding=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding");
+        RewriteRuleSubtreeStream stream_not_key=new RewriteRuleSubtreeStream(adaptor,"rule not_key");
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:610:2: ( not_key fact_binding -> ^( not_key ^( VT_PATTERN fact_binding ) ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:610:4: not_key fact_binding
+            {
+            pushFollow(FOLLOW_not_key_in_lhs_not_binding2228);
+            not_key150=not_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_not_key.add(not_key150.getTree());
+            pushFollow(FOLLOW_fact_binding_in_lhs_not_binding2230);
+            fact_binding151=fact_binding();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_fact_binding.add(fact_binding151.getTree());
+
+            // AST REWRITE
+            // elements: not_key, fact_binding
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 611:2: -> ^( not_key ^( VT_PATTERN fact_binding ) )
+            {
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:5: ^( not_key ^( VT_PATTERN fact_binding ) )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_not_key.nextNode(), root_1);
+
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:15: ^( VT_PATTERN fact_binding )
+                {
+                Object root_2 = (Object)adaptor.nil();
+                root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_2);
+
+                adaptor.addChild(root_2, stream_fact_binding.next());
+
+                adaptor.addChild(root_1, root_2);
+                }
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end lhs_not_binding
+
     public static class lhs_not_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
     // $ANTLR start lhs_not
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:590:1: lhs_not : not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:614:1: lhs_not : not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
     public final lhs_not_return lhs_not() throws RecognitionException {
         lhs_not_return retval = new lhs_not_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN148=null;
-        Token RIGHT_PAREN150=null;
-        not_key_return not_key146 = null;
+        Token LEFT_PAREN154=null;
+        Token RIGHT_PAREN156=null;
+        not_key_return not_key152 = null;
 
-        lhs_or_return lhs_or147 = null;
+        lhs_or_return lhs_or153 = null;
 
-        lhs_or_return lhs_or149 = null;
+        lhs_or_return lhs_or155 = null;
 
-        lhs_pattern_return lhs_pattern151 = null;
+        lhs_pattern_return lhs_pattern157 = null;
 
 
-        Object LEFT_PAREN148_tree=null;
-        Object RIGHT_PAREN150_tree=null;
+        Object LEFT_PAREN154_tree=null;
+        Object RIGHT_PAREN156_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         RewriteRuleSubtreeStream stream_not_key=new RewriteRuleSubtreeStream(adaptor,"rule not_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:590:9: ( not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:590:11: not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:614:9: ( not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:614:11: not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             {
-            pushFollow(FOLLOW_not_key_in_lhs_not2200);
-            not_key146=not_key();
+            pushFollow(FOLLOW_not_key_in_lhs_not2253);
+            not_key152=not_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_not_key.add(not_key146.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:591:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
-            int alt52=3;
-            alt52 = dfa52.predict(input);
-            switch (alt52) {
+            if ( backtracking==0 ) stream_not_key.add(not_key152.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:615:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            int alt54=3;
+            alt54 = dfa54.predict(input);
+            switch (alt54) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:591:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:615:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not2217);
-                    lhs_or147=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not2270);
+                    lhs_or153=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or147.getTree());
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or153.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:592:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:616:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN148=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not2224); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN148);
+                    LEFT_PAREN154=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not2277); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN154);
 
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not2226);
-                    lhs_or149=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not2279);
+                    lhs_or155=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or149.getTree());
-                    RIGHT_PAREN150=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not2228); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN150);
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or155.getTree());
+                    RIGHT_PAREN156=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not2281); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN156);
 
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:6: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:6: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not2236);
-                    lhs_pattern151=lhs_pattern();
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not2289);
+                    lhs_pattern157=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern151.getTree());
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern157.getTree());
 
                     }
                     break;
@@ -6515,7 +6738,7 @@
 
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, lhs_pattern, not_key, lhs_or
+            // elements: not_key, RIGHT_PAREN, lhs_pattern, lhs_or
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6525,26 +6748,26 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 594:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            // 618:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:13: ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:13: ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_not_key.nextNode(), root_1);
 
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:23: ( lhs_or )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:23: ( lhs_or )?
                 if ( stream_lhs_or.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_or.next());
 
                 }
                 stream_lhs_or.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:31: ( lhs_pattern )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:31: ( lhs_pattern )?
                 if ( stream_lhs_pattern.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs_pattern.next());
 
                 }
                 stream_lhs_pattern.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:44: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:44: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -6583,7 +6806,7 @@
     };
 
     // $ANTLR start lhs_eval
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597:1: lhs_eval : ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:1: lhs_eval : ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) ;
     public final lhs_eval_return lhs_eval() throws RecognitionException {
         lhs_eval_return retval = new lhs_eval_return();
         retval.start = input.LT(1);
@@ -6598,15 +6821,15 @@
         RewriteRuleSubtreeStream stream_eval_key=new RewriteRuleSubtreeStream(adaptor,"rule eval_key");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:598:2: (ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:598:4: ev= eval_key pc= paren_chunk
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:2: (ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:4: ev= eval_key pc= paren_chunk
             {
-            pushFollow(FOLLOW_eval_key_in_lhs_eval2275);
+            pushFollow(FOLLOW_eval_key_in_lhs_eval2328);
             ev=eval_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_eval_key.add(ev.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval2279);
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval2332);
             pc=paren_chunk();
             _fsp--;
             if (failed) return retval;
@@ -6617,7 +6840,7 @@
             }
 
             // AST REWRITE
-            // elements: paren_chunk, eval_key
+            // elements: eval_key, paren_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6627,9 +6850,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 601:3: -> ^( eval_key paren_chunk )
+            // 625:3: -> ^( eval_key paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:601:6: ^( eval_key paren_chunk )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:625:6: ^( eval_key paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
@@ -6668,81 +6891,81 @@
     };
 
     // $ANTLR start lhs_forall
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) ;
     public final lhs_forall_return lhs_forall() throws RecognitionException {
         lhs_forall_return retval = new lhs_forall_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN153=null;
-        Token RIGHT_PAREN155=null;
-        forall_key_return forall_key152 = null;
+        Token LEFT_PAREN159=null;
+        Token RIGHT_PAREN161=null;
+        forall_key_return forall_key158 = null;
 
-        lhs_pattern_return lhs_pattern154 = null;
+        lhs_pattern_return lhs_pattern160 = null;
 
 
-        Object LEFT_PAREN153_tree=null;
-        Object RIGHT_PAREN155_tree=null;
+        Object LEFT_PAREN159_tree=null;
+        Object RIGHT_PAREN161_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_forall_key=new RewriteRuleSubtreeStream(adaptor,"rule forall_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:629:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:629:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
             {
-            pushFollow(FOLLOW_forall_key_in_lhs_forall2303);
-            forall_key152=forall_key();
+            pushFollow(FOLLOW_forall_key_in_lhs_forall2356);
+            forall_key158=forall_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_forall_key.add(forall_key152.getTree());
-            LEFT_PAREN153=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2305); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN153);
+            if ( backtracking==0 ) stream_forall_key.add(forall_key158.getTree());
+            LEFT_PAREN159=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2358); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN159);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:26: ( lhs_pattern )+
-            int cnt53=0;
-            loop53:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:629:26: ( lhs_pattern )+
+            int cnt55=0;
+            loop55:
             do {
-                int alt53=2;
-                int LA53_0 = input.LA(1);
+                int alt55=2;
+                int LA55_0 = input.LA(1);
 
-                if ( (LA53_0==ID) ) {
-                    alt53=1;
+                if ( (LA55_0==ID) ) {
+                    alt55=1;
                 }
 
 
-                switch (alt53) {
+                switch (alt55) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:26: lhs_pattern
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:629:26: lhs_pattern
             	    {
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2307);
-            	    lhs_pattern154=lhs_pattern();
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2360);
+            	    lhs_pattern160=lhs_pattern();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern154.getTree());
+            	    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern160.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    if ( cnt53 >= 1 ) break loop53;
+            	    if ( cnt55 >= 1 ) break loop55;
             	    if (backtracking>0) {failed=true; return retval;}
                         EarlyExitException eee =
-                            new EarlyExitException(53, input);
+                            new EarlyExitException(55, input);
                         throw eee;
                 }
-                cnt53++;
+                cnt55++;
             } while (true);
 
-            RIGHT_PAREN155=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall2310); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN155);
+            RIGHT_PAREN161=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall2363); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN161);
 
 
             // AST REWRITE
-            // elements: forall_key, RIGHT_PAREN, lhs_pattern
+            // elements: RIGHT_PAREN, forall_key, lhs_pattern
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6752,9 +6975,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 606:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+            // 630:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:6: ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:630:6: ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_forall_key.nextNode(), root_1);
@@ -6801,198 +7024,198 @@
     };
 
     // $ANTLR start pattern_source
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609:1: pattern_source options {backtrack=true; } : lhs_pattern ( over_clause )? ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:1: pattern_source options {backtrack=true; } : lhs_pattern ( over_clause )? ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
     public final pattern_source_return pattern_source() throws RecognitionException {
         pattern_source_return retval = new pattern_source_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_pattern_return lhs_pattern156 = null;
+        lhs_pattern_return lhs_pattern162 = null;
 
-        over_clause_return over_clause157 = null;
+        over_clause_return over_clause163 = null;
 
-        from_key_return from_key158 = null;
+        from_key_return from_key164 = null;
 
-        accumulate_statement_return accumulate_statement159 = null;
+        accumulate_statement_return accumulate_statement165 = null;
 
-        collect_statement_return collect_statement160 = null;
+        collect_statement_return collect_statement166 = null;
 
-        entrypoint_statement_return entrypoint_statement161 = null;
+        entrypoint_statement_return entrypoint_statement167 = null;
 
-        from_source_return from_source162 = null;
+        from_source_return from_source168 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:2: ( lhs_pattern ( over_clause )? ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:4: lhs_pattern ( over_clause )? ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:2: ( lhs_pattern ( over_clause )? ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:4: lhs_pattern ( over_clause )? ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2342);
-            lhs_pattern156=lhs_pattern();
+            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2395);
+            lhs_pattern162=lhs_pattern();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern156.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:3: ( over_clause )?
-            int alt54=2;
-            int LA54_0 = input.LA(1);
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern162.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:636:3: ( over_clause )?
+            int alt56=2;
+            int LA56_0 = input.LA(1);
 
-            if ( (LA54_0==OVER) ) {
-                alt54=1;
+            if ( (LA56_0==OVER) ) {
+                alt56=1;
             }
-            switch (alt54) {
+            switch (alt56) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:3: over_clause
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:636:3: over_clause
                     {
-                    pushFollow(FOLLOW_over_clause_in_pattern_source2346);
-                    over_clause157=over_clause();
+                    pushFollow(FOLLOW_over_clause_in_pattern_source2399);
+                    over_clause163=over_clause();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, over_clause157.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, over_clause163.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
-            int alt56=2;
-            int LA56_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            int alt58=2;
+            int LA58_0 = input.LA(1);
 
-            if ( (LA56_0==ID) ) {
-                int LA56_1 = input.LA(2);
+            if ( (LA58_0==ID) ) {
+                int LA58_1 = input.LA(2);
 
-                if ( (LA56_1==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
-                    int LA56_3 = input.LA(3);
+                if ( (LA58_1==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateNotWithBinding()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(validateNotWithBinding()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(validateNotWithBinding()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
+                    int LA58_3 = input.LA(3);
 
-                    if ( (LA56_3==SEMICOLON||LA56_3==END||(LA56_3>=COMMA && LA56_3<=RIGHT_PAREN)||(LA56_3>=DOUBLE_PIPE && LA56_3<=DOUBLE_AMPER)||LA56_3==THEN||LA56_3==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
-                        alt56=1;
+                    if ( (LA58_3==SEMICOLON||LA58_3==END||(LA58_3>=COMMA && LA58_3<=RIGHT_PAREN)||(LA58_3>=DOUBLE_PIPE && LA58_3<=DOUBLE_AMPER)||LA58_3==THEN||LA58_3==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
+                        alt58=1;
                     }
-                    else if ( (LA56_3==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
-                        int LA56_6 = input.LA(4);
+                    else if ( (LA58_3==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                        int LA58_6 = input.LA(4);
 
-                        if ( (LA56_6==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
-                            int LA56_10 = input.LA(5);
+                        if ( (LA58_6==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                            int LA58_10 = input.LA(5);
 
-                            if ( (LA56_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                                int LA56_11 = input.LA(6);
+                            if ( (LA58_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                                int LA58_11 = input.LA(6);
 
-                                if ( (LA56_11==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                                    int LA56_14 = input.LA(7);
+                                if ( (LA58_11==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
+                                    int LA58_14 = input.LA(7);
 
-                                    if ( (LA56_14==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                                        int LA56_16 = input.LA(8);
+                                    if ( (LA58_14==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                                        int LA58_16 = input.LA(8);
 
                                         if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                                            alt56=1;
+                                            alt58=1;
                                         }
                                     }
-                                    else if ( ((LA56_14>=SEMICOLON && LA56_14<=DOT)||LA56_14==END||(LA56_14>=COMMA && LA56_14<=RIGHT_PAREN)||(LA56_14>=DOUBLE_PIPE && LA56_14<=DOUBLE_AMPER)||LA56_14==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
-                                        alt56=1;
+                                    else if ( ((LA58_14>=SEMICOLON && LA58_14<=DOT)||LA58_14==END||(LA58_14>=COMMA && LA58_14<=RIGHT_PAREN)||(LA58_14>=DOUBLE_PIPE && LA58_14<=DOUBLE_AMPER)||LA58_14==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
+                                        alt58=1;
                                     }
                                 }
-                                else if ( ((LA56_11>=VT_COMPILATION_UNIT && LA56_11<=LEFT_SQUARE)||(LA56_11>=THEN && LA56_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
-                                    alt56=1;
+                                else if ( ((LA58_11>=VT_COMPILATION_UNIT && LA58_11<=LEFT_SQUARE)||(LA58_11>=THEN && LA58_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
+                                    alt58=1;
                                 }
                             }
-                            else if ( (LA56_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
-                                int LA56_12 = input.LA(6);
+                            else if ( (LA58_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                                int LA58_12 = input.LA(6);
 
                                 if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                                    alt56=1;
+                                    alt58=1;
                                 }
                             }
-                            else if ( (LA56_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                                int LA56_13 = input.LA(6);
+                            else if ( (LA58_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                                int LA58_13 = input.LA(6);
 
-                                if ( (LA56_13==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                                    int LA56_15 = input.LA(7);
+                                if ( (LA58_13==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                                    int LA58_15 = input.LA(7);
 
                                     if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                                        alt56=1;
+                                        alt58=1;
                                     }
                                 }
                             }
-                            else if ( ((LA56_10>=SEMICOLON && LA56_10<=ID)||LA56_10==END||(LA56_10>=COMMA && LA56_10<=RIGHT_PAREN)||(LA56_10>=DOUBLE_PIPE && LA56_10<=DOUBLE_AMPER)||LA56_10==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
-                                alt56=1;
+                            else if ( ((LA58_10>=SEMICOLON && LA58_10<=ID)||LA58_10==END||(LA58_10>=COMMA && LA58_10<=RIGHT_PAREN)||(LA58_10>=DOUBLE_PIPE && LA58_10<=DOUBLE_AMPER)||LA58_10==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
+                                alt58=1;
                             }
                         }
                     }
-                    else if ( (LA56_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                        int LA56_8 = input.LA(4);
+                    else if ( (LA58_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
+                        int LA58_8 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                            alt56=1;
+                            alt58=1;
                         }
                     }
-                    else if ( (LA56_3==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
-                        int LA56_9 = input.LA(4);
+                    else if ( (LA58_3==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                        int LA58_9 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                            alt56=1;
+                            alt58=1;
                         }
                     }
                 }
             }
-            switch (alt56) {
+            switch (alt58) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:614:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
                     {
-                    pushFollow(FOLLOW_from_key_in_pattern_source2356);
-                    from_key158=from_key();
+                    pushFollow(FOLLOW_from_key_in_pattern_source2409);
+                    from_key164=from_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key158.getTree(), root_0);
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
-                    int alt55=4;
-                    int LA55_0 = input.LA(1);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key164.getTree(), root_0);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    int alt57=4;
+                    int LA57_0 = input.LA(1);
 
-                    if ( (LA55_0==ID) ) {
-                        int LA55_1 = input.LA(2);
+                    if ( (LA57_0==ID) ) {
+                        int LA57_1 = input.LA(2);
 
-                        if ( (LA55_1==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.ENTRY) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.POINT)))) {
-                            alt55=3;
+                        if ( (LA57_1==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.ENTRY) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.POINT)))) {
+                            alt57=3;
                         }
-                        else if ( (LA55_1==LEFT_PAREN) ) {
+                        else if ( (LA57_1==LEFT_PAREN) ) {
                             switch ( input.LA(3) ) {
-                            case LEFT_PAREN:
+                            case ID:
                                 {
-                                int LA55_5 = input.LA(4);
+                                int LA57_5 = input.LA(4);
 
                                 if ( ((validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE))) ) {
-                                    alt55=1;
+                                    alt57=1;
                                 }
+                                else if ( ((validateIdentifierKey(DroolsSoftKeywords.COLLECT))) ) {
+                                    alt57=2;
+                                }
                                 else if ( (true) ) {
-                                    alt55=4;
+                                    alt57=4;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return retval;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 5, input);
+                                        new NoViableAltException("639:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 57, 5, input);
 
                                     throw nvae;
                                 }
                                 }
                                 break;
-                            case ID:
+                            case LEFT_PAREN:
                                 {
-                                int LA55_6 = input.LA(4);
+                                int LA57_6 = input.LA(4);
 
                                 if ( ((validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE))) ) {
-                                    alt55=1;
+                                    alt57=1;
                                 }
-                                else if ( ((validateIdentifierKey(DroolsSoftKeywords.COLLECT))) ) {
-                                    alt55=2;
-                                }
                                 else if ( (true) ) {
-                                    alt55=4;
+                                    alt57=4;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return retval;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 6, input);
+                                        new NoViableAltException("639:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 57, 6, input);
 
                                     throw nvae;
                                 }
@@ -7122,25 +7345,25 @@
                             case C_STYLE_SINGLE_LINE_COMMENT:
                             case MULTI_LINE_COMMENT:
                                 {
-                                alt55=4;
+                                alt57=4;
                                 }
                                 break;
                             default:
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 3, input);
+                                    new NoViableAltException("639:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 57, 3, input);
 
                                 throw nvae;
                             }
 
                         }
-                        else if ( ((LA55_1>=SEMICOLON && LA55_1<=DOT)||LA55_1==END||(LA55_1>=COMMA && LA55_1<=RIGHT_PAREN)||(LA55_1>=DOUBLE_PIPE && LA55_1<=DOUBLE_AMPER)||LA55_1==THEN) ) {
-                            alt55=4;
+                        else if ( ((LA57_1>=SEMICOLON && LA57_1<=DOT)||LA57_1==END||(LA57_1>=COMMA && LA57_1<=RIGHT_PAREN)||(LA57_1>=DOUBLE_PIPE && LA57_1<=DOUBLE_AMPER)||LA57_1==THEN) ) {
+                            alt57=4;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 1, input);
+                                new NoViableAltException("639:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 57, 1, input);
 
                             throw nvae;
                         }
@@ -7148,52 +7371,52 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 0, input);
+                            new NoViableAltException("639:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 57, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt55) {
+                    switch (alt57) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:615:14: accumulate_statement
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:14: accumulate_statement
                             {
-                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2372);
-                            accumulate_statement159=accumulate_statement();
+                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2425);
+                            accumulate_statement165=accumulate_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, accumulate_statement159.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, accumulate_statement165.getTree());
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:616:15: collect_statement
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:640:15: collect_statement
                             {
-                            pushFollow(FOLLOW_collect_statement_in_pattern_source2388);
-                            collect_statement160=collect_statement();
+                            pushFollow(FOLLOW_collect_statement_in_pattern_source2441);
+                            collect_statement166=collect_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, collect_statement160.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, collect_statement166.getTree());
 
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:15: entrypoint_statement
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:641:15: entrypoint_statement
                             {
-                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2405);
-                            entrypoint_statement161=entrypoint_statement();
+                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2458);
+                            entrypoint_statement167=entrypoint_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, entrypoint_statement161.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, entrypoint_statement167.getTree());
 
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:15: from_source
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:15: from_source
                             {
-                            pushFollow(FOLLOW_from_source_in_pattern_source2421);
-                            from_source162=from_source();
+                            pushFollow(FOLLOW_from_source_in_pattern_source2474);
+                            from_source168=from_source();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, from_source162.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, from_source168.getTree());
 
                             }
                             break;
@@ -7232,54 +7455,54 @@
     };
 
     // $ANTLR start over_clause
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:623:1: over_clause : OVER over_elements ( COMMA over_elements )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:1: over_clause : OVER over_elements ( COMMA over_elements )* ;
     public final over_clause_return over_clause() throws RecognitionException {
         over_clause_return retval = new over_clause_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token OVER163=null;
-        Token COMMA165=null;
-        over_elements_return over_elements164 = null;
+        Token OVER169=null;
+        Token COMMA171=null;
+        over_elements_return over_elements170 = null;
 
-        over_elements_return over_elements166 = null;
+        over_elements_return over_elements172 = null;
 
 
-        Object OVER163_tree=null;
-        Object COMMA165_tree=null;
+        Object OVER169_tree=null;
+        Object COMMA171_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624:2: ( OVER over_elements ( COMMA over_elements )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624:4: OVER over_elements ( COMMA over_elements )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:2: ( OVER over_elements ( COMMA over_elements )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:4: OVER over_elements ( COMMA over_elements )*
             {
             root_0 = (Object)adaptor.nil();
 
-            OVER163=(Token)input.LT(1);
-            match(input,OVER,FOLLOW_OVER_in_over_clause2449); if (failed) return retval;
+            OVER169=(Token)input.LT(1);
+            match(input,OVER,FOLLOW_OVER_in_over_clause2502); if (failed) return retval;
             if ( backtracking==0 ) {
-            OVER163_tree = (Object)adaptor.create(OVER163);
-            root_0 = (Object)adaptor.becomeRoot(OVER163_tree, root_0);
+            OVER169_tree = (Object)adaptor.create(OVER169);
+            root_0 = (Object)adaptor.becomeRoot(OVER169_tree, root_0);
             }
-            pushFollow(FOLLOW_over_elements_in_over_clause2452);
-            over_elements164=over_elements();
+            pushFollow(FOLLOW_over_elements_in_over_clause2505);
+            over_elements170=over_elements();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, over_elements164.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624:24: ( COMMA over_elements )*
-            loop57:
+            if ( backtracking==0 ) adaptor.addChild(root_0, over_elements170.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:24: ( COMMA over_elements )*
+            loop59:
             do {
-                int alt57=2;
-                int LA57_0 = input.LA(1);
+                int alt59=2;
+                int LA59_0 = input.LA(1);
 
-                if ( (LA57_0==COMMA) ) {
-                    int LA57_2 = input.LA(2);
+                if ( (LA59_0==COMMA) ) {
+                    int LA59_2 = input.LA(2);
 
-                    if ( (LA57_2==ID) ) {
-                        int LA57_3 = input.LA(3);
+                    if ( (LA59_2==ID) ) {
+                        int LA59_3 = input.LA(3);
 
-                        if ( (LA57_3==COLON) ) {
-                            alt57=1;
+                        if ( (LA59_3==COLON) ) {
+                            alt59=1;
                         }
 
 
@@ -7289,23 +7512,23 @@
                 }
 
 
-                switch (alt57) {
+                switch (alt59) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624:25: COMMA over_elements
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:25: COMMA over_elements
             	    {
-            	    COMMA165=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_over_clause2455); if (failed) return retval;
-            	    pushFollow(FOLLOW_over_elements_in_over_clause2458);
-            	    over_elements166=over_elements();
+            	    COMMA171=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_over_clause2508); if (failed) return retval;
+            	    pushFollow(FOLLOW_over_elements_in_over_clause2511);
+            	    over_elements172=over_elements();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, over_elements166.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, over_elements172.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop57;
+            	    break loop59;
                 }
             } while (true);
 
@@ -7335,46 +7558,46 @@
     };
 
     // $ANTLR start over_elements
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:1: over_elements : ID COLON ID paren_chunk -> ^( VT_BEHAVIOR ID ID paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:1: over_elements : ID COLON ID paren_chunk -> ^( VT_BEHAVIOR ID ID paren_chunk ) ;
     public final over_elements_return over_elements() throws RecognitionException {
         over_elements_return retval = new over_elements_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID167=null;
-        Token COLON168=null;
-        Token ID169=null;
-        paren_chunk_return paren_chunk170 = null;
+        Token ID173=null;
+        Token COLON174=null;
+        Token ID175=null;
+        paren_chunk_return paren_chunk176 = null;
 
 
-        Object ID167_tree=null;
-        Object COLON168_tree=null;
-        Object ID169_tree=null;
+        Object ID173_tree=null;
+        Object COLON174_tree=null;
+        Object ID175_tree=null;
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:2: ( ID COLON ID paren_chunk -> ^( VT_BEHAVIOR ID ID paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:4: ID COLON ID paren_chunk
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:652:2: ( ID COLON ID paren_chunk -> ^( VT_BEHAVIOR ID ID paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:652:4: ID COLON ID paren_chunk
             {
-            ID167=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_over_elements2471); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID167);
+            ID173=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_over_elements2524); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID173);
 
-            COLON168=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_over_elements2473); if (failed) return retval;
-            if ( backtracking==0 ) stream_COLON.add(COLON168);
+            COLON174=(Token)input.LT(1);
+            match(input,COLON,FOLLOW_COLON_in_over_elements2526); if (failed) return retval;
+            if ( backtracking==0 ) stream_COLON.add(COLON174);
 
-            ID169=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_over_elements2475); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID169);
+            ID175=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_over_elements2528); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID175);
 
-            pushFollow(FOLLOW_paren_chunk_in_over_elements2477);
-            paren_chunk170=paren_chunk();
+            pushFollow(FOLLOW_paren_chunk_in_over_elements2530);
+            paren_chunk176=paren_chunk();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk170.getTree());
+            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk176.getTree());
 
             // AST REWRITE
             // elements: ID, paren_chunk, ID
@@ -7387,9 +7610,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 629:2: -> ^( VT_BEHAVIOR ID ID paren_chunk )
+            // 653:2: -> ^( VT_BEHAVIOR ID ID paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:629:5: ^( VT_BEHAVIOR ID ID paren_chunk )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:653:5: ^( VT_BEHAVIOR ID ID paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BEHAVIOR, "VT_BEHAVIOR"), root_1);
@@ -7430,28 +7653,28 @@
     };
 
     // $ANTLR start accumulate_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:1: accumulate_statement : accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:1: accumulate_statement : accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) ;
     public final accumulate_statement_return accumulate_statement() throws RecognitionException {
         accumulate_statement_return retval = new accumulate_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN172=null;
-        Token COMMA174=null;
-        Token RIGHT_PAREN177=null;
-        accumulate_key_return accumulate_key171 = null;
+        Token LEFT_PAREN178=null;
+        Token COMMA180=null;
+        Token RIGHT_PAREN183=null;
+        accumulate_key_return accumulate_key177 = null;
 
-        lhs_or_return lhs_or173 = null;
+        lhs_or_return lhs_or179 = null;
 
-        accumulate_init_clause_return accumulate_init_clause175 = null;
+        accumulate_init_clause_return accumulate_init_clause181 = null;
 
-        accumulate_id_clause_return accumulate_id_clause176 = null;
+        accumulate_id_clause_return accumulate_id_clause182 = null;
 
 
-        Object LEFT_PAREN172_tree=null;
-        Object COMMA174_tree=null;
-        Object RIGHT_PAREN177_tree=null;
+        Object LEFT_PAREN178_tree=null;
+        Object COMMA180_tree=null;
+        Object RIGHT_PAREN183_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
@@ -7460,37 +7683,37 @@
         RewriteRuleSubtreeStream stream_accumulate_id_clause=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_id_clause");
         RewriteRuleSubtreeStream stream_accumulate_key=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_key");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:2: ( accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:2: ( accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
             {
-            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2501);
-            accumulate_key171=accumulate_key();
+            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2554);
+            accumulate_key177=accumulate_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key171.getTree());
-            LEFT_PAREN172=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2505); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN172);
+            if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key177.getTree());
+            LEFT_PAREN178=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2558); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN178);
 
-            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2507);
-            lhs_or173=lhs_or();
+            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2560);
+            lhs_or179=lhs_or();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_lhs_or.add(lhs_or173.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:21: ( COMMA )?
-            int alt58=2;
-            int LA58_0 = input.LA(1);
+            if ( backtracking==0 ) stream_lhs_or.add(lhs_or179.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:658:21: ( COMMA )?
+            int alt60=2;
+            int LA60_0 = input.LA(1);
 
-            if ( (LA58_0==COMMA) ) {
-                alt58=1;
+            if ( (LA60_0==COMMA) ) {
+                alt60=1;
             }
-            switch (alt58) {
+            switch (alt60) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:21: COMMA
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:658:21: COMMA
                     {
-                    COMMA174=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2509); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA174);
+                    COMMA180=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2562); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA180);
 
 
                     }
@@ -7498,42 +7721,42 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:3: ( accumulate_init_clause | accumulate_id_clause )
-            int alt59=2;
-            alt59 = dfa59.predict(input);
-            switch (alt59) {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:659:3: ( accumulate_init_clause | accumulate_id_clause )
+            int alt61=2;
+            alt61 = dfa61.predict(input);
+            switch (alt61) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:5: accumulate_init_clause
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:659:5: accumulate_init_clause
                     {
-                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2517);
-                    accumulate_init_clause175=accumulate_init_clause();
+                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2570);
+                    accumulate_init_clause181=accumulate_init_clause();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accumulate_init_clause.add(accumulate_init_clause175.getTree());
+                    if ( backtracking==0 ) stream_accumulate_init_clause.add(accumulate_init_clause181.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:636:5: accumulate_id_clause
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:660:5: accumulate_id_clause
                     {
-                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2523);
-                    accumulate_id_clause176=accumulate_id_clause();
+                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2576);
+                    accumulate_id_clause182=accumulate_id_clause();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accumulate_id_clause.add(accumulate_id_clause176.getTree());
+                    if ( backtracking==0 ) stream_accumulate_id_clause.add(accumulate_id_clause182.getTree());
 
                     }
                     break;
 
             }
 
-            RIGHT_PAREN177=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2531); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN177);
+            RIGHT_PAREN183=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2584); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN183);
 
 
             // AST REWRITE
-            // elements: lhs_or, accumulate_init_clause, RIGHT_PAREN, accumulate_key, accumulate_id_clause
+            // elements: accumulate_id_clause, accumulate_init_clause, RIGHT_PAREN, lhs_or, accumulate_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7543,21 +7766,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 639:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+            // 663:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:6: ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:6: ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_accumulate_key.nextNode(), root_1);
 
                 adaptor.addChild(root_1, stream_lhs_or.next());
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:30: ( accumulate_init_clause )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:30: ( accumulate_init_clause )?
                 if ( stream_accumulate_init_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_init_clause.next());
 
                 }
                 stream_accumulate_init_clause.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:54: ( accumulate_id_clause )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:54: ( accumulate_id_clause )?
                 if ( stream_accumulate_id_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_id_clause.next());
 
@@ -7597,16 +7820,16 @@
     };
 
     // $ANTLR start accumulate_init_clause
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:1: accumulate_init_clause : init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:1: accumulate_init_clause : init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) ;
     public final accumulate_init_clause_return accumulate_init_clause() throws RecognitionException {
         accumulate_init_clause_return retval = new accumulate_init_clause_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COMMA179=null;
-        Token COMMA181=null;
-        Token COMMA183=null;
+        Token COMMA185=null;
+        Token COMMA187=null;
+        Token COMMA189=null;
         paren_chunk_return pc1 = null;
 
         paren_chunk_return pc2 = null;
@@ -7615,18 +7838,18 @@
 
         paren_chunk_return pc4 = null;
 
-        init_key_return init_key178 = null;
+        init_key_return init_key184 = null;
 
-        action_key_return action_key180 = null;
+        action_key_return action_key186 = null;
 
-        reverse_key_return reverse_key182 = null;
+        reverse_key_return reverse_key188 = null;
 
-        result_key_return result_key184 = null;
+        result_key_return result_key190 = null;
 
 
-        Object COMMA179_tree=null;
-        Object COMMA181_tree=null;
-        Object COMMA183_tree=null;
+        Object COMMA185_tree=null;
+        Object COMMA187_tree=null;
+        Object COMMA189_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleSubtreeStream stream_reverse_key=new RewriteRuleSubtreeStream(adaptor,"rule reverse_key");
         RewriteRuleSubtreeStream stream_result_key=new RewriteRuleSubtreeStream(adaptor,"rule result_key");
@@ -7634,33 +7857,33 @@
         RewriteRuleSubtreeStream stream_action_key=new RewriteRuleSubtreeStream(adaptor,"rule action_key");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:643:2: ( init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:643:4: init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:667:2: ( init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:667:4: init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk
             {
-            pushFollow(FOLLOW_init_key_in_accumulate_init_clause2560);
-            init_key178=init_key();
+            pushFollow(FOLLOW_init_key_in_accumulate_init_clause2613);
+            init_key184=init_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_init_key.add(init_key178.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2565);
+            if ( backtracking==0 ) stream_init_key.add(init_key184.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2618);
             pc1=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc1.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:644:18: ( COMMA )?
-            int alt60=2;
-            int LA60_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:668:18: ( COMMA )?
+            int alt62=2;
+            int LA62_0 = input.LA(1);
 
-            if ( (LA60_0==COMMA) ) {
-                alt60=1;
+            if ( (LA62_0==COMMA) ) {
+                alt62=1;
             }
-            switch (alt60) {
+            switch (alt62) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:644:18: COMMA
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:668:18: COMMA
                     {
-                    COMMA179=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2567); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA179);
+                    COMMA185=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2620); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA185);
 
 
                     }
@@ -7668,30 +7891,30 @@
 
             }
 
-            pushFollow(FOLLOW_action_key_in_accumulate_init_clause2571);
-            action_key180=action_key();
+            pushFollow(FOLLOW_action_key_in_accumulate_init_clause2624);
+            action_key186=action_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_action_key.add(action_key180.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2575);
+            if ( backtracking==0 ) stream_action_key.add(action_key186.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2628);
             pc2=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc2.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:29: ( COMMA )?
-            int alt61=2;
-            int LA61_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:29: ( COMMA )?
+            int alt63=2;
+            int LA63_0 = input.LA(1);
 
-            if ( (LA61_0==COMMA) ) {
-                alt61=1;
+            if ( (LA63_0==COMMA) ) {
+                alt63=1;
             }
-            switch (alt61) {
+            switch (alt63) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:29: COMMA
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:29: COMMA
                     {
-                    COMMA181=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2577); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA181);
+                    COMMA187=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2630); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA187);
 
 
                     }
@@ -7699,37 +7922,37 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
-            int alt63=2;
-            alt63 = dfa63.predict(input);
-            switch (alt63) {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
+            int alt65=2;
+            alt65 = dfa65.predict(input);
+            switch (alt65) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:4: reverse_key pc3= paren_chunk ( COMMA )?
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:4: reverse_key pc3= paren_chunk ( COMMA )?
                     {
-                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2583);
-                    reverse_key182=reverse_key();
+                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2636);
+                    reverse_key188=reverse_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_reverse_key.add(reverse_key182.getTree());
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2587);
+                    if ( backtracking==0 ) stream_reverse_key.add(reverse_key188.getTree());
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2640);
                     pc3=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_paren_chunk.add(pc3.getTree());
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:32: ( COMMA )?
-                    int alt62=2;
-                    int LA62_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:32: ( COMMA )?
+                    int alt64=2;
+                    int LA64_0 = input.LA(1);
 
-                    if ( (LA62_0==COMMA) ) {
-                        alt62=1;
+                    if ( (LA64_0==COMMA) ) {
+                        alt64=1;
                     }
-                    switch (alt62) {
+                    switch (alt64) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:32: COMMA
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:32: COMMA
                             {
-                            COMMA183=(Token)input.LT(1);
-                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2589); if (failed) return retval;
-                            if ( backtracking==0 ) stream_COMMA.add(COMMA183);
+                            COMMA189=(Token)input.LT(1);
+                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2642); if (failed) return retval;
+                            if ( backtracking==0 ) stream_COMMA.add(COMMA189);
 
 
                             }
@@ -7743,40 +7966,40 @@
 
             }
 
-            pushFollow(FOLLOW_result_key_in_accumulate_init_clause2595);
-            result_key184=result_key();
+            pushFollow(FOLLOW_result_key_in_accumulate_init_clause2648);
+            result_key190=result_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_result_key.add(result_key184.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2599);
+            if ( backtracking==0 ) stream_result_key.add(result_key190.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2652);
             pc4=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc4.getTree());
 
             // AST REWRITE
-            // elements: pc1, pc4, action_key, pc2, init_key, result_key, pc3, reverse_key
+            // elements: pc2, result_key, pc3, action_key, pc4, init_key, pc1, reverse_key
             // token labels: 
-            // rule labels: pc2, pc3, pc4, pc1, retval
+            // rule labels: pc2, pc4, pc3, pc1, retval
             // token list labels: 
             // rule list labels: 
             if ( backtracking==0 ) {
             retval.tree = root_0;
             RewriteRuleSubtreeStream stream_pc2=new RewriteRuleSubtreeStream(adaptor,"token pc2",pc2!=null?pc2.tree:null);
+            RewriteRuleSubtreeStream stream_pc4=new RewriteRuleSubtreeStream(adaptor,"token pc4",pc4!=null?pc4.tree:null);
             RewriteRuleSubtreeStream stream_pc3=new RewriteRuleSubtreeStream(adaptor,"token pc3",pc3!=null?pc3.tree:null);
-            RewriteRuleSubtreeStream stream_pc4=new RewriteRuleSubtreeStream(adaptor,"token pc4",pc4!=null?pc4.tree:null);
             RewriteRuleSubtreeStream stream_pc1=new RewriteRuleSubtreeStream(adaptor,"token pc1",pc1!=null?pc1.tree:null);
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 648:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+            // 672:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCUMULATE_INIT_CLAUSE, "VT_ACCUMULATE_INIT_CLAUSE"), root_1);
 
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:33: ^( init_key $pc1)
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:33: ^( init_key $pc1)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_init_key.nextNode(), root_2);
@@ -7785,7 +8008,7 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:50: ^( action_key $pc2)
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:50: ^( action_key $pc2)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_action_key.nextNode(), root_2);
@@ -7794,9 +8017,9 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:69: ( ^( reverse_key $pc3) )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:69: ( ^( reverse_key $pc3) )?
                 if ( stream_pc3.hasNext()||stream_reverse_key.hasNext() ) {
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:69: ^( reverse_key $pc3)
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:69: ^( reverse_key $pc3)
                     {
                     Object root_2 = (Object)adaptor.nil();
                     root_2 = (Object)adaptor.becomeRoot(stream_reverse_key.nextNode(), root_2);
@@ -7809,7 +8032,7 @@
                 }
                 stream_pc3.reset();
                 stream_reverse_key.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:90: ^( result_key $pc4)
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:90: ^( result_key $pc4)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_result_key.nextNode(), root_2);
@@ -7851,7 +8074,7 @@
     };
 
     // $ANTLR start accumulate_id_clause
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:1: accumulate_id_clause : id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:1: accumulate_id_clause : id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) ;
     public final accumulate_id_clause_return accumulate_id_clause() throws RecognitionException {
         accumulate_id_clause_return retval = new accumulate_id_clause_return();
         retval.start = input.LT(1);
@@ -7866,21 +8089,21 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:652:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:652:4: id= ID text= paren_chunk
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:4: id= ID text= paren_chunk
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_id_clause2648); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause2701); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause2652);
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause2705);
             text=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(text.getTree());
 
             // AST REWRITE
-            // elements: ID, paren_chunk
+            // elements: paren_chunk, ID
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7890,9 +8113,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 653:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+            // 677:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:653:5: ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:5: ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCUMULATE_ID_CLAUSE, "VT_ACCUMULATE_ID_CLAUSE"), root_1);
@@ -7932,51 +8155,51 @@
     };
 
     // $ANTLR start collect_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:1: collect_statement : collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:1: collect_statement : collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) ;
     public final collect_statement_return collect_statement() throws RecognitionException {
         collect_statement_return retval = new collect_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN186=null;
-        Token RIGHT_PAREN188=null;
-        collect_key_return collect_key185 = null;
+        Token LEFT_PAREN192=null;
+        Token RIGHT_PAREN194=null;
+        collect_key_return collect_key191 = null;
 
-        pattern_source_return pattern_source187 = null;
+        pattern_source_return pattern_source193 = null;
 
 
-        Object LEFT_PAREN186_tree=null;
-        Object RIGHT_PAREN188_tree=null;
+        Object LEFT_PAREN192_tree=null;
+        Object RIGHT_PAREN194_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_collect_key=new RewriteRuleSubtreeStream(adaptor,"rule collect_key");
         RewriteRuleSubtreeStream stream_pattern_source=new RewriteRuleSubtreeStream(adaptor,"rule pattern_source");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:681:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:681:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
             {
-            pushFollow(FOLLOW_collect_key_in_collect_statement2674);
-            collect_key185=collect_key();
+            pushFollow(FOLLOW_collect_key_in_collect_statement2727);
+            collect_key191=collect_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_collect_key.add(collect_key185.getTree());
-            LEFT_PAREN186=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2678); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN186);
+            if ( backtracking==0 ) stream_collect_key.add(collect_key191.getTree());
+            LEFT_PAREN192=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2731); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN192);
 
-            pushFollow(FOLLOW_pattern_source_in_collect_statement2680);
-            pattern_source187=pattern_source();
+            pushFollow(FOLLOW_pattern_source_in_collect_statement2733);
+            pattern_source193=pattern_source();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_pattern_source.add(pattern_source187.getTree());
-            RIGHT_PAREN188=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2682); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN188);
+            if ( backtracking==0 ) stream_pattern_source.add(pattern_source193.getTree());
+            RIGHT_PAREN194=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2735); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN194);
 
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, pattern_source, collect_key
+            // elements: collect_key, pattern_source, RIGHT_PAREN
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7986,9 +8209,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 659:2: -> ^( collect_key pattern_source RIGHT_PAREN )
+            // 683:2: -> ^( collect_key pattern_source RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:659:5: ^( collect_key pattern_source RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:5: ^( collect_key pattern_source RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_collect_key.nextNode(), root_1);
@@ -8028,37 +8251,37 @@
     };
 
     // $ANTLR start entrypoint_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:1: entrypoint_statement : entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:686:1: entrypoint_statement : entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) ;
     public final entrypoint_statement_return entrypoint_statement() throws RecognitionException {
         entrypoint_statement_return retval = new entrypoint_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        entry_point_key_return entry_point_key189 = null;
+        entry_point_key_return entry_point_key195 = null;
 
-        entrypoint_id_return entrypoint_id190 = null;
+        entrypoint_id_return entrypoint_id196 = null;
 
 
         RewriteRuleSubtreeStream stream_entrypoint_id=new RewriteRuleSubtreeStream(adaptor,"rule entrypoint_id");
         RewriteRuleSubtreeStream stream_entry_point_key=new RewriteRuleSubtreeStream(adaptor,"rule entry_point_key");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:4: entry_point_key entrypoint_id
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:687:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:687:4: entry_point_key entrypoint_id
             {
-            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2704);
-            entry_point_key189=entry_point_key();
+            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2757);
+            entry_point_key195=entry_point_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key189.getTree());
-            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement2706);
-            entrypoint_id190=entrypoint_id();
+            if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key195.getTree());
+            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement2759);
+            entrypoint_id196=entrypoint_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_entrypoint_id.add(entrypoint_id190.getTree());
+            if ( backtracking==0 ) stream_entrypoint_id.add(entrypoint_id196.getTree());
 
             // AST REWRITE
-            // elements: entry_point_key, entrypoint_id
+            // elements: entrypoint_id, entry_point_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -8068,9 +8291,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 664:2: -> ^( entry_point_key entrypoint_id )
+            // 688:2: -> ^( entry_point_key entrypoint_id )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:5: ^( entry_point_key entrypoint_id )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:5: ^( entry_point_key entrypoint_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_entry_point_key.nextNode(), root_1);
@@ -8109,7 +8332,7 @@
     };
 
     // $ANTLR start entrypoint_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:667:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );
     public final entrypoint_id_return entrypoint_id() throws RecognitionException {
         entrypoint_id_return retval = new entrypoint_id_return();
         retval.start = input.LT(1);
@@ -8123,29 +8346,29 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:668:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
-            int alt64=2;
-            int LA64_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
+            int alt66=2;
+            int LA66_0 = input.LA(1);
 
-            if ( (LA64_0==ID) ) {
-                alt64=1;
+            if ( (LA66_0==ID) ) {
+                alt66=1;
             }
-            else if ( (LA64_0==STRING) ) {
-                alt64=2;
+            else if ( (LA66_0==STRING) ) {
+                alt66=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("667:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 64, 0, input);
+                    new NoViableAltException("691:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 66, 0, input);
 
                 throw nvae;
             }
-            switch (alt64) {
+            switch (alt66) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:668:5: value= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:5: value= ID
                     {
                     value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_entrypoint_id2729); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_entrypoint_id2782); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(value);
 
 
@@ -8160,7 +8383,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 668:14: -> VT_ENTRYPOINT_ID[$value]
+                    // 692:14: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -8171,10 +8394,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:5: value= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:5: value= STRING
                     {
                     value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id2742); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id2795); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(value);
 
 
@@ -8189,7 +8412,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 669:18: -> VT_ENTRYPOINT_ID[$value]
+                    // 693:18: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -8224,39 +8447,64 @@
     };
 
     // $ANTLR start from_source
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
     public final from_source_return from_source() throws RecognitionException {
         from_source_return retval = new from_source_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID191=null;
+        Token ID197=null;
         paren_chunk_return args = null;
 
-        expression_chain_return expression_chain192 = null;
+        expression_chain_return expression_chain198 = null;
 
 
-        Object ID191_tree=null;
+        Object ID197_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
             {
-            ID191=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_source2758); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID191);
+            ID197=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_from_source2811); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID197);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
-            int alt65=2;
-            alt65 = dfa65.predict(input);
-            switch (alt65) {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
+            int alt67=2;
+            int LA67_0 = input.LA(1);
+
+            if ( (LA67_0==LEFT_PAREN) ) {
+                int LA67_1 = input.LA(2);
+
+                if ( (LA67_1==LEFT_PAREN) ) {
+                    int LA67_3 = input.LA(3);
+
+                    if ( (synpred8()) ) {
+                        alt67=1;
+                    }
+                }
+                else if ( (LA67_1==ID) ) {
+                    int LA67_4 = input.LA(3);
+
+                    if ( (synpred8()) ) {
+                        alt67=1;
+                    }
+                }
+                else if ( ((LA67_1>=VT_COMPILATION_UNIT && LA67_1<=SEMICOLON)||(LA67_1>=DOT && LA67_1<=STRING)||LA67_1==COMMA||(LA67_1>=AT && LA67_1<=MULTI_LINE_COMMENT)) && (synpred8())) {
+                    alt67=1;
+                }
+                else if ( (LA67_1==RIGHT_PAREN) && (synpred8())) {
+                    alt67=1;
+                }
+            }
+            switch (alt67) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:5: ( LEFT_PAREN )=>args= paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:5: ( LEFT_PAREN )=>args= paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_from_source2771);
+                    pushFollow(FOLLOW_paren_chunk_in_from_source2824);
                     args=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -8267,22 +8515,22 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:3: ( expression_chain )?
-            int alt66=2;
-            int LA66_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699:3: ( expression_chain )?
+            int alt68=2;
+            int LA68_0 = input.LA(1);
 
-            if ( (LA66_0==DOT) ) {
-                alt66=1;
+            if ( (LA68_0==DOT) ) {
+                alt68=1;
             }
-            switch (alt66) {
+            switch (alt68) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:3: expression_chain
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699:3: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_from_source2778);
-                    expression_chain192=expression_chain();
+                    pushFollow(FOLLOW_expression_chain_in_from_source2831);
+                    expression_chain198=expression_chain();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain192.getTree());
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain198.getTree());
 
                     }
                     break;
@@ -8291,7 +8539,7 @@
 
 
             // AST REWRITE
-            // elements: ID, paren_chunk, expression_chain
+            // elements: paren_chunk, ID, expression_chain
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -8301,21 +8549,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 676:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+            // 700:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:5: ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:700:5: ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FROM_SOURCE, "VT_FROM_SOURCE"), root_1);
 
                 adaptor.addChild(root_1, stream_ID.next());
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:25: ( paren_chunk )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:700:25: ( paren_chunk )?
                 if ( stream_paren_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_paren_chunk.next());
 
                 }
                 stream_paren_chunk.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:38: ( expression_chain )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:700:38: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -8354,7 +8602,7 @@
     };
 
     // $ANTLR start expression_chain
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:1: expression_chain : startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:703:1: expression_chain : startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) ;
     public final expression_chain_return expression_chain() throws RecognitionException {
         expression_chain_return retval = new expression_chain_return();
         retval.start = input.LT(1);
@@ -8362,106 +8610,106 @@
         Object root_0 = null;
 
         Token startToken=null;
-        Token ID193=null;
-        square_chunk_return square_chunk194 = null;
+        Token ID199=null;
+        square_chunk_return square_chunk200 = null;
 
-        paren_chunk_return paren_chunk195 = null;
+        paren_chunk_return paren_chunk201 = null;
 
-        expression_chain_return expression_chain196 = null;
+        expression_chain_return expression_chain202 = null;
 
 
         Object startToken_tree=null;
-        Object ID193_tree=null;
+        Object ID199_tree=null;
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
         RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:2: (startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:681:3: startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:704:2: (startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:705:3: startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )?
             {
             startToken=(Token)input.LT(1);
-            match(input,DOT,FOLLOW_DOT_in_expression_chain2810); if (failed) return retval;
+            match(input,DOT,FOLLOW_DOT_in_expression_chain2863); if (failed) return retval;
             if ( backtracking==0 ) stream_DOT.add(startToken);
 
-            ID193=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_expression_chain2812); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID193);
+            ID199=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_expression_chain2865); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID199);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:682:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
-            int alt67=3;
-            int LA67_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
+            int alt69=3;
+            int LA69_0 = input.LA(1);
 
-            if ( (LA67_0==LEFT_SQUARE) && (synpred9())) {
-                alt67=1;
+            if ( (LA69_0==LEFT_SQUARE) && (synpred9())) {
+                alt69=1;
             }
-            else if ( (LA67_0==LEFT_PAREN) ) {
-                int LA67_2 = input.LA(2);
+            else if ( (LA69_0==LEFT_PAREN) ) {
+                int LA69_2 = input.LA(2);
 
-                if ( (LA67_2==LEFT_PAREN) ) {
-                    int LA67_4 = input.LA(3);
+                if ( (LA69_2==LEFT_PAREN) ) {
+                    int LA69_4 = input.LA(3);
 
                     if ( (synpred10()) ) {
-                        alt67=2;
+                        alt69=2;
                     }
                 }
-                else if ( (LA67_2==ID) ) {
-                    int LA67_5 = input.LA(3);
+                else if ( (LA69_2==ID) ) {
+                    int LA69_5 = input.LA(3);
 
                     if ( (synpred10()) ) {
-                        alt67=2;
+                        alt69=2;
                     }
                 }
-                else if ( ((LA67_2>=VT_COMPILATION_UNIT && LA67_2<=SEMICOLON)||(LA67_2>=DOT && LA67_2<=STRING)||LA67_2==COMMA||(LA67_2>=AT && LA67_2<=MULTI_LINE_COMMENT)) && (synpred10())) {
-                    alt67=2;
+                else if ( ((LA69_2>=VT_COMPILATION_UNIT && LA69_2<=SEMICOLON)||(LA69_2>=DOT && LA69_2<=STRING)||LA69_2==COMMA||(LA69_2>=AT && LA69_2<=MULTI_LINE_COMMENT)) && (synpred10())) {
+                    alt69=2;
                 }
-                else if ( (LA67_2==RIGHT_PAREN) && (synpred10())) {
-                    alt67=2;
+                else if ( (LA69_2==RIGHT_PAREN) && (synpred10())) {
+                    alt69=2;
                 }
             }
-            switch (alt67) {
+            switch (alt69) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:6: ( LEFT_SQUARE )=> square_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:6: ( LEFT_SQUARE )=> square_chunk
                     {
-                    pushFollow(FOLLOW_square_chunk_in_expression_chain2832);
-                    square_chunk194=square_chunk();
+                    pushFollow(FOLLOW_square_chunk_in_expression_chain2885);
+                    square_chunk200=square_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_square_chunk.add(square_chunk194.getTree());
+                    if ( backtracking==0 ) stream_square_chunk.add(square_chunk200.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:6: ( LEFT_PAREN )=> paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:6: ( LEFT_PAREN )=> paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2854);
-                    paren_chunk195=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2907);
+                    paren_chunk201=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk195.getTree());
+                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk201.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:687:4: ( expression_chain )?
-            int alt68=2;
-            int LA68_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711:4: ( expression_chain )?
+            int alt70=2;
+            int LA70_0 = input.LA(1);
 
-            if ( (LA68_0==DOT) ) {
-                alt68=1;
+            if ( (LA70_0==DOT) ) {
+                alt70=1;
             }
-            switch (alt68) {
+            switch (alt70) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:687:4: expression_chain
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711:4: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain2865);
-                    expression_chain196=expression_chain();
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain2918);
+                    expression_chain202=expression_chain();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain196.getTree());
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain202.getTree());
 
                     }
                     break;
@@ -8470,7 +8718,7 @@
 
 
             // AST REWRITE
-            // elements: expression_chain, ID, paren_chunk, square_chunk
+            // elements: ID, expression_chain, paren_chunk, square_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -8480,27 +8728,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 688:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+            // 712:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:7: ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:7: ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_EXPRESSION_CHAIN, startToken), root_1);
 
                 adaptor.addChild(root_1, stream_ID.next());
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:45: ( square_chunk )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:45: ( square_chunk )?
                 if ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
                 }
                 stream_square_chunk.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:59: ( paren_chunk )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:59: ( paren_chunk )?
                 if ( stream_paren_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_paren_chunk.next());
 
                 }
                 stream_paren_chunk.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:72: ( expression_chain )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:72: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -8539,38 +8787,38 @@
     };
 
     // $ANTLR start lhs_pattern
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:715:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
     public final lhs_pattern_return lhs_pattern() throws RecognitionException {
         lhs_pattern_return retval = new lhs_pattern_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        fact_binding_return fact_binding197 = null;
+        fact_binding_return fact_binding203 = null;
 
-        fact_return fact198 = null;
+        fact_return fact204 = null;
 
 
         RewriteRuleSubtreeStream stream_fact_binding=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding");
         RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
-            int alt69=2;
-            int LA69_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
+            int alt71=2;
+            int LA71_0 = input.LA(1);
 
-            if ( (LA69_0==ID) ) {
-                int LA69_1 = input.LA(2);
+            if ( (LA71_0==ID) ) {
+                int LA71_1 = input.LA(2);
 
-                if ( (LA69_1==COLON) ) {
-                    alt69=1;
+                if ( (LA71_1==COLON) ) {
+                    alt71=1;
                 }
-                else if ( (LA69_1==DOT||LA69_1==LEFT_PAREN||LA69_1==LEFT_SQUARE) ) {
-                    alt69=2;
+                else if ( (LA71_1==DOT||LA71_1==LEFT_PAREN||LA71_1==LEFT_SQUARE) ) {
+                    alt71=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("691:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 69, 1, input);
+                        new NoViableAltException("715:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 71, 1, input);
 
                     throw nvae;
                 }
@@ -8578,19 +8826,19 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("691:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 69, 0, input);
+                    new NoViableAltException("715:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 71, 0, input);
 
                 throw nvae;
             }
-            switch (alt69) {
+            switch (alt71) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: fact_binding
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:4: fact_binding
                     {
-                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2898);
-                    fact_binding197=fact_binding();
+                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2951);
+                    fact_binding203=fact_binding();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact_binding.add(fact_binding197.getTree());
+                    if ( backtracking==0 ) stream_fact_binding.add(fact_binding203.getTree());
 
                     // AST REWRITE
                     // elements: fact_binding
@@ -8603,9 +8851,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 692:17: -> ^( VT_PATTERN fact_binding )
+                    // 716:17: -> ^( VT_PATTERN fact_binding )
                     {
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:20: ^( VT_PATTERN fact_binding )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:20: ^( VT_PATTERN fact_binding )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -8622,13 +8870,13 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:4: fact
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:717:4: fact
                     {
-                    pushFollow(FOLLOW_fact_in_lhs_pattern2911);
-                    fact198=fact();
+                    pushFollow(FOLLOW_fact_in_lhs_pattern2964);
+                    fact204=fact();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact.add(fact198.getTree());
+                    if ( backtracking==0 ) stream_fact.add(fact204.getTree());
 
                     // AST REWRITE
                     // elements: fact
@@ -8641,9 +8889,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 693:9: -> ^( VT_PATTERN fact )
+                    // 717:9: -> ^( VT_PATTERN fact )
                     {
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:12: ^( VT_PATTERN fact )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:717:12: ^( VT_PATTERN fact )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -8684,82 +8932,82 @@
     };
 
     // $ANTLR start fact_binding
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:1: fact_binding : label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:1: fact_binding : label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) ;
     public final fact_binding_return fact_binding() throws RecognitionException {
         fact_binding_return retval = new fact_binding_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN201=null;
-        Token RIGHT_PAREN203=null;
-        label_return label199 = null;
+        Token LEFT_PAREN207=null;
+        Token RIGHT_PAREN209=null;
+        label_return label205 = null;
 
-        fact_return fact200 = null;
+        fact_return fact206 = null;
 
-        fact_binding_expression_return fact_binding_expression202 = null;
+        fact_binding_expression_return fact_binding_expression208 = null;
 
 
-        Object LEFT_PAREN201_tree=null;
-        Object RIGHT_PAREN203_tree=null;
+        Object LEFT_PAREN207_tree=null;
+        Object RIGHT_PAREN209_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_label=new RewriteRuleSubtreeStream(adaptor,"rule label");
         RewriteRuleSubtreeStream stream_fact_binding_expression=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding_expression");
         RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:721:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:721:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
             {
-            pushFollow(FOLLOW_label_in_fact_binding2931);
-            label199=label();
+            pushFollow(FOLLOW_label_in_fact_binding2984);
+            label205=label();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_label.add(label199.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
-            int alt70=2;
-            int LA70_0 = input.LA(1);
+            if ( backtracking==0 ) stream_label.add(label205.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:722:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            int alt72=2;
+            int LA72_0 = input.LA(1);
 
-            if ( (LA70_0==ID) ) {
-                alt70=1;
+            if ( (LA72_0==ID) ) {
+                alt72=1;
             }
-            else if ( (LA70_0==LEFT_PAREN) ) {
-                alt70=2;
+            else if ( (LA72_0==LEFT_PAREN) ) {
+                alt72=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("698:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 70, 0, input);
+                    new NoViableAltException("722:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 72, 0, input);
 
                 throw nvae;
             }
-            switch (alt70) {
+            switch (alt72) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:5: fact
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:722:5: fact
                     {
-                    pushFollow(FOLLOW_fact_in_fact_binding2937);
-                    fact200=fact();
+                    pushFollow(FOLLOW_fact_in_fact_binding2990);
+                    fact206=fact();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact.add(fact200.getTree());
+                    if ( backtracking==0 ) stream_fact.add(fact206.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:723:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
                     {
-                    LEFT_PAREN201=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2944); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN201);
+                    LEFT_PAREN207=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2997); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN207);
 
-                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding2946);
-                    fact_binding_expression202=fact_binding_expression();
+                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding2999);
+                    fact_binding_expression208=fact_binding_expression();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression202.getTree());
-                    RIGHT_PAREN203=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding2948); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN203);
+                    if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression208.getTree());
+                    RIGHT_PAREN209=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding3001); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN209);
 
 
                     }
@@ -8769,7 +9017,7 @@
 
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, fact_binding_expression, fact, label
+            // elements: RIGHT_PAREN, fact_binding_expression, label, fact
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -8779,27 +9027,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 701:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+            // 725:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:6: ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:6: ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT_BINDING, "VT_FACT_BINDING"), root_1);
 
                 adaptor.addChild(root_1, stream_label.next());
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:30: ( fact )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:30: ( fact )?
                 if ( stream_fact.hasNext() ) {
                     adaptor.addChild(root_1, stream_fact.next());
 
                 }
                 stream_fact.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:36: ( fact_binding_expression )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:36: ( fact_binding_expression )?
                 if ( stream_fact_binding_expression.hasNext() ) {
                     adaptor.addChild(root_1, stream_fact_binding_expression.next());
 
                 }
                 stream_fact_binding_expression.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:61: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:61: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -8838,7 +9086,7 @@
     };
 
     // $ANTLR start fact_binding_expression
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:704:1: fact_binding_expression : ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:1: fact_binding_expression : ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* ;
     public final fact_binding_expression_return fact_binding_expression() throws RecognitionException {
         fact_binding_expression_return retval = new fact_binding_expression_return();
         retval.start = input.LT(1);
@@ -8848,9 +9096,9 @@
         Token pipe=null;
         or_key_return value = null;
 
-        fact_return fact204 = null;
+        fact_return fact210 = null;
 
-        fact_return fact205 = null;
+        fact_return fact211 = null;
 
 
         Object pipe_tree=null;
@@ -8861,17 +9109,17 @@
         	Token orToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
             {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:5: ( fact -> fact )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:6: fact
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:5: ( fact -> fact )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:6: fact
             {
-            pushFollow(FOLLOW_fact_in_fact_binding_expression2987);
-            fact204=fact();
+            pushFollow(FOLLOW_fact_in_fact_binding_expression3040);
+            fact210=fact();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_fact.add(fact204.getTree());
+            if ( backtracking==0 ) stream_fact.add(fact210.getTree());
 
             // AST REWRITE
             // elements: fact
@@ -8884,7 +9132,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 707:11: -> fact
+            // 731:11: -> fact
             {
                 adaptor.addChild(root_0, stream_fact.next());
 
@@ -8894,46 +9142,46 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
-            loop72:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            loop74:
             do {
-                int alt72=2;
-                int LA72_0 = input.LA(1);
+                int alt74=2;
+                int LA74_0 = input.LA(1);
 
-                if ( (LA72_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
-                    alt72=1;
+                if ( (LA74_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
+                    alt74=1;
                 }
-                else if ( (LA72_0==DOUBLE_PIPE) ) {
-                    alt72=1;
+                else if ( (LA74_0==DOUBLE_PIPE) ) {
+                    alt74=1;
                 }
 
 
-                switch (alt72) {
+                switch (alt74) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
             	    {
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:22: (value= or_key | pipe= DOUBLE_PIPE )
-            	    int alt71=2;
-            	    int LA71_0 = input.LA(1);
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:22: (value= or_key | pipe= DOUBLE_PIPE )
+            	    int alt73=2;
+            	    int LA73_0 = input.LA(1);
 
-            	    if ( (LA71_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
-            	        alt71=1;
+            	    if ( (LA73_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
+            	        alt73=1;
             	    }
-            	    else if ( (LA71_0==DOUBLE_PIPE) ) {
-            	        alt71=2;
+            	    else if ( (LA73_0==DOUBLE_PIPE) ) {
+            	        alt73=2;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        NoViableAltException nvae =
-            	            new NoViableAltException("707:22: (value= or_key | pipe= DOUBLE_PIPE )", 71, 0, input);
+            	            new NoViableAltException("731:22: (value= or_key | pipe= DOUBLE_PIPE )", 73, 0, input);
 
             	        throw nvae;
             	    }
-            	    switch (alt71) {
+            	    switch (alt73) {
             	        case 1 :
-            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:23: value= or_key
+            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:23: value= or_key
             	            {
-            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression2999);
+            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression3052);
             	            value=or_key();
             	            _fsp--;
             	            if (failed) return retval;
@@ -8945,10 +9193,10 @@
             	            }
             	            break;
             	        case 2 :
-            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:62: pipe= DOUBLE_PIPE
+            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:62: pipe= DOUBLE_PIPE
             	            {
             	            pipe=(Token)input.LT(1);
-            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3005); if (failed) return retval;
+            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3058); if (failed) return retval;
             	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
             	            if ( backtracking==0 ) {
@@ -8960,11 +9208,11 @@
 
             	    }
 
-            	    pushFollow(FOLLOW_fact_in_fact_binding_expression3010);
-            	    fact205=fact();
+            	    pushFollow(FOLLOW_fact_in_fact_binding_expression3063);
+            	    fact211=fact();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_fact.add(fact205.getTree());
+            	    if ( backtracking==0 ) stream_fact.add(fact211.getTree());
 
             	    // AST REWRITE
             	    // elements: fact, fact_binding_expression
@@ -8977,9 +9225,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 708:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	    // 732:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
             	    {
-            	        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:708:6: ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:6: ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT_OR, orToken), root_1);
@@ -8998,7 +9246,7 @@
             	    break;
 
             	default :
-            	    break loop72;
+            	    break loop74;
                 }
             } while (true);
 
@@ -9028,65 +9276,65 @@
     };
 
     // $ANTLR start fact
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711:1: fact : pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:1: fact : pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) ;
     public final fact_return fact() throws RecognitionException {
         fact_return retval = new fact_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN207=null;
-        Token RIGHT_PAREN209=null;
-        pattern_type_return pattern_type206 = null;
+        Token LEFT_PAREN213=null;
+        Token RIGHT_PAREN215=null;
+        pattern_type_return pattern_type212 = null;
 
-        constraints_return constraints208 = null;
+        constraints_return constraints214 = null;
 
 
-        Object LEFT_PAREN207_tree=null;
-        Object RIGHT_PAREN209_tree=null;
+        Object LEFT_PAREN213_tree=null;
+        Object RIGHT_PAREN215_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_pattern_type=new RewriteRuleSubtreeStream(adaptor,"rule pattern_type");
         RewriteRuleSubtreeStream stream_constraints=new RewriteRuleSubtreeStream(adaptor,"rule constraints");
          pushParaphrases(DroolsParaphareseTypes.PATTERN); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:2: ( pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:4: pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:2: ( pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:4: pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN
             {
-            pushFollow(FOLLOW_pattern_type_in_fact3050);
-            pattern_type206=pattern_type();
+            pushFollow(FOLLOW_pattern_type_in_fact3103);
+            pattern_type212=pattern_type();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_pattern_type.add(pattern_type206.getTree());
-            LEFT_PAREN207=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact3052); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN207);
+            if ( backtracking==0 ) stream_pattern_type.add(pattern_type212.getTree());
+            LEFT_PAREN213=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact3105); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN213);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:28: ( constraints )?
-            int alt73=2;
-            int LA73_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:28: ( constraints )?
+            int alt75=2;
+            int LA75_0 = input.LA(1);
 
-            if ( (LA73_0==ID||LA73_0==LEFT_PAREN) ) {
-                alt73=1;
+            if ( (LA75_0==ID||LA75_0==LEFT_PAREN) ) {
+                alt75=1;
             }
-            switch (alt73) {
+            switch (alt75) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:28: constraints
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:28: constraints
                     {
-                    pushFollow(FOLLOW_constraints_in_fact3054);
-                    constraints208=constraints();
+                    pushFollow(FOLLOW_constraints_in_fact3107);
+                    constraints214=constraints();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_constraints.add(constraints208.getTree());
+                    if ( backtracking==0 ) stream_constraints.add(constraints214.getTree());
 
                     }
                     break;
 
             }
 
-            RIGHT_PAREN209=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact3057); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN209);
+            RIGHT_PAREN215=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact3110); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN215);
 
 
             // AST REWRITE
@@ -9100,15 +9348,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 715:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
+            // 739:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:715:5: ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:5: ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT, "VT_FACT"), root_1);
 
                 adaptor.addChild(root_1, stream_pattern_type.next());
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:715:28: ( constraints )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:28: ( constraints )?
                 if ( stream_constraints.hasNext() ) {
                     adaptor.addChild(root_1, stream_constraints.next());
 
@@ -9151,60 +9399,60 @@
     };
 
     // $ANTLR start constraints
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:718:1: constraints : constraint ( COMMA constraint )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:1: constraints : constraint ( COMMA constraint )* ;
     public final constraints_return constraints() throws RecognitionException {
         constraints_return retval = new constraints_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COMMA211=null;
-        constraint_return constraint210 = null;
+        Token COMMA217=null;
+        constraint_return constraint216 = null;
 
-        constraint_return constraint212 = null;
+        constraint_return constraint218 = null;
 
 
-        Object COMMA211_tree=null;
+        Object COMMA217_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:2: ( constraint ( COMMA constraint )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:4: constraint ( COMMA constraint )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:2: ( constraint ( COMMA constraint )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:4: constraint ( COMMA constraint )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_in_constraints3082);
-            constraint210=constraint();
+            pushFollow(FOLLOW_constraint_in_constraints3135);
+            constraint216=constraint();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, constraint210.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:15: ( COMMA constraint )*
-            loop74:
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint216.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:15: ( COMMA constraint )*
+            loop76:
             do {
-                int alt74=2;
-                int LA74_0 = input.LA(1);
+                int alt76=2;
+                int LA76_0 = input.LA(1);
 
-                if ( (LA74_0==COMMA) ) {
-                    alt74=1;
+                if ( (LA76_0==COMMA) ) {
+                    alt76=1;
                 }
 
 
-                switch (alt74) {
+                switch (alt76) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:17: COMMA constraint
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:17: COMMA constraint
             	    {
-            	    COMMA211=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_constraints3086); if (failed) return retval;
-            	    pushFollow(FOLLOW_constraint_in_constraints3089);
-            	    constraint212=constraint();
+            	    COMMA217=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints3139); if (failed) return retval;
+            	    pushFollow(FOLLOW_constraint_in_constraints3142);
+            	    constraint218=constraint();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint212.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint218.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop74;
+            	    break loop76;
                 }
             } while (true);
 
@@ -9234,28 +9482,28 @@
     };
 
     // $ANTLR start constraint
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:722:1: constraint : or_constr ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:1: constraint : or_constr ;
     public final constraint_return constraint() throws RecognitionException {
         constraint_return retval = new constraint_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        or_constr_return or_constr213 = null;
+        or_constr_return or_constr219 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:723:2: ( or_constr )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:723:4: or_constr
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:747:2: ( or_constr )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:747:4: or_constr
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_or_constr_in_constraint3103);
-            or_constr213=or_constr();
+            pushFollow(FOLLOW_or_constr_in_constraint3156);
+            or_constr219=or_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, or_constr213.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, or_constr219.getTree());
 
             }
 
@@ -9282,64 +9530,64 @@
     };
 
     // $ANTLR start or_constr
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:750:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
     public final or_constr_return or_constr() throws RecognitionException {
         or_constr_return retval = new or_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_PIPE215=null;
-        and_constr_return and_constr214 = null;
+        Token DOUBLE_PIPE221=null;
+        and_constr_return and_constr220 = null;
 
-        and_constr_return and_constr216 = null;
+        and_constr_return and_constr222 = null;
 
 
-        Object DOUBLE_PIPE215_tree=null;
+        Object DOUBLE_PIPE221_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:4: and_constr ( DOUBLE_PIPE and_constr )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:4: and_constr ( DOUBLE_PIPE and_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_constr_in_or_constr3114);
-            and_constr214=and_constr();
+            pushFollow(FOLLOW_and_constr_in_or_constr3167);
+            and_constr220=and_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, and_constr214.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:15: ( DOUBLE_PIPE and_constr )*
-            loop75:
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_constr220.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:15: ( DOUBLE_PIPE and_constr )*
+            loop77:
             do {
-                int alt75=2;
-                int LA75_0 = input.LA(1);
+                int alt77=2;
+                int LA77_0 = input.LA(1);
 
-                if ( (LA75_0==DOUBLE_PIPE) ) {
-                    alt75=1;
+                if ( (LA77_0==DOUBLE_PIPE) ) {
+                    alt77=1;
                 }
 
 
-                switch (alt75) {
+                switch (alt77) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:17: DOUBLE_PIPE and_constr
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:17: DOUBLE_PIPE and_constr
             	    {
-            	    DOUBLE_PIPE215=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr3118); if (failed) return retval;
+            	    DOUBLE_PIPE221=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr3171); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_PIPE215_tree = (Object)adaptor.create(DOUBLE_PIPE215);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE215_tree, root_0);
+            	    DOUBLE_PIPE221_tree = (Object)adaptor.create(DOUBLE_PIPE221);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE221_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_and_constr_in_or_constr3121);
-            	    and_constr216=and_constr();
+            	    pushFollow(FOLLOW_and_constr_in_or_constr3174);
+            	    and_constr222=and_constr();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_constr216.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_constr222.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop75;
+            	    break loop77;
                 }
             } while (true);
 
@@ -9369,64 +9617,64 @@
     };
 
     // $ANTLR start and_constr
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:754:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
     public final and_constr_return and_constr() throws RecognitionException {
         and_constr_return retval = new and_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_AMPER218=null;
-        unary_constr_return unary_constr217 = null;
+        Token DOUBLE_AMPER224=null;
+        unary_constr_return unary_constr223 = null;
 
-        unary_constr_return unary_constr219 = null;
+        unary_constr_return unary_constr225 = null;
 
 
-        Object DOUBLE_AMPER218_tree=null;
+        Object DOUBLE_AMPER224_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:4: unary_constr ( DOUBLE_AMPER unary_constr )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:4: unary_constr ( DOUBLE_AMPER unary_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_unary_constr_in_and_constr3136);
-            unary_constr217=unary_constr();
+            pushFollow(FOLLOW_unary_constr_in_and_constr3189);
+            unary_constr223=unary_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr217.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:17: ( DOUBLE_AMPER unary_constr )*
-            loop76:
+            if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr223.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:17: ( DOUBLE_AMPER unary_constr )*
+            loop78:
             do {
-                int alt76=2;
-                int LA76_0 = input.LA(1);
+                int alt78=2;
+                int LA78_0 = input.LA(1);
 
-                if ( (LA76_0==DOUBLE_AMPER) ) {
-                    alt76=1;
+                if ( (LA78_0==DOUBLE_AMPER) ) {
+                    alt78=1;
                 }
 
 
-                switch (alt76) {
+                switch (alt78) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:19: DOUBLE_AMPER unary_constr
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:19: DOUBLE_AMPER unary_constr
             	    {
-            	    DOUBLE_AMPER218=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr3140); if (failed) return retval;
+            	    DOUBLE_AMPER224=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr3193); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_AMPER218_tree = (Object)adaptor.create(DOUBLE_AMPER218);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER218_tree, root_0);
+            	    DOUBLE_AMPER224_tree = (Object)adaptor.create(DOUBLE_AMPER224);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER224_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_unary_constr_in_and_constr3143);
-            	    unary_constr219=unary_constr();
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr3196);
+            	    unary_constr225=unary_constr();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr219.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr225.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop76;
+            	    break loop78;
                 }
             } while (true);
 
@@ -9456,51 +9704,51 @@
     };
 
     // $ANTLR start unary_constr
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );
     public final unary_constr_return unary_constr() throws RecognitionException {
         unary_constr_return retval = new unary_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN223=null;
-        Token RIGHT_PAREN225=null;
-        eval_key_return eval_key220 = null;
+        Token LEFT_PAREN229=null;
+        Token RIGHT_PAREN231=null;
+        eval_key_return eval_key226 = null;
 
-        paren_chunk_return paren_chunk221 = null;
+        paren_chunk_return paren_chunk227 = null;
 
-        field_constraint_return field_constraint222 = null;
+        field_constraint_return field_constraint228 = null;
 
-        or_constr_return or_constr224 = null;
+        or_constr_return or_constr230 = null;
 
 
-        Object LEFT_PAREN223_tree=null;
-        Object RIGHT_PAREN225_tree=null;
+        Object LEFT_PAREN229_tree=null;
+        Object RIGHT_PAREN231_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:2: ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN )
-            int alt77=3;
-            int LA77_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:760:2: ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN )
+            int alt79=3;
+            int LA79_0 = input.LA(1);
 
-            if ( (LA77_0==ID) ) {
-                int LA77_1 = input.LA(2);
+            if ( (LA79_0==ID) ) {
+                int LA79_1 = input.LA(2);
 
-                if ( ((LA77_1>=ID && LA77_1<=DOT)||LA77_1==COLON||(LA77_1>=EQUAL && LA77_1<=GRAVE_ACCENT)||LA77_1==LEFT_SQUARE) ) {
-                    alt77=2;
+                if ( ((LA79_1>=ID && LA79_1<=DOT)||LA79_1==COLON||(LA79_1>=EQUAL && LA79_1<=GRAVE_ACCENT)||LA79_1==LEFT_SQUARE) ) {
+                    alt79=2;
                 }
-                else if ( (LA77_1==LEFT_PAREN) ) {
-                    int LA77_4 = input.LA(3);
+                else if ( (LA79_1==LEFT_PAREN) ) {
+                    int LA79_4 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.EVAL))) ) {
-                        alt77=1;
+                        alt79=1;
                     }
                     else if ( (true) ) {
-                        alt77=2;
+                        alt79=2;
                     }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("734:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 4, input);
+                            new NoViableAltException("758:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 79, 4, input);
 
                         throw nvae;
                     }
@@ -9508,70 +9756,70 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("734:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 1, input);
+                        new NoViableAltException("758:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 79, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA77_0==LEFT_PAREN) ) {
-                alt77=3;
+            else if ( (LA79_0==LEFT_PAREN) ) {
+                alt79=3;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("734:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 0, input);
+                    new NoViableAltException("758:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 79, 0, input);
 
                 throw nvae;
             }
-            switch (alt77) {
+            switch (alt79) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:4: eval_key paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:760:4: eval_key paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_eval_key_in_unary_constr3164);
-                    eval_key220=eval_key();
+                    pushFollow(FOLLOW_eval_key_in_unary_constr3217);
+                    eval_key226=eval_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(eval_key220.getTree(), root_0);
-                    pushFollow(FOLLOW_paren_chunk_in_unary_constr3167);
-                    paren_chunk221=paren_chunk();
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(eval_key226.getTree(), root_0);
+                    pushFollow(FOLLOW_paren_chunk_in_unary_constr3220);
+                    paren_chunk227=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk221.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk227.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:737:4: field_constraint
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:4: field_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_field_constraint_in_unary_constr3172);
-                    field_constraint222=field_constraint();
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr3225);
+                    field_constraint228=field_constraint();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, field_constraint222.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, field_constraint228.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:4: LEFT_PAREN or_constr RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:4: LEFT_PAREN or_constr RIGHT_PAREN
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    LEFT_PAREN223=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr3177); if (failed) return retval;
-                    pushFollow(FOLLOW_or_constr_in_unary_constr3180);
-                    or_constr224=or_constr();
+                    LEFT_PAREN229=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr3230); if (failed) return retval;
+                    pushFollow(FOLLOW_or_constr_in_unary_constr3233);
+                    or_constr230=or_constr();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, or_constr224.getTree());
-                    RIGHT_PAREN225=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr3182); if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, or_constr230.getTree());
+                    RIGHT_PAREN231=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr3235); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    RIGHT_PAREN225_tree = (Object)adaptor.create(RIGHT_PAREN225);
-                    adaptor.addChild(root_0, RIGHT_PAREN225_tree);
+                    RIGHT_PAREN231_tree = (Object)adaptor.create(RIGHT_PAREN231);
+                    adaptor.addChild(root_0, RIGHT_PAREN231_tree);
                     }
 
                     }
@@ -9601,7 +9849,7 @@
     };
 
     // $ANTLR start field_constraint
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:741:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:765:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );
     public final field_constraint_return field_constraint() throws RecognitionException {
         field_constraint_return retval = new field_constraint_return();
         retval.start = input.LT(1);
@@ -9609,17 +9857,17 @@
         Object root_0 = null;
 
         Token arw=null;
-        label_return label226 = null;
+        label_return label232 = null;
 
-        accessor_path_return accessor_path227 = null;
+        accessor_path_return accessor_path233 = null;
 
-        or_restr_connective_return or_restr_connective228 = null;
+        or_restr_connective_return or_restr_connective234 = null;
 
-        paren_chunk_return paren_chunk229 = null;
+        paren_chunk_return paren_chunk235 = null;
 
-        accessor_path_return accessor_path230 = null;
+        accessor_path_return accessor_path236 = null;
 
-        or_restr_connective_return or_restr_connective231 = null;
+        or_restr_connective_return or_restr_connective237 = null;
 
 
         Object arw_tree=null;
@@ -9632,23 +9880,23 @@
         	boolean isArrow = false;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:3: ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) )
-            int alt79=2;
-            int LA79_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:3: ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) )
+            int alt81=2;
+            int LA81_0 = input.LA(1);
 
-            if ( (LA79_0==ID) ) {
-                int LA79_1 = input.LA(2);
+            if ( (LA81_0==ID) ) {
+                int LA81_1 = input.LA(2);
 
-                if ( (LA79_1==COLON) ) {
-                    alt79=1;
+                if ( (LA81_1==COLON) ) {
+                    alt81=1;
                 }
-                else if ( ((LA79_1>=ID && LA79_1<=DOT)||LA79_1==LEFT_PAREN||(LA79_1>=EQUAL && LA79_1<=GRAVE_ACCENT)||LA79_1==LEFT_SQUARE) ) {
-                    alt79=2;
+                else if ( ((LA81_1>=ID && LA81_1<=DOT)||LA81_1==LEFT_PAREN||(LA81_1>=EQUAL && LA81_1<=GRAVE_ACCENT)||LA81_1==LEFT_SQUARE) ) {
+                    alt81=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("741:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 79, 1, input);
+                        new NoViableAltException("765:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 81, 1, input);
 
                     throw nvae;
                 }
@@ -9656,58 +9904,58 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("741:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 79, 0, input);
+                    new NoViableAltException("765:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 81, 0, input);
 
                 throw nvae;
             }
-            switch (alt79) {
+            switch (alt81) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
                     {
-                    pushFollow(FOLLOW_label_in_field_constraint3196);
-                    label226=label();
+                    pushFollow(FOLLOW_label_in_field_constraint3249);
+                    label232=label();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_label.add(label226.getTree());
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint3198);
-                    accessor_path227=accessor_path();
+                    if ( backtracking==0 ) stream_label.add(label232.getTree());
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint3251);
+                    accessor_path233=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path227.getTree());
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:25: ( or_restr_connective | arw= ARROW paren_chunk )?
-                    int alt78=3;
-                    int LA78_0 = input.LA(1);
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path233.getTree());
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:25: ( or_restr_connective | arw= ARROW paren_chunk )?
+                    int alt80=3;
+                    int LA80_0 = input.LA(1);
 
-                    if ( (LA78_0==ID||LA78_0==LEFT_PAREN||(LA78_0>=EQUAL && LA78_0<=GRAVE_ACCENT)) ) {
-                        alt78=1;
+                    if ( (LA80_0==ID||LA80_0==LEFT_PAREN||(LA80_0>=EQUAL && LA80_0<=GRAVE_ACCENT)) ) {
+                        alt80=1;
                     }
-                    else if ( (LA78_0==ARROW) ) {
-                        alt78=2;
+                    else if ( (LA80_0==ARROW) ) {
+                        alt80=2;
                     }
-                    switch (alt78) {
+                    switch (alt80) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:27: or_restr_connective
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:27: or_restr_connective
                             {
-                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint3202);
-                            or_restr_connective228=or_restr_connective();
+                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint3255);
+                            or_restr_connective234=or_restr_connective();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective228.getTree());
+                            if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective234.getTree());
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:49: arw= ARROW paren_chunk
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:49: arw= ARROW paren_chunk
                             {
                             arw=(Token)input.LT(1);
-                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint3208); if (failed) return retval;
+                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint3261); if (failed) return retval;
                             if ( backtracking==0 ) stream_ARROW.add(arw);
 
-                            pushFollow(FOLLOW_paren_chunk_in_field_constraint3210);
-                            paren_chunk229=paren_chunk();
+                            pushFollow(FOLLOW_paren_chunk_in_field_constraint3263);
+                            paren_chunk235=paren_chunk();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk229.getTree());
+                            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk235.getTree());
                             if ( backtracking==0 ) {
                               isArrow = true;
                             }
@@ -9719,7 +9967,7 @@
 
 
                     // AST REWRITE
-                    // elements: paren_chunk, or_restr_connective, accessor_path, accessor_path, label, label
+                    // elements: label, accessor_path, or_restr_connective, paren_chunk, label, accessor_path
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -9729,15 +9977,15 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 745:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                    // 769:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
                     if (isArrow) {
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:769:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BIND_FIELD, "VT_BIND_FIELD"), root_1);
 
                         adaptor.addChild(root_1, stream_label.next());
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:39: ^( VT_FIELD accessor_path )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:769:39: ^( VT_FIELD accessor_path )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
@@ -9749,9 +9997,9 @@
 
                         adaptor.addChild(root_0, root_1);
                         }
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:769:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
                         if ( stream_paren_chunk.hasNext() ) {
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:66: ^( VK_EVAL[$arw] paren_chunk )
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:769:66: ^( VK_EVAL[$arw] paren_chunk )
                             {
                             Object root_1 = (Object)adaptor.nil();
                             root_1 = (Object)adaptor.becomeRoot(adaptor.create(VK_EVAL, arw), root_1);
@@ -9765,21 +10013,21 @@
                         stream_paren_chunk.reset();
 
                     }
-                    else // 746:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                    else // 770:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
                     {
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:770:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BIND_FIELD, "VT_BIND_FIELD"), root_1);
 
                         adaptor.addChild(root_1, stream_label.next());
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:770:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
 
                         adaptor.addChild(root_2, stream_accessor_path.next());
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:53: ( or_restr_connective )?
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:770:53: ( or_restr_connective )?
                         if ( stream_or_restr_connective.hasNext() ) {
                             adaptor.addChild(root_2, stream_or_restr_connective.next());
 
@@ -9799,18 +10047,18 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:747:4: accessor_path or_restr_connective
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:771:4: accessor_path or_restr_connective
                     {
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint3264);
-                    accessor_path230=accessor_path();
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint3317);
+                    accessor_path236=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path230.getTree());
-                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint3266);
-                    or_restr_connective231=or_restr_connective();
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path236.getTree());
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint3319);
+                    or_restr_connective237=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective231.getTree());
+                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective237.getTree());
 
                     // AST REWRITE
                     // elements: or_restr_connective, accessor_path
@@ -9823,9 +10071,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 748:3: -> ^( VT_FIELD accessor_path or_restr_connective )
+                    // 772:3: -> ^( VT_FIELD accessor_path or_restr_connective )
                     {
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:748:6: ^( VT_FIELD accessor_path or_restr_connective )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:6: ^( VT_FIELD accessor_path or_restr_connective )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_1);
@@ -9867,7 +10115,7 @@
     };
 
     // $ANTLR start label
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:1: label : value= ID COLON -> VT_LABEL[$value] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:1: label : value= ID COLON -> VT_LABEL[$value] ;
     public final label_return label() throws RecognitionException {
         label_return retval = new label_return();
         retval.start = input.LT(1);
@@ -9875,24 +10123,24 @@
         Object root_0 = null;
 
         Token value=null;
-        Token COLON232=null;
+        Token COLON238=null;
 
         Object value_tree=null;
-        Object COLON232_tree=null;
+        Object COLON238_tree=null;
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:7: (value= ID COLON -> VT_LABEL[$value] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:9: value= ID COLON
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:7: (value= ID COLON -> VT_LABEL[$value] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:9: value= ID COLON
             {
             value=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_label3290); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_label3343); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(value);
 
-            COLON232=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_label3292); if (failed) return retval;
-            if ( backtracking==0 ) stream_COLON.add(COLON232);
+            COLON238=(Token)input.LT(1);
+            match(input,COLON,FOLLOW_COLON_in_label3345); if (failed) return retval;
+            if ( backtracking==0 ) stream_COLON.add(COLON238);
 
 
             // AST REWRITE
@@ -9906,7 +10154,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 751:24: -> VT_LABEL[$value]
+            // 775:24: -> VT_LABEL[$value]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_LABEL, value));
 
@@ -9939,62 +10187,62 @@
     };
 
     // $ANTLR start or_restr_connective
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:754:1: or_restr_connective : and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:778:1: or_restr_connective : and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )* ;
     public final or_restr_connective_return or_restr_connective() throws RecognitionException {
         or_restr_connective_return retval = new or_restr_connective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_PIPE234=null;
-        and_restr_connective_return and_restr_connective233 = null;
+        Token DOUBLE_PIPE240=null;
+        and_restr_connective_return and_restr_connective239 = null;
 
-        and_restr_connective_return and_restr_connective235 = null;
+        and_restr_connective_return and_restr_connective241 = null;
 
 
-        Object DOUBLE_PIPE234_tree=null;
+        Object DOUBLE_PIPE240_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:2: ( and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:4: and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:2: ( and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:4: and_restr_connective ({...}? => DOUBLE_PIPE and_restr_connective )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3308);
-            and_restr_connective233=and_restr_connective();
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3361);
+            and_restr_connective239=and_restr_connective();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective233.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:25: ({...}? => DOUBLE_PIPE and_restr_connective )*
-            loop80:
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective239.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:25: ({...}? => DOUBLE_PIPE and_restr_connective )*
+            loop82:
             do {
-                int alt80=2;
-                alt80 = dfa80.predict(input);
-                switch (alt80) {
+                int alt82=2;
+                alt82 = dfa82.predict(input);
+                switch (alt82) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:26: {...}? => DOUBLE_PIPE and_restr_connective
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:26: {...}? => DOUBLE_PIPE and_restr_connective
             	    {
             	    if ( !((validateRestr())) ) {
             	        if (backtracking>0) {failed=true; return retval;}
             	        throw new FailedPredicateException(input, "or_restr_connective", "(validateRestr())");
             	    }
-            	    DOUBLE_PIPE234=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective3314); if (failed) return retval;
+            	    DOUBLE_PIPE240=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective3367); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_PIPE234_tree = (Object)adaptor.create(DOUBLE_PIPE234);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE234_tree, root_0);
+            	    DOUBLE_PIPE240_tree = (Object)adaptor.create(DOUBLE_PIPE240);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE240_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3317);
-            	    and_restr_connective235=and_restr_connective();
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3370);
+            	    and_restr_connective241=and_restr_connective();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective235.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective241.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop80;
+            	    break loop82;
                 }
             } while (true);
 
@@ -10024,62 +10272,62 @@
     };
 
     // $ANTLR start and_restr_connective
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:1: and_restr_connective : constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:1: and_restr_connective : constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )* ;
     public final and_restr_connective_return and_restr_connective() throws RecognitionException {
         and_restr_connective_return retval = new and_restr_connective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_AMPER237=null;
-        constraint_expression_return constraint_expression236 = null;
+        Token DOUBLE_AMPER243=null;
+        constraint_expression_return constraint_expression242 = null;
 
-        constraint_expression_return constraint_expression238 = null;
+        constraint_expression_return constraint_expression244 = null;
 
 
-        Object DOUBLE_AMPER237_tree=null;
+        Object DOUBLE_AMPER243_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:2: ( constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:4: constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:2: ( constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:4: constraint_expression ({...}? => DOUBLE_AMPER constraint_expression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3332);
-            constraint_expression236=constraint_expression();
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3385);
+            constraint_expression242=constraint_expression();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression236.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:26: ({...}? => DOUBLE_AMPER constraint_expression )*
-            loop81:
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression242.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:26: ({...}? => DOUBLE_AMPER constraint_expression )*
+            loop83:
             do {
-                int alt81=2;
-                alt81 = dfa81.predict(input);
-                switch (alt81) {
+                int alt83=2;
+                alt83 = dfa83.predict(input);
+                switch (alt83) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:27: {...}? => DOUBLE_AMPER constraint_expression
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:27: {...}? => DOUBLE_AMPER constraint_expression
             	    {
             	    if ( !((validateRestr())) ) {
             	        if (backtracking>0) {failed=true; return retval;}
             	        throw new FailedPredicateException(input, "and_restr_connective", "(validateRestr())");
             	    }
-            	    DOUBLE_AMPER237=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective3338); if (failed) return retval;
+            	    DOUBLE_AMPER243=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective3391); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_AMPER237_tree = (Object)adaptor.create(DOUBLE_AMPER237);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER237_tree, root_0);
+            	    DOUBLE_AMPER243_tree = (Object)adaptor.create(DOUBLE_AMPER243);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER243_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3341);
-            	    constraint_expression238=constraint_expression();
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3394);
+            	    constraint_expression244=constraint_expression();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression238.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression244.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop81;
+            	    break loop83;
                 }
             } while (true);
 
@@ -10109,49 +10357,89 @@
     };
 
     // $ANTLR start constraint_expression
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );
     public final constraint_expression_return constraint_expression() throws RecognitionException {
         constraint_expression_return retval = new constraint_expression_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN241=null;
-        Token RIGHT_PAREN243=null;
-        compound_operator_return compound_operator239 = null;
+        Token LEFT_PAREN247=null;
+        Token RIGHT_PAREN249=null;
+        compound_operator_return compound_operator245 = null;
 
-        simple_operator_return simple_operator240 = null;
+        simple_operator_return simple_operator246 = null;
 
-        or_restr_connective_return or_restr_connective242 = null;
+        or_restr_connective_return or_restr_connective248 = null;
 
 
-        Object LEFT_PAREN241_tree=null;
-        Object RIGHT_PAREN243_tree=null;
+        Object LEFT_PAREN247_tree=null;
+        Object RIGHT_PAREN249_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:765:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN )
-            int alt82=3;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN )
+            int alt84=3;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                int LA82_1 = input.LA(2);
+                int LA84_1 = input.LA(2);
 
-                if ( (LA82_1==LEFT_PAREN) ) {
+                if ( (LA84_1==ID) ) {
+                    int LA84_10 = input.LA(3);
+
+                    if ( (LA84_10==ID||LA84_10==STRING||(LA84_10>=BOOL && LA84_10<=INT)||(LA84_10>=FLOAT && LA84_10<=NULL)) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                        alt84=2;
+                    }
+                    else if ( (LA84_10==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                        int LA84_16 = input.LA(4);
+
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
+                            alt84=1;
+                        }
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
+                            alt84=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("786:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 84, 16, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else if ( (LA84_10==DOT||(LA84_10>=COMMA && LA84_10<=RIGHT_PAREN)||(LA84_10>=DOUBLE_PIPE && LA84_10<=DOUBLE_AMPER)||LA84_10==LEFT_SQUARE) ) {
+                        alt84=2;
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("786:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 84, 10, input);
+
+                        throw nvae;
+                    }
+                }
+                else if ( (LA84_1==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                    alt84=2;
+                }
+                else if ( (LA84_1==STRING||(LA84_1>=BOOL && LA84_1<=INT)||(LA84_1>=FLOAT && LA84_1<=NULL)) ) {
+                    alt84=2;
+                }
+                else if ( (LA84_1==LEFT_PAREN) ) {
                     switch ( input.LA(3) ) {
                     case ID:
                         {
-                        int LA82_14 = input.LA(4);
+                        int LA84_23 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt82=1;
+                            alt84=1;
                         }
                         else if ( (true) ) {
-                            alt82=2;
+                            alt84=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 14, input);
+                                new NoViableAltException("786:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 84, 23, input);
 
                             throw nvae;
                         }
@@ -10159,18 +10447,18 @@
                         break;
                     case LEFT_PAREN:
                         {
-                        int LA82_15 = input.LA(4);
+                        int LA84_24 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt82=1;
+                            alt84=1;
                         }
                         else if ( (true) ) {
-                            alt82=2;
+                            alt84=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 15, input);
+                                new NoViableAltException("786:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 84, 24, input);
 
                             throw nvae;
                         }
@@ -10295,7 +10583,7 @@
                     case C_STYLE_SINGLE_LINE_COMMENT:
                     case MULTI_LINE_COMMENT:
                         {
-                        alt82=2;
+                        alt84=2;
                         }
                         break;
                     case STRING:
@@ -10304,18 +10592,18 @@
                     case FLOAT:
                     case NULL:
                         {
-                        int LA82_17 = input.LA(4);
+                        int LA84_26 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt82=1;
+                            alt84=1;
                         }
                         else if ( (true) ) {
-                            alt82=2;
+                            alt84=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 17, input);
+                                new NoViableAltException("786:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 84, 26, input);
 
                             throw nvae;
                         }
@@ -10324,56 +10612,16 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 10, input);
+                            new NoViableAltException("786:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 84, 13, input);
 
                         throw nvae;
                     }
 
                 }
-                else if ( (LA82_1==ID) ) {
-                    int LA82_11 = input.LA(3);
-
-                    if ( (LA82_11==ID||LA82_11==STRING||(LA82_11>=BOOL && LA82_11<=INT)||(LA82_11>=FLOAT && LA82_11<=NULL)) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                        alt82=2;
-                    }
-                    else if ( (LA82_11==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                        int LA82_21 = input.LA(4);
-
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
-                            alt82=1;
-                        }
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
-                            alt82=2;
-                        }
-                        else {
-                            if (backtracking>0) {failed=true; return retval;}
-                            NoViableAltException nvae =
-                                new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 21, input);
-
-                            throw nvae;
-                        }
-                    }
-                    else if ( (LA82_11==DOT||(LA82_11>=COMMA && LA82_11<=RIGHT_PAREN)||(LA82_11>=DOUBLE_PIPE && LA82_11<=DOUBLE_AMPER)||LA82_11==LEFT_SQUARE) ) {
-                        alt82=2;
-                    }
-                    else {
-                        if (backtracking>0) {failed=true; return retval;}
-                        NoViableAltException nvae =
-                            new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 11, input);
-
-                        throw nvae;
-                    }
-                }
-                else if ( (LA82_1==STRING||(LA82_1>=BOOL && LA82_1<=INT)||(LA82_1>=FLOAT && LA82_1<=NULL)) ) {
-                    alt82=2;
-                }
-                else if ( (LA82_1==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                    alt82=2;
-                }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 1, input);
+                        new NoViableAltException("786:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 84, 1, input);
 
                     throw nvae;
                 }
@@ -10387,66 +10635,66 @@
             case NOT_EQUAL:
             case GRAVE_ACCENT:
                 {
-                alt82=2;
+                alt84=2;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt82=3;
+                alt84=3;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 0, input);
+                    new NoViableAltException("786:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 84, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt82) {
+            switch (alt84) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:765:5: compound_operator
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:5: compound_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression3363);
-                    compound_operator239=compound_operator();
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression3416);
+                    compound_operator245=compound_operator();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, compound_operator239.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, compound_operator245.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:766:4: simple_operator
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:4: simple_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression3368);
-                    simple_operator240=simple_operator();
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression3421);
+                    simple_operator246=simple_operator();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, simple_operator240.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, simple_operator246.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:767:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    LEFT_PAREN241=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression3373); if (failed) return retval;
-                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression3376);
-                    or_restr_connective242=or_restr_connective();
+                    LEFT_PAREN247=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression3426); if (failed) return retval;
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression3429);
+                    or_restr_connective248=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, or_restr_connective242.getTree());
-                    RIGHT_PAREN243=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression3378); if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, or_restr_connective248.getTree());
+                    RIGHT_PAREN249=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression3431); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    RIGHT_PAREN243_tree = (Object)adaptor.create(RIGHT_PAREN243);
-                    adaptor.addChild(root_0, RIGHT_PAREN243_tree);
+                    RIGHT_PAREN249_tree = (Object)adaptor.create(RIGHT_PAREN249);
+                    adaptor.addChild(root_0, RIGHT_PAREN249_tree);
                     }
 
                     }
@@ -10482,133 +10730,133 @@
     };
 
     // $ANTLR start simple_operator
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:778:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:802:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value ;
     public final simple_operator_return simple_operator() throws RecognitionException {
         simple_operator_return retval = new simple_operator_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token EQUAL244=null;
-        Token GREATER245=null;
-        Token GREATER_EQUAL246=null;
-        Token LESS247=null;
-        Token LESS_EQUAL248=null;
-        Token NOT_EQUAL249=null;
-        Token ID255=null;
-        Token GRAVE_ACCENT256=null;
-        Token ID257=null;
-        Token ID264=null;
-        Token GRAVE_ACCENT265=null;
-        Token ID266=null;
-        not_key_return not_key250 = null;
+        Token EQUAL250=null;
+        Token GREATER251=null;
+        Token GREATER_EQUAL252=null;
+        Token LESS253=null;
+        Token LESS_EQUAL254=null;
+        Token NOT_EQUAL255=null;
+        Token ID261=null;
+        Token GRAVE_ACCENT262=null;
+        Token ID263=null;
+        Token ID270=null;
+        Token GRAVE_ACCENT271=null;
+        Token ID272=null;
+        not_key_return not_key256 = null;
 
-        contains_key_return contains_key251 = null;
+        contains_key_return contains_key257 = null;
 
-        soundslike_key_return soundslike_key252 = null;
+        soundslike_key_return soundslike_key258 = null;
 
-        matches_key_return matches_key253 = null;
+        matches_key_return matches_key259 = null;
 
-        memberof_key_return memberof_key254 = null;
+        memberof_key_return memberof_key260 = null;
 
-        square_chunk_return square_chunk258 = null;
+        square_chunk_return square_chunk264 = null;
 
-        contains_key_return contains_key259 = null;
+        contains_key_return contains_key265 = null;
 
-        excludes_key_return excludes_key260 = null;
+        excludes_key_return excludes_key266 = null;
 
-        matches_key_return matches_key261 = null;
+        matches_key_return matches_key267 = null;
 
-        soundslike_key_return soundslike_key262 = null;
+        soundslike_key_return soundslike_key268 = null;
 
-        memberof_key_return memberof_key263 = null;
+        memberof_key_return memberof_key269 = null;
 
-        square_chunk_return square_chunk267 = null;
+        square_chunk_return square_chunk273 = null;
 
-        expression_value_return expression_value268 = null;
+        expression_value_return expression_value274 = null;
 
 
-        Object EQUAL244_tree=null;
-        Object GREATER245_tree=null;
-        Object GREATER_EQUAL246_tree=null;
-        Object LESS247_tree=null;
-        Object LESS_EQUAL248_tree=null;
-        Object NOT_EQUAL249_tree=null;
-        Object ID255_tree=null;
-        Object GRAVE_ACCENT256_tree=null;
-        Object ID257_tree=null;
-        Object ID264_tree=null;
-        Object GRAVE_ACCENT265_tree=null;
-        Object ID266_tree=null;
+        Object EQUAL250_tree=null;
+        Object GREATER251_tree=null;
+        Object GREATER_EQUAL252_tree=null;
+        Object LESS253_tree=null;
+        Object LESS_EQUAL254_tree=null;
+        Object NOT_EQUAL255_tree=null;
+        Object ID261_tree=null;
+        Object GRAVE_ACCENT262_tree=null;
+        Object ID263_tree=null;
+        Object ID270_tree=null;
+        Object GRAVE_ACCENT271_tree=null;
+        Object ID272_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:803:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:803:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
-            int alt84=14;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:803:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
+            int alt86=14;
             switch ( input.LA(1) ) {
             case EQUAL:
                 {
-                alt84=1;
+                alt86=1;
                 }
                 break;
             case GREATER:
                 {
-                alt84=2;
+                alt86=2;
                 }
                 break;
             case GREATER_EQUAL:
                 {
-                alt84=3;
+                alt86=3;
                 }
                 break;
             case LESS:
                 {
-                alt84=4;
+                alt86=4;
                 }
                 break;
             case LESS_EQUAL:
                 {
-                alt84=5;
+                alt86=5;
                 }
                 break;
             case NOT_EQUAL:
                 {
-                alt84=6;
+                alt86=6;
                 }
                 break;
             case ID:
                 {
-                int LA84_7 = input.LA(2);
+                int LA86_7 = input.LA(2);
 
-                if ( (LA84_7==ID||LA84_7==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                    alt84=7;
+                if ( (LA86_7==ID||LA86_7==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                    alt86=7;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))) ) {
-                    alt84=8;
+                    alt86=8;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))) ) {
-                    alt84=9;
+                    alt86=9;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.MATCHES))) ) {
-                    alt84=10;
+                    alt86=10;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))) ) {
-                    alt84=11;
+                    alt86=11;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))) ) {
-                    alt84=12;
+                    alt86=12;
                 }
                 else if ( (true) ) {
-                    alt84=13;
+                    alt86=13;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("779:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 84, 7, input);
+                        new NoViableAltException("803:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 86, 7, input);
 
                     throw nvae;
                 }
@@ -10616,211 +10864,211 @@
                 break;
             case GRAVE_ACCENT:
                 {
-                alt84=14;
+                alt86=14;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("779:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 84, 0, input);
+                    new NoViableAltException("803:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 86, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt84) {
+            switch (alt86) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:5: EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:803:5: EQUAL
                     {
-                    EQUAL244=(Token)input.LT(1);
-                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator3397); if (failed) return retval;
+                    EQUAL250=(Token)input.LT(1);
+                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator3450); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    EQUAL244_tree = (Object)adaptor.create(EQUAL244);
-                    root_0 = (Object)adaptor.becomeRoot(EQUAL244_tree, root_0);
+                    EQUAL250_tree = (Object)adaptor.create(EQUAL250);
+                    root_0 = (Object)adaptor.becomeRoot(EQUAL250_tree, root_0);
                     }
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:4: GREATER
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:804:4: GREATER
                     {
-                    GREATER245=(Token)input.LT(1);
-                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator3403); if (failed) return retval;
+                    GREATER251=(Token)input.LT(1);
+                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator3456); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    GREATER245_tree = (Object)adaptor.create(GREATER245);
-                    root_0 = (Object)adaptor.becomeRoot(GREATER245_tree, root_0);
+                    GREATER251_tree = (Object)adaptor.create(GREATER251);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER251_tree, root_0);
                     }
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:4: GREATER_EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:4: GREATER_EQUAL
                     {
-                    GREATER_EQUAL246=(Token)input.LT(1);
-                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator3409); if (failed) return retval;
+                    GREATER_EQUAL252=(Token)input.LT(1);
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator3462); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    GREATER_EQUAL246_tree = (Object)adaptor.create(GREATER_EQUAL246);
-                    root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL246_tree, root_0);
+                    GREATER_EQUAL252_tree = (Object)adaptor.create(GREATER_EQUAL252);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL252_tree, root_0);
                     }
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:4: LESS
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:4: LESS
                     {
-                    LESS247=(Token)input.LT(1);
-                    match(input,LESS,FOLLOW_LESS_in_simple_operator3415); if (failed) return retval;
+                    LESS253=(Token)input.LT(1);
+                    match(input,LESS,FOLLOW_LESS_in_simple_operator3468); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    LESS247_tree = (Object)adaptor.create(LESS247);
-                    root_0 = (Object)adaptor.becomeRoot(LESS247_tree, root_0);
+                    LESS253_tree = (Object)adaptor.create(LESS253);
+                    root_0 = (Object)adaptor.becomeRoot(LESS253_tree, root_0);
                     }
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:4: LESS_EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:807:4: LESS_EQUAL
                     {
-                    LESS_EQUAL248=(Token)input.LT(1);
-                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3421); if (failed) return retval;
+                    LESS_EQUAL254=(Token)input.LT(1);
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3474); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    LESS_EQUAL248_tree = (Object)adaptor.create(LESS_EQUAL248);
-                    root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL248_tree, root_0);
+                    LESS_EQUAL254_tree = (Object)adaptor.create(LESS_EQUAL254);
+                    root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL254_tree, root_0);
                     }
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:4: NOT_EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:808:4: NOT_EQUAL
                     {
-                    NOT_EQUAL249=(Token)input.LT(1);
-                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3427); if (failed) return retval;
+                    NOT_EQUAL255=(Token)input.LT(1);
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3480); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    NOT_EQUAL249_tree = (Object)adaptor.create(NOT_EQUAL249);
-                    root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL249_tree, root_0);
+                    NOT_EQUAL255_tree = (Object)adaptor.create(NOT_EQUAL255);
+                    root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL255_tree, root_0);
                     }
 
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
                     {
-                    pushFollow(FOLLOW_not_key_in_simple_operator3433);
-                    not_key250=not_key();
+                    pushFollow(FOLLOW_not_key_in_simple_operator3486);
+                    not_key256=not_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key250.getTree());
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
-                    int alt83=6;
-                    int LA83_0 = input.LA(1);
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key256.getTree());
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
+                    int alt85=6;
+                    int LA85_0 = input.LA(1);
 
-                    if ( (LA83_0==ID) ) {
-                        int LA83_1 = input.LA(2);
+                    if ( (LA85_0==ID) ) {
+                        int LA85_1 = input.LA(2);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))) ) {
-                            alt83=1;
+                            alt85=1;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))) ) {
-                            alt83=2;
+                            alt85=2;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.MATCHES))) ) {
-                            alt83=3;
+                            alt85=3;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))) ) {
-                            alt83=4;
+                            alt85=4;
                         }
                         else if ( (true) ) {
-                            alt83=5;
+                            alt85=5;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("785:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 83, 1, input);
+                                new NoViableAltException("809:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 85, 1, input);
 
                             throw nvae;
                         }
                     }
-                    else if ( (LA83_0==GRAVE_ACCENT) ) {
-                        alt83=6;
+                    else if ( (LA85_0==GRAVE_ACCENT) ) {
+                        alt85=6;
                     }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("785:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 83, 0, input);
+                            new NoViableAltException("809:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 85, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt83) {
+                    switch (alt85) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:13: contains_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809:13: contains_key
                             {
-                            pushFollow(FOLLOW_contains_key_in_simple_operator3436);
-                            contains_key251=contains_key();
+                            pushFollow(FOLLOW_contains_key_in_simple_operator3489);
+                            contains_key257=contains_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key251.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key257.getTree(), root_0);
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:27: soundslike_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809:27: soundslike_key
                             {
-                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3439);
-                            soundslike_key252=soundslike_key();
+                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3492);
+                            soundslike_key258=soundslike_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key252.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key258.getTree(), root_0);
 
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:43: matches_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809:43: matches_key
                             {
-                            pushFollow(FOLLOW_matches_key_in_simple_operator3442);
-                            matches_key253=matches_key();
+                            pushFollow(FOLLOW_matches_key_in_simple_operator3495);
+                            matches_key259=matches_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key253.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key259.getTree(), root_0);
 
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:56: memberof_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809:56: memberof_key
                             {
-                            pushFollow(FOLLOW_memberof_key_in_simple_operator3445);
-                            memberof_key254=memberof_key();
+                            pushFollow(FOLLOW_memberof_key_in_simple_operator3498);
+                            memberof_key260=memberof_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key254.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key260.getTree(), root_0);
 
                             }
                             break;
                         case 5 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:71: ID
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809:71: ID
                             {
-                            ID255=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator3449); if (failed) return retval;
+                            ID261=(Token)input.LT(1);
+                            match(input,ID,FOLLOW_ID_in_simple_operator3502); if (failed) return retval;
                             if ( backtracking==0 ) {
-                            ID255_tree = (Object)adaptor.create(ID255);
-                            root_0 = (Object)adaptor.becomeRoot(ID255_tree, root_0);
+                            ID261_tree = (Object)adaptor.create(ID261);
+                            root_0 = (Object)adaptor.becomeRoot(ID261_tree, root_0);
                             }
 
                             }
                             break;
                         case 6 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:77: GRAVE_ACCENT ID square_chunk
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809:77: GRAVE_ACCENT ID square_chunk
                             {
-                            GRAVE_ACCENT256=(Token)input.LT(1);
-                            match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3454); if (failed) return retval;
-                            ID257=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator3457); if (failed) return retval;
+                            GRAVE_ACCENT262=(Token)input.LT(1);
+                            match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3507); if (failed) return retval;
+                            ID263=(Token)input.LT(1);
+                            match(input,ID,FOLLOW_ID_in_simple_operator3510); if (failed) return retval;
                             if ( backtracking==0 ) {
-                            ID257_tree = (Object)adaptor.create(ID257);
-                            root_0 = (Object)adaptor.becomeRoot(ID257_tree, root_0);
+                            ID263_tree = (Object)adaptor.create(ID263);
+                            root_0 = (Object)adaptor.becomeRoot(ID263_tree, root_0);
                             }
-                            pushFollow(FOLLOW_square_chunk_in_simple_operator3460);
-                            square_chunk258=square_chunk();
+                            pushFollow(FOLLOW_square_chunk_in_simple_operator3513);
+                            square_chunk264=square_chunk();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk258.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk264.getTree());
 
                             }
                             break;
@@ -10831,99 +11079,99 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:4: contains_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:810:4: contains_key
                     {
-                    pushFollow(FOLLOW_contains_key_in_simple_operator3466);
-                    contains_key259=contains_key();
+                    pushFollow(FOLLOW_contains_key_in_simple_operator3519);
+                    contains_key265=contains_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key259.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key265.getTree(), root_0);
 
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:787:4: excludes_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:811:4: excludes_key
                     {
-                    pushFollow(FOLLOW_excludes_key_in_simple_operator3472);
-                    excludes_key260=excludes_key();
+                    pushFollow(FOLLOW_excludes_key_in_simple_operator3525);
+                    excludes_key266=excludes_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key260.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key266.getTree(), root_0);
 
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:788:4: matches_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:4: matches_key
                     {
-                    pushFollow(FOLLOW_matches_key_in_simple_operator3478);
-                    matches_key261=matches_key();
+                    pushFollow(FOLLOW_matches_key_in_simple_operator3531);
+                    matches_key267=matches_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key261.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key267.getTree(), root_0);
 
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:4: soundslike_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:813:4: soundslike_key
                     {
-                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3484);
-                    soundslike_key262=soundslike_key();
+                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3537);
+                    soundslike_key268=soundslike_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key262.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key268.getTree(), root_0);
 
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:4: memberof_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:814:4: memberof_key
                     {
-                    pushFollow(FOLLOW_memberof_key_in_simple_operator3490);
-                    memberof_key263=memberof_key();
+                    pushFollow(FOLLOW_memberof_key_in_simple_operator3543);
+                    memberof_key269=memberof_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key263.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key269.getTree(), root_0);
 
                     }
                     break;
                 case 13 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:4: ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:815:4: ID
                     {
-                    ID264=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator3496); if (failed) return retval;
+                    ID270=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_simple_operator3549); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    ID264_tree = (Object)adaptor.create(ID264);
-                    root_0 = (Object)adaptor.becomeRoot(ID264_tree, root_0);
+                    ID270_tree = (Object)adaptor.create(ID270);
+                    root_0 = (Object)adaptor.becomeRoot(ID270_tree, root_0);
                     }
 
                     }
                     break;
                 case 14 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:792:4: GRAVE_ACCENT ID square_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:4: GRAVE_ACCENT ID square_chunk
                     {
-                    GRAVE_ACCENT265=(Token)input.LT(1);
-                    match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3502); if (failed) return retval;
-                    ID266=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator3505); if (failed) return retval;
+                    GRAVE_ACCENT271=(Token)input.LT(1);
+                    match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3555); if (failed) return retval;
+                    ID272=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_simple_operator3558); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    ID266_tree = (Object)adaptor.create(ID266);
-                    root_0 = (Object)adaptor.becomeRoot(ID266_tree, root_0);
+                    ID272_tree = (Object)adaptor.create(ID272);
+                    root_0 = (Object)adaptor.becomeRoot(ID272_tree, root_0);
                     }
-                    pushFollow(FOLLOW_square_chunk_in_simple_operator3508);
-                    square_chunk267=square_chunk();
+                    pushFollow(FOLLOW_square_chunk_in_simple_operator3561);
+                    square_chunk273=square_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk267.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk273.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_expression_value_in_simple_operator3512);
-            expression_value268=expression_value();
+            pushFollow(FOLLOW_expression_value_in_simple_operator3565);
+            expression_value274=expression_value();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value268.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value274.getTree());
 
             }
 
@@ -10950,54 +11198,54 @@
     };
 
     // $ANTLR start compound_operator
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:797:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:821:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
     public final compound_operator_return compound_operator() throws RecognitionException {
         compound_operator_return retval = new compound_operator_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN272=null;
-        Token COMMA274=null;
-        Token RIGHT_PAREN276=null;
-        in_key_return in_key269 = null;
+        Token LEFT_PAREN278=null;
+        Token COMMA280=null;
+        Token RIGHT_PAREN282=null;
+        in_key_return in_key275 = null;
 
-        not_key_return not_key270 = null;
+        not_key_return not_key276 = null;
 
-        in_key_return in_key271 = null;
+        in_key_return in_key277 = null;
 
-        expression_value_return expression_value273 = null;
+        expression_value_return expression_value279 = null;
 
-        expression_value_return expression_value275 = null;
+        expression_value_return expression_value281 = null;
 
 
-        Object LEFT_PAREN272_tree=null;
-        Object COMMA274_tree=null;
-        Object RIGHT_PAREN276_tree=null;
+        Object LEFT_PAREN278_tree=null;
+        Object COMMA280_tree=null;
+        Object RIGHT_PAREN282_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:4: ( in_key | not_key in_key )
-            int alt85=2;
-            int LA85_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:4: ( in_key | not_key in_key )
+            int alt87=2;
+            int LA87_0 = input.LA(1);
 
-            if ( (LA85_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IN))||(validateIdentifierKey(DroolsSoftKeywords.NOT))))) {
-                int LA85_1 = input.LA(2);
+            if ( (LA87_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IN))||(validateIdentifierKey(DroolsSoftKeywords.NOT))))) {
+                int LA87_1 = input.LA(2);
 
-                if ( (LA85_1==ID) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                    alt85=2;
+                if ( (LA87_1==ID) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                    alt87=2;
                 }
-                else if ( (LA85_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.IN)))) {
-                    alt85=1;
+                else if ( (LA87_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.IN)))) {
+                    alt87=1;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("798:4: ( in_key | not_key in_key )", 85, 1, input);
+                        new NoViableAltException("822:4: ( in_key | not_key in_key )", 87, 1, input);
 
                     throw nvae;
                 }
@@ -11005,84 +11253,84 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("798:4: ( in_key | not_key in_key )", 85, 0, input);
+                    new NoViableAltException("822:4: ( in_key | not_key in_key )", 87, 0, input);
 
                 throw nvae;
             }
-            switch (alt85) {
+            switch (alt87) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:6: in_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:6: in_key
                     {
-                    pushFollow(FOLLOW_in_key_in_compound_operator3527);
-                    in_key269=in_key();
+                    pushFollow(FOLLOW_in_key_in_compound_operator3580);
+                    in_key275=in_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key269.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key275.getTree(), root_0);
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:16: not_key in_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:16: not_key in_key
                     {
-                    pushFollow(FOLLOW_not_key_in_compound_operator3532);
-                    not_key270=not_key();
+                    pushFollow(FOLLOW_not_key_in_compound_operator3585);
+                    not_key276=not_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key270.getTree());
-                    pushFollow(FOLLOW_in_key_in_compound_operator3534);
-                    in_key271=in_key();
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key276.getTree());
+                    pushFollow(FOLLOW_in_key_in_compound_operator3587);
+                    in_key277=in_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key271.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key277.getTree(), root_0);
 
                     }
                     break;
 
             }
 
-            LEFT_PAREN272=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3539); if (failed) return retval;
-            pushFollow(FOLLOW_expression_value_in_compound_operator3542);
-            expression_value273=expression_value();
+            LEFT_PAREN278=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3592); if (failed) return retval;
+            pushFollow(FOLLOW_expression_value_in_compound_operator3595);
+            expression_value279=expression_value();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value273.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:63: ( COMMA expression_value )*
-            loop86:
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value279.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:63: ( COMMA expression_value )*
+            loop88:
             do {
-                int alt86=2;
-                int LA86_0 = input.LA(1);
+                int alt88=2;
+                int LA88_0 = input.LA(1);
 
-                if ( (LA86_0==COMMA) ) {
-                    alt86=1;
+                if ( (LA88_0==COMMA) ) {
+                    alt88=1;
                 }
 
 
-                switch (alt86) {
+                switch (alt88) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:65: COMMA expression_value
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:65: COMMA expression_value
             	    {
-            	    COMMA274=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3546); if (failed) return retval;
-            	    pushFollow(FOLLOW_expression_value_in_compound_operator3549);
-            	    expression_value275=expression_value();
+            	    COMMA280=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3599); if (failed) return retval;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator3602);
+            	    expression_value281=expression_value();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value275.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value281.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop86;
+            	    break loop88;
                 }
             } while (true);
 
-            RIGHT_PAREN276=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3554); if (failed) return retval;
+            RIGHT_PAREN282=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3607); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_PAREN276_tree = (Object)adaptor.create(RIGHT_PAREN276);
-            adaptor.addChild(root_0, RIGHT_PAREN276_tree);
+            RIGHT_PAREN282_tree = (Object)adaptor.create(RIGHT_PAREN282);
+            adaptor.addChild(root_0, RIGHT_PAREN282_tree);
             }
 
             }
@@ -11110,28 +11358,28 @@
     };
 
     // $ANTLR start expression_value
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:801:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:825:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );
     public final expression_value_return expression_value() throws RecognitionException {
         expression_value_return retval = new expression_value_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        accessor_path_return accessor_path277 = null;
+        accessor_path_return accessor_path283 = null;
 
-        literal_constraint_return literal_constraint278 = null;
+        literal_constraint_return literal_constraint284 = null;
 
-        paren_chunk_return paren_chunk279 = null;
+        paren_chunk_return paren_chunk285 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:802:2: ( accessor_path | literal_constraint | paren_chunk )
-            int alt87=3;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:826:2: ( accessor_path | literal_constraint | paren_chunk )
+            int alt89=3;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                alt87=1;
+                alt89=1;
                 }
                 break;
             case STRING:
@@ -11140,59 +11388,59 @@
             case FLOAT:
             case NULL:
                 {
-                alt87=2;
+                alt89=2;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt87=3;
+                alt89=3;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("801:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 87, 0, input);
+                    new NoViableAltException("825:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 89, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt87) {
+            switch (alt89) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:802:4: accessor_path
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:826:4: accessor_path
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_accessor_path_in_expression_value3565);
-                    accessor_path277=accessor_path();
+                    pushFollow(FOLLOW_accessor_path_in_expression_value3618);
+                    accessor_path283=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path277.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path283.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:803:4: literal_constraint
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827:4: literal_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value3570);
-                    literal_constraint278=literal_constraint();
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value3623);
+                    literal_constraint284=literal_constraint();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint278.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint284.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:804:4: paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:4: paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_paren_chunk_in_expression_value3576);
-                    paren_chunk279=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_expression_value3629);
+                    paren_chunk285=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk279.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk285.getTree());
 
                     }
                     break;
@@ -11221,27 +11469,27 @@
     };
 
     // $ANTLR start literal_constraint
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:807:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:831:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
     public final literal_constraint_return literal_constraint() throws RecognitionException {
         literal_constraint_return retval = new literal_constraint_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token set280=null;
+        Token set286=null;
 
-        Object set280_tree=null;
+        Object set286_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:808:2: ( STRING | INT | FLOAT | BOOL | NULL )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:832:2: ( STRING | INT | FLOAT | BOOL | NULL )
             // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             {
             root_0 = (Object)adaptor.nil();
 
-            set280=(Token)input.LT(1);
+            set286=(Token)input.LT(1);
             if ( input.LA(1)==STRING||(input.LA(1)>=BOOL && input.LA(1)<=INT)||(input.LA(1)>=FLOAT && input.LA(1)<=NULL) ) {
                 input.consume();
-                if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set280));
+                if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set286));
                 errorRecovery=false;failed=false;
             }
             else {
@@ -11277,7 +11525,7 @@
     };
 
     // $ANTLR start pattern_type
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:815:1: pattern_type : id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:1: pattern_type : id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) ;
     public final pattern_type_return pattern_type() throws RecognitionException {
         pattern_type_return retval = new pattern_type_return();
         retval.start = input.LT(1);
@@ -11286,7 +11534,7 @@
 
         Token id=null;
         List list_id=null;
-        dimension_definition_return dimension_definition281 = null;
+        dimension_definition_return dimension_definition287 = null;
 
 
         Object id_tree=null;
@@ -11294,40 +11542,40 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_dimension_definition=new RewriteRuleSubtreeStream(adaptor,"rule dimension_definition");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:2: (id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:4: id+= ID (id+= DOT id+= ID )* ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:2: (id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:4: id+= ID (id+= DOT id+= ID )* ( dimension_definition )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_pattern_type3620); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_pattern_type3673); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if (list_id==null) list_id=new ArrayList();
             list_id.add(id);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:11: (id+= DOT id+= ID )*
-            loop88:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:11: (id+= DOT id+= ID )*
+            loop90:
             do {
-                int alt88=2;
-                int LA88_0 = input.LA(1);
+                int alt90=2;
+                int LA90_0 = input.LA(1);
 
-                if ( (LA88_0==DOT) ) {
-                    alt88=1;
+                if ( (LA90_0==DOT) ) {
+                    alt90=1;
                 }
 
 
-                switch (alt88) {
+                switch (alt90) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:13: id+= DOT id+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_pattern_type3626); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_pattern_type3679); if (failed) return retval;
             	    if ( backtracking==0 ) stream_DOT.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
             	    list_id.add(id);
 
             	    id=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_pattern_type3630); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_pattern_type3683); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
@@ -11338,45 +11586,45 @@
             	    break;
 
             	default :
-            	    break loop88;
+            	    break loop90;
                 }
             } while (true);
 
             if ( backtracking==0 ) {
               	setParaphrasesValue(DroolsParaphareseTypes.PATTERN, buildStringFromTokens(list_id));	
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:818:6: ( dimension_definition )*
-            loop89:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:842:6: ( dimension_definition )*
+            loop91:
             do {
-                int alt89=2;
-                int LA89_0 = input.LA(1);
+                int alt91=2;
+                int LA91_0 = input.LA(1);
 
-                if ( (LA89_0==LEFT_SQUARE) ) {
-                    alt89=1;
+                if ( (LA91_0==LEFT_SQUARE) ) {
+                    alt91=1;
                 }
 
 
-                switch (alt89) {
+                switch (alt91) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:818:6: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:842:6: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type3645);
-            	    dimension_definition281=dimension_definition();
+            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type3698);
+            	    dimension_definition287=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition281.getTree());
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition287.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop89;
+            	    break loop91;
                 }
             } while (true);
 
 
             // AST REWRITE
-            // elements: ID, dimension_definition
+            // elements: dimension_definition, ID
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -11386,9 +11634,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 819:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
+            // 843:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:6: ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:843:6: ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN_TYPE, "VT_PATTERN_TYPE"), root_1);
@@ -11401,7 +11649,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:28: ( dimension_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:843:28: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -11440,91 +11688,91 @@
     };
 
     // $ANTLR start data_type
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:1: data_type : ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:1: data_type : ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
     public final data_type_return data_type() throws RecognitionException {
         data_type_return retval = new data_type_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID282=null;
-        Token DOT283=null;
-        Token ID284=null;
-        dimension_definition_return dimension_definition285 = null;
+        Token ID288=null;
+        Token DOT289=null;
+        Token ID290=null;
+        dimension_definition_return dimension_definition291 = null;
 
 
-        Object ID282_tree=null;
-        Object DOT283_tree=null;
-        Object ID284_tree=null;
+        Object ID288_tree=null;
+        Object DOT289_tree=null;
+        Object ID290_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_dimension_definition=new RewriteRuleSubtreeStream(adaptor,"rule dimension_definition");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:4: ID ( DOT ID )* ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:4: ID ( DOT ID )* ( dimension_definition )*
             {
-            ID282=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_data_type3671); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID282);
+            ID288=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_data_type3724); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID288);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:7: ( DOT ID )*
-            loop90:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:7: ( DOT ID )*
+            loop92:
             do {
-                int alt90=2;
-                int LA90_0 = input.LA(1);
+                int alt92=2;
+                int LA92_0 = input.LA(1);
 
-                if ( (LA90_0==DOT) ) {
-                    alt90=1;
+                if ( (LA92_0==DOT) ) {
+                    alt92=1;
                 }
 
 
-                switch (alt90) {
+                switch (alt92) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:9: DOT ID
             	    {
-            	    DOT283=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_data_type3675); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT283);
+            	    DOT289=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_data_type3728); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT289);
 
-            	    ID284=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_data_type3677); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_ID.add(ID284);
+            	    ID290=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_data_type3730); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(ID290);
 
 
             	    }
             	    break;
 
             	default :
-            	    break loop90;
+            	    break loop92;
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:19: ( dimension_definition )*
-            loop91:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:19: ( dimension_definition )*
+            loop93:
             do {
-                int alt91=2;
-                int LA91_0 = input.LA(1);
+                int alt93=2;
+                int LA93_0 = input.LA(1);
 
-                if ( (LA91_0==LEFT_SQUARE) ) {
-                    alt91=1;
+                if ( (LA93_0==LEFT_SQUARE) ) {
+                    alt93=1;
                 }
 
 
-                switch (alt91) {
+                switch (alt93) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:19: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:19: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_data_type3682);
-            	    dimension_definition285=dimension_definition();
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type3735);
+            	    dimension_definition291=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition285.getTree());
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition291.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop91;
+            	    break loop93;
                 }
             } while (true);
 
@@ -11540,9 +11788,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 824:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            // 848:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:824:6: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:848:6: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_DATA_TYPE, "VT_DATA_TYPE"), root_1);
@@ -11555,7 +11803,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:824:25: ( dimension_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:848:25: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -11594,36 +11842,36 @@
     };
 
     // $ANTLR start dimension_definition
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:851:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
     public final dimension_definition_return dimension_definition() throws RecognitionException {
         dimension_definition_return retval = new dimension_definition_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_SQUARE286=null;
-        Token RIGHT_SQUARE287=null;
+        Token LEFT_SQUARE292=null;
+        Token RIGHT_SQUARE293=null;
 
-        Object LEFT_SQUARE286_tree=null;
-        Object RIGHT_SQUARE287_tree=null;
+        Object LEFT_SQUARE292_tree=null;
+        Object RIGHT_SQUARE293_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:2: ( LEFT_SQUARE RIGHT_SQUARE )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:4: LEFT_SQUARE RIGHT_SQUARE
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:852:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:852:4: LEFT_SQUARE RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_SQUARE286=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3708); if (failed) return retval;
+            LEFT_SQUARE292=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3761); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_SQUARE286_tree = (Object)adaptor.create(LEFT_SQUARE286);
-            adaptor.addChild(root_0, LEFT_SQUARE286_tree);
+            LEFT_SQUARE292_tree = (Object)adaptor.create(LEFT_SQUARE292);
+            adaptor.addChild(root_0, LEFT_SQUARE292_tree);
             }
-            RIGHT_SQUARE287=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3710); if (failed) return retval;
+            RIGHT_SQUARE293=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3763); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_SQUARE287_tree = (Object)adaptor.create(RIGHT_SQUARE287);
-            adaptor.addChild(root_0, RIGHT_SQUARE287_tree);
+            RIGHT_SQUARE293_tree = (Object)adaptor.create(RIGHT_SQUARE293);
+            adaptor.addChild(root_0, RIGHT_SQUARE293_tree);
             }
 
             }
@@ -11651,61 +11899,61 @@
     };
 
     // $ANTLR start accessor_path
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:831:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
     public final accessor_path_return accessor_path() throws RecognitionException {
         accessor_path_return retval = new accessor_path_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOT289=null;
-        accessor_element_return accessor_element288 = null;
+        Token DOT295=null;
+        accessor_element_return accessor_element294 = null;
 
-        accessor_element_return accessor_element290 = null;
+        accessor_element_return accessor_element296 = null;
 
 
-        Object DOT289_tree=null;
+        Object DOT295_tree=null;
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_accessor_element=new RewriteRuleSubtreeStream(adaptor,"rule accessor_element");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:832:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:832:4: accessor_element ( DOT accessor_element )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:856:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:856:4: accessor_element ( DOT accessor_element )*
             {
-            pushFollow(FOLLOW_accessor_element_in_accessor_path3721);
-            accessor_element288=accessor_element();
+            pushFollow(FOLLOW_accessor_element_in_accessor_path3774);
+            accessor_element294=accessor_element();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_accessor_element.add(accessor_element288.getTree());
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:832:21: ( DOT accessor_element )*
-            loop92:
+            if ( backtracking==0 ) stream_accessor_element.add(accessor_element294.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:856:21: ( DOT accessor_element )*
+            loop94:
             do {
-                int alt92=2;
-                int LA92_0 = input.LA(1);
+                int alt94=2;
+                int LA94_0 = input.LA(1);
 
-                if ( (LA92_0==DOT) ) {
-                    alt92=1;
+                if ( (LA94_0==DOT) ) {
+                    alt94=1;
                 }
 
 
-                switch (alt92) {
+                switch (alt94) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:832:23: DOT accessor_element
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:856:23: DOT accessor_element
             	    {
-            	    DOT289=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3725); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT289);
+            	    DOT295=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3778); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT295);
 
-            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3727);
-            	    accessor_element290=accessor_element();
+            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3780);
+            	    accessor_element296=accessor_element();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element290.getTree());
+            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element296.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop92;
+            	    break loop94;
                 }
             } while (true);
 
@@ -11721,9 +11969,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 833:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+            // 857:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:5: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:857:5: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCESSOR_PATH, "VT_ACCESSOR_PATH"), root_1);
@@ -11769,54 +12017,54 @@
     };
 
     // $ANTLR start accessor_element
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:836:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
     public final accessor_element_return accessor_element() throws RecognitionException {
         accessor_element_return retval = new accessor_element_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID291=null;
-        square_chunk_return square_chunk292 = null;
+        Token ID297=null;
+        square_chunk_return square_chunk298 = null;
 
 
-        Object ID291_tree=null;
+        Object ID297_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:837:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:837:4: ID ( square_chunk )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:861:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:861:4: ID ( square_chunk )*
             {
-            ID291=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accessor_element3751); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID291);
+            ID297=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accessor_element3804); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID297);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:837:7: ( square_chunk )*
-            loop93:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:861:7: ( square_chunk )*
+            loop95:
             do {
-                int alt93=2;
-                int LA93_0 = input.LA(1);
+                int alt95=2;
+                int LA95_0 = input.LA(1);
 
-                if ( (LA93_0==LEFT_SQUARE) ) {
-                    alt93=1;
+                if ( (LA95_0==LEFT_SQUARE) ) {
+                    alt95=1;
                 }
 
 
-                switch (alt93) {
+                switch (alt95) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:837:7: square_chunk
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:861:7: square_chunk
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3753);
-            	    square_chunk292=square_chunk();
+            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3806);
+            	    square_chunk298=square_chunk();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk292.getTree());
+            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk298.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop93;
+            	    break loop95;
                 }
             } while (true);
 
@@ -11832,15 +12080,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 838:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+            // 862:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:838:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:862:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCESSOR_ELEMENT, "VT_ACCESSOR_ELEMENT"), root_1);
 
                 adaptor.addChild(root_1, stream_ID.next());
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:838:30: ( square_chunk )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:862:30: ( square_chunk )*
                 while ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
@@ -11879,7 +12127,7 @@
     };
 
     // $ANTLR start rhs_chunk
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:841:1: rhs_chunk : rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:865:1: rhs_chunk : rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] ;
     public final rhs_chunk_return rhs_chunk() throws RecognitionException {
         rhs_chunk_return retval = new rhs_chunk_return();
         retval.start = input.LT(1);
@@ -11894,10 +12142,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:844:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:844:5: rc= rhs_chunk_data
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:868:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:868:5: rc= rhs_chunk_data
             {
-            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3782);
+            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3835);
             rc=rhs_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -11917,7 +12165,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 845:2: -> VT_RHS_CHUNK[$rc.start,text]
+            // 869:2: -> VT_RHS_CHUNK[$rc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_RHS_CHUNK, ((Token)rc.start), text));
 
@@ -11950,61 +12198,61 @@
     };
 
     // $ANTLR start rhs_chunk_data
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:848:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:872:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
     public final rhs_chunk_data_return rhs_chunk_data() throws RecognitionException {
         rhs_chunk_data_return retval = new rhs_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token THEN293=null;
-        Token set294=null;
-        Token END295=null;
-        Token SEMICOLON296=null;
+        Token THEN299=null;
+        Token set300=null;
+        Token END301=null;
+        Token SEMICOLON302=null;
 
-        Object THEN293_tree=null;
-        Object set294_tree=null;
-        Object END295_tree=null;
-        Object SEMICOLON296_tree=null;
+        Object THEN299_tree=null;
+        Object set300_tree=null;
+        Object END301_tree=null;
+        Object SEMICOLON302_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:2: ( THEN (~ END )* END ( SEMICOLON )? )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:4: THEN (~ END )* END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:2: ( THEN (~ END )* END ( SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:4: THEN (~ END )* END ( SEMICOLON )?
             {
             root_0 = (Object)adaptor.nil();
 
-            THEN293=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3801); if (failed) return retval;
+            THEN299=(Token)input.LT(1);
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3854); if (failed) return retval;
             if ( backtracking==0 ) {
-            THEN293_tree = (Object)adaptor.create(THEN293);
-            adaptor.addChild(root_0, THEN293_tree);
+            THEN299_tree = (Object)adaptor.create(THEN299);
+            adaptor.addChild(root_0, THEN299_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:9: (~ END )*
-            loop94:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:9: (~ END )*
+            loop96:
             do {
-                int alt94=2;
-                int LA94_0 = input.LA(1);
+                int alt96=2;
+                int LA96_0 = input.LA(1);
 
-                if ( ((LA94_0>=VT_COMPILATION_UNIT && LA94_0<=DOT_STAR)||(LA94_0>=STRING && LA94_0<=MULTI_LINE_COMMENT)) ) {
-                    alt94=1;
+                if ( ((LA96_0>=VT_COMPILATION_UNIT && LA96_0<=DOT_STAR)||(LA96_0>=STRING && LA96_0<=MULTI_LINE_COMMENT)) ) {
+                    alt96=1;
                 }
 
 
-                switch (alt94) {
+                switch (alt96) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:11: ~ END
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:11: ~ END
             	    {
-            	    set294=(Token)input.LT(1);
+            	    set300=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=DOT_STAR)||(input.LA(1)>=STRING && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set294));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set300));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3805);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3858);    throw mse;
             	    }
 
 
@@ -12012,32 +12260,32 @@
             	    break;
 
             	default :
-            	    break loop94;
+            	    break loop96;
                 }
             } while (true);
 
-            END295=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk_data3811); if (failed) return retval;
+            END301=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_rhs_chunk_data3864); if (failed) return retval;
             if ( backtracking==0 ) {
-            END295_tree = (Object)adaptor.create(END295);
-            adaptor.addChild(root_0, END295_tree);
+            END301_tree = (Object)adaptor.create(END301);
+            adaptor.addChild(root_0, END301_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:23: ( SEMICOLON )?
-            int alt95=2;
-            int LA95_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:23: ( SEMICOLON )?
+            int alt97=2;
+            int LA97_0 = input.LA(1);
 
-            if ( (LA95_0==SEMICOLON) ) {
-                alt95=1;
+            if ( (LA97_0==SEMICOLON) ) {
+                alt97=1;
             }
-            switch (alt95) {
+            switch (alt97) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:23: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:23: SEMICOLON
                     {
-                    SEMICOLON296=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3813); if (failed) return retval;
+                    SEMICOLON302=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3866); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    SEMICOLON296_tree = (Object)adaptor.create(SEMICOLON296);
-                    adaptor.addChild(root_0, SEMICOLON296_tree);
+                    SEMICOLON302_tree = (Object)adaptor.create(SEMICOLON302);
+                    adaptor.addChild(root_0, SEMICOLON302_tree);
                     }
 
                     }
@@ -12071,7 +12319,7 @@
     };
 
     // $ANTLR start curly_chunk
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:852:1: curly_chunk : cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:876:1: curly_chunk : cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] ;
     public final curly_chunk_return curly_chunk() throws RecognitionException {
         curly_chunk_return retval = new curly_chunk_return();
         retval.start = input.LT(1);
@@ -12086,10 +12334,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:5: cc= curly_chunk_data
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:879:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:879:5: cc= curly_chunk_data
             {
-            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3830);
+            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3883);
             cc=curly_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -12109,7 +12357,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 856:2: -> VT_CURLY_CHUNK[$cc.start,text]
+            // 880:2: -> VT_CURLY_CHUNK[$cc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_CURLY_CHUNK, ((Token)cc.start), text));
 
@@ -12142,91 +12390,91 @@
     };
 
     // $ANTLR start curly_chunk_data
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:859:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:883:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
     public final curly_chunk_data_return curly_chunk_data() throws RecognitionException {
         curly_chunk_data_return retval = new curly_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_CURLY297=null;
-        Token set298=null;
-        Token RIGHT_CURLY300=null;
-        curly_chunk_data_return curly_chunk_data299 = null;
+        Token LEFT_CURLY303=null;
+        Token set304=null;
+        Token RIGHT_CURLY306=null;
+        curly_chunk_data_return curly_chunk_data305 = null;
 
 
-        Object LEFT_CURLY297_tree=null;
-        Object set298_tree=null;
-        Object RIGHT_CURLY300_tree=null;
+        Object LEFT_CURLY303_tree=null;
+        Object set304_tree=null;
+        Object RIGHT_CURLY306_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:884:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:884:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_CURLY297=(Token)input.LT(1);
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3849); if (failed) return retval;
+            LEFT_CURLY303=(Token)input.LT(1);
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3902); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_CURLY297_tree = (Object)adaptor.create(LEFT_CURLY297);
-            adaptor.addChild(root_0, LEFT_CURLY297_tree);
+            LEFT_CURLY303_tree = (Object)adaptor.create(LEFT_CURLY303);
+            adaptor.addChild(root_0, LEFT_CURLY303_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
-            loop96:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:884:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
+            loop98:
             do {
-                int alt96=3;
-                int LA96_0 = input.LA(1);
+                int alt98=3;
+                int LA98_0 = input.LA(1);
 
-                if ( ((LA96_0>=VT_COMPILATION_UNIT && LA96_0<=THEN)||(LA96_0>=MISC && LA96_0<=MULTI_LINE_COMMENT)) ) {
-                    alt96=1;
+                if ( ((LA98_0>=VT_COMPILATION_UNIT && LA98_0<=THEN)||(LA98_0>=MISC && LA98_0<=MULTI_LINE_COMMENT)) ) {
+                    alt98=1;
                 }
-                else if ( (LA96_0==LEFT_CURLY) ) {
-                    alt96=2;
+                else if ( (LA98_0==LEFT_CURLY) ) {
+                    alt98=2;
                 }
 
 
-                switch (alt96) {
+                switch (alt98) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:884:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
-            	    set298=(Token)input.LT(1);
+            	    set304=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=THEN)||(input.LA(1)>=MISC && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set298));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set304));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3852);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3905);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:49: curly_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:884:49: curly_chunk_data
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3866);
-            	    curly_chunk_data299=curly_chunk_data();
+            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3919);
+            	    curly_chunk_data305=curly_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data299.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data305.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop96;
+            	    break loop98;
                 }
             } while (true);
 
-            RIGHT_CURLY300=(Token)input.LT(1);
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3871); if (failed) return retval;
+            RIGHT_CURLY306=(Token)input.LT(1);
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3924); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_CURLY300_tree = (Object)adaptor.create(RIGHT_CURLY300);
-            adaptor.addChild(root_0, RIGHT_CURLY300_tree);
+            RIGHT_CURLY306_tree = (Object)adaptor.create(RIGHT_CURLY306);
+            adaptor.addChild(root_0, RIGHT_CURLY306_tree);
             }
 
             }
@@ -12254,7 +12502,7 @@
     };
 
     // $ANTLR start paren_chunk
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:863:1: paren_chunk : pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:887:1: paren_chunk : pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] ;
     public final paren_chunk_return paren_chunk() throws RecognitionException {
         paren_chunk_return retval = new paren_chunk_return();
         retval.start = input.LT(1);
@@ -12269,10 +12517,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:866:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:866:5: pc= paren_chunk_data
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:890:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:890:5: pc= paren_chunk_data
             {
-            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3887);
+            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3940);
             pc=paren_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -12292,7 +12540,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 867:2: -> VT_PAREN_CHUNK[$pc.start,text]
+            // 891:2: -> VT_PAREN_CHUNK[$pc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_PAREN_CHUNK, ((Token)pc.start), text));
 
@@ -12325,91 +12573,91 @@
     };
 
     // $ANTLR start paren_chunk_data
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:870:1: paren_chunk_data : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:894:1: paren_chunk_data : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
     public final paren_chunk_data_return paren_chunk_data() throws RecognitionException {
         paren_chunk_data_return retval = new paren_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN301=null;
-        Token set302=null;
-        Token RIGHT_PAREN304=null;
-        paren_chunk_data_return paren_chunk_data303 = null;
+        Token LEFT_PAREN307=null;
+        Token set308=null;
+        Token RIGHT_PAREN310=null;
+        paren_chunk_data_return paren_chunk_data309 = null;
 
 
-        Object LEFT_PAREN301_tree=null;
-        Object set302_tree=null;
-        Object RIGHT_PAREN304_tree=null;
+        Object LEFT_PAREN307_tree=null;
+        Object set308_tree=null;
+        Object RIGHT_PAREN310_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:2: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:4: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:2: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:4: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_PAREN301=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3907); if (failed) return retval;
+            LEFT_PAREN307=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3960); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_PAREN301_tree = (Object)adaptor.create(LEFT_PAREN301);
-            adaptor.addChild(root_0, LEFT_PAREN301_tree);
+            LEFT_PAREN307_tree = (Object)adaptor.create(LEFT_PAREN307);
+            adaptor.addChild(root_0, LEFT_PAREN307_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
-            loop97:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
+            loop99:
             do {
-                int alt97=3;
-                int LA97_0 = input.LA(1);
+                int alt99=3;
+                int LA99_0 = input.LA(1);
 
-                if ( ((LA97_0>=VT_COMPILATION_UNIT && LA97_0<=STRING)||LA97_0==COMMA||(LA97_0>=AT && LA97_0<=MULTI_LINE_COMMENT)) ) {
-                    alt97=1;
+                if ( ((LA99_0>=VT_COMPILATION_UNIT && LA99_0<=STRING)||LA99_0==COMMA||(LA99_0>=AT && LA99_0<=MULTI_LINE_COMMENT)) ) {
+                    alt99=1;
                 }
-                else if ( (LA97_0==LEFT_PAREN) ) {
-                    alt97=2;
+                else if ( (LA99_0==LEFT_PAREN) ) {
+                    alt99=2;
                 }
 
 
-                switch (alt97) {
+                switch (alt99) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
-            	    set302=(Token)input.LT(1);
+            	    set308=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=STRING)||input.LA(1)==COMMA||(input.LA(1)>=AT && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set302));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set308));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3910);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3963);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:49: paren_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:49: paren_chunk_data
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3924);
-            	    paren_chunk_data303=paren_chunk_data();
+            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3977);
+            	    paren_chunk_data309=paren_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data303.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data309.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop97;
+            	    break loop99;
                 }
             } while (true);
 
-            RIGHT_PAREN304=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3929); if (failed) return retval;
+            RIGHT_PAREN310=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3982); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_PAREN304_tree = (Object)adaptor.create(RIGHT_PAREN304);
-            adaptor.addChild(root_0, RIGHT_PAREN304_tree);
+            RIGHT_PAREN310_tree = (Object)adaptor.create(RIGHT_PAREN310);
+            adaptor.addChild(root_0, RIGHT_PAREN310_tree);
             }
 
             }
@@ -12437,7 +12685,7 @@
     };
 
     // $ANTLR start square_chunk
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874:1: square_chunk : sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:898:1: square_chunk : sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] ;
     public final square_chunk_return square_chunk() throws RecognitionException {
         square_chunk_return retval = new square_chunk_return();
         retval.start = input.LT(1);
@@ -12452,10 +12700,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:877:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:877:5: sc= square_chunk_data
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:901:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:901:5: sc= square_chunk_data
             {
-            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3946);
+            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3999);
             sc=square_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -12475,7 +12723,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 878:2: -> VT_SQUARE_CHUNK[$sc.start,text]
+            // 902:2: -> VT_SQUARE_CHUNK[$sc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SQUARE_CHUNK, ((Token)sc.start), text));
 
@@ -12508,91 +12756,91 @@
     };
 
     // $ANTLR start square_chunk_data
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:881:1: square_chunk_data : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:905:1: square_chunk_data : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
     public final square_chunk_data_return square_chunk_data() throws RecognitionException {
         square_chunk_data_return retval = new square_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_SQUARE305=null;
-        Token set306=null;
-        Token RIGHT_SQUARE308=null;
-        square_chunk_data_return square_chunk_data307 = null;
+        Token LEFT_SQUARE311=null;
+        Token set312=null;
+        Token RIGHT_SQUARE314=null;
+        square_chunk_data_return square_chunk_data313 = null;
 
 
-        Object LEFT_SQUARE305_tree=null;
-        Object set306_tree=null;
-        Object RIGHT_SQUARE308_tree=null;
+        Object LEFT_SQUARE311_tree=null;
+        Object set312_tree=null;
+        Object RIGHT_SQUARE314_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:882:2: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:882:4: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:906:2: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:906:4: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_SQUARE305=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3965); if (failed) return retval;
+            LEFT_SQUARE311=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data4018); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_SQUARE305_tree = (Object)adaptor.create(LEFT_SQUARE305);
-            adaptor.addChild(root_0, LEFT_SQUARE305_tree);
+            LEFT_SQUARE311_tree = (Object)adaptor.create(LEFT_SQUARE311);
+            adaptor.addChild(root_0, LEFT_SQUARE311_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:882:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
-            loop98:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:906:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
+            loop100:
             do {
-                int alt98=3;
-                int LA98_0 = input.LA(1);
+                int alt100=3;
+                int LA100_0 = input.LA(1);
 
-                if ( ((LA98_0>=VT_COMPILATION_UNIT && LA98_0<=NULL)||(LA98_0>=THEN && LA98_0<=MULTI_LINE_COMMENT)) ) {
-                    alt98=1;
+                if ( ((LA100_0>=VT_COMPILATION_UNIT && LA100_0<=NULL)||(LA100_0>=THEN && LA100_0<=MULTI_LINE_COMMENT)) ) {
+                    alt100=1;
                 }
-                else if ( (LA98_0==LEFT_SQUARE) ) {
-                    alt98=2;
+                else if ( (LA100_0==LEFT_SQUARE) ) {
+                    alt100=2;
                 }
 
 
-                switch (alt98) {
+                switch (alt100) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:882:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:906:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
-            	    set306=(Token)input.LT(1);
+            	    set312=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=NULL)||(input.LA(1)>=THEN && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set306));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set312));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data3968);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data4021);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:882:52: square_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:906:52: square_chunk_data
             	    {
-            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3982);
-            	    square_chunk_data307=square_chunk_data();
+            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data4035);
+            	    square_chunk_data313=square_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data307.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data313.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop98;
+            	    break loop100;
                 }
             } while (true);
 
-            RIGHT_SQUARE308=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3987); if (failed) return retval;
+            RIGHT_SQUARE314=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data4040); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_SQUARE308_tree = (Object)adaptor.create(RIGHT_SQUARE308);
-            adaptor.addChild(root_0, RIGHT_SQUARE308_tree);
+            RIGHT_SQUARE314_tree = (Object)adaptor.create(RIGHT_SQUARE314);
+            adaptor.addChild(root_0, RIGHT_SQUARE314_tree);
             }
 
             }
@@ -12620,20 +12868,20 @@
     };
 
     // $ANTLR start date_effective_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:886:1: date_effective_key : {...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:910:1: date_effective_key : {...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] ;
     public final date_effective_key_return date_effective_key() throws RecognitionException {
         date_effective_key_return retval = new date_effective_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID309=null;
-        Token MISC310=null;
-        Token ID311=null;
+        Token ID315=null;
+        Token MISC316=null;
+        Token ID317=null;
 
-        Object ID309_tree=null;
-        Object MISC310_tree=null;
-        Object ID311_tree=null;
+        Object ID315_tree=null;
+        Object MISC316_tree=null;
+        Object ID317_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12641,24 +12889,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:889:3: ({...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:889:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:3: ({...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "date_effective_key", "(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))");
             }
-            ID309=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key4006); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID309);
+            ID315=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key4059); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID315);
 
-            MISC310=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_effective_key4008); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC310);
+            MISC316=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_effective_key4061); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC316);
 
-            ID311=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key4010); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID311);
+            ID317=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key4063); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID317);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12675,7 +12923,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 890:2: -> VK_DATE_EFFECTIVE[$start, text]
+            // 914:2: -> VK_DATE_EFFECTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EFFECTIVE, ((Token)retval.start),  text));
 
@@ -12708,20 +12956,20 @@
     };
 
     // $ANTLR start date_expires_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:893:1: date_expires_key : {...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:917:1: date_expires_key : {...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] ;
     public final date_expires_key_return date_expires_key() throws RecognitionException {
         date_expires_key_return retval = new date_expires_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID312=null;
-        Token MISC313=null;
-        Token ID314=null;
+        Token ID318=null;
+        Token MISC319=null;
+        Token ID320=null;
 
-        Object ID312_tree=null;
-        Object MISC313_tree=null;
-        Object ID314_tree=null;
+        Object ID318_tree=null;
+        Object MISC319_tree=null;
+        Object ID320_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12729,24 +12977,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:896:3: ({...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:896:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:3: ({...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "date_expires_key", "(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.EXPIRES))");
             }
-            ID312=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key4036); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID312);
+            ID318=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key4089); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID318);
 
-            MISC313=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_expires_key4038); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC313);
+            MISC319=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_expires_key4091); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC319);
 
-            ID314=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key4040); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID314);
+            ID320=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key4093); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID320);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12763,7 +13011,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 897:2: -> VK_DATE_EXPIRES[$start, text]
+            // 921:2: -> VK_DATE_EXPIRES[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EXPIRES, ((Token)retval.start),  text));
 
@@ -12796,24 +13044,24 @@
     };
 
     // $ANTLR start lock_on_active_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:1: lock_on_active_key : {...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:1: lock_on_active_key : {...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] ;
     public final lock_on_active_key_return lock_on_active_key() throws RecognitionException {
         lock_on_active_key_return retval = new lock_on_active_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID315=null;
-        Token MISC316=null;
-        Token ID317=null;
-        Token MISC318=null;
-        Token ID319=null;
+        Token ID321=null;
+        Token MISC322=null;
+        Token ID323=null;
+        Token MISC324=null;
+        Token ID325=null;
 
-        Object ID315_tree=null;
-        Object MISC316_tree=null;
-        Object ID317_tree=null;
-        Object MISC318_tree=null;
-        Object ID319_tree=null;
+        Object ID321_tree=null;
+        Object MISC322_tree=null;
+        Object ID323_tree=null;
+        Object MISC324_tree=null;
+        Object ID325_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12821,32 +13069,32 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:903:3: ({...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:903:5: {...}? => ID MISC ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:3: ({...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:5: {...}? => ID MISC ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "lock_on_active_key", "(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, \"-\") && validateLT(5, DroolsSoftKeywords.ACTIVE))");
             }
-            ID315=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key4066); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID315);
+            ID321=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key4119); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID321);
 
-            MISC316=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key4068); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC316);
+            MISC322=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key4121); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC322);
 
-            ID317=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key4070); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID317);
+            ID323=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key4123); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID323);
 
-            MISC318=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key4072); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC318);
+            MISC324=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key4125); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC324);
 
-            ID319=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key4074); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID319);
+            ID325=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key4127); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID325);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12863,7 +13111,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 904:2: -> VK_LOCK_ON_ACTIVE[$start, text]
+            // 928:2: -> VK_LOCK_ON_ACTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_LOCK_ON_ACTIVE, ((Token)retval.start),  text));
 
@@ -12896,20 +13144,20 @@
     };
 
     // $ANTLR start no_loop_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:907:1: no_loop_key : {...}? => ID MISC ID -> VK_NO_LOOP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:1: no_loop_key : {...}? => ID MISC ID -> VK_NO_LOOP[$start, text] ;
     public final no_loop_key_return no_loop_key() throws RecognitionException {
         no_loop_key_return retval = new no_loop_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID320=null;
-        Token MISC321=null;
-        Token ID322=null;
+        Token ID326=null;
+        Token MISC327=null;
+        Token ID328=null;
 
-        Object ID320_tree=null;
-        Object MISC321_tree=null;
-        Object ID322_tree=null;
+        Object ID326_tree=null;
+        Object MISC327_tree=null;
+        Object ID328_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12917,24 +13165,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:910:3: ({...}? => ID MISC ID -> VK_NO_LOOP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:910:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:934:3: ({...}? => ID MISC ID -> VK_NO_LOOP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:934:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "no_loop_key", "(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.LOOP))");
             }
-            ID320=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key4100); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID320);
+            ID326=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key4153); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID326);
 
-            MISC321=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_no_loop_key4102); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC321);
+            MISC327=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_no_loop_key4155); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC327);
 
-            ID322=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key4104); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID322);
+            ID328=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key4157); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID328);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12951,7 +13199,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 911:2: -> VK_NO_LOOP[$start, text]
+            // 935:2: -> VK_NO_LOOP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NO_LOOP, ((Token)retval.start),  text));
 
@@ -12984,20 +13232,20 @@
     };
 
     // $ANTLR start auto_focus_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:914:1: auto_focus_key : {...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:938:1: auto_focus_key : {...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] ;
     public final auto_focus_key_return auto_focus_key() throws RecognitionException {
         auto_focus_key_return retval = new auto_focus_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID323=null;
-        Token MISC324=null;
-        Token ID325=null;
+        Token ID329=null;
+        Token MISC330=null;
+        Token ID331=null;
 
-        Object ID323_tree=null;
-        Object MISC324_tree=null;
-        Object ID325_tree=null;
+        Object ID329_tree=null;
+        Object MISC330_tree=null;
+        Object ID331_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -13005,24 +13253,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:917:3: ({...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:917:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:941:3: ({...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:941:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "auto_focus_key", "(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.FOCUS))");
             }
-            ID323=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key4130); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID323);
+            ID329=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key4183); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID329);
 
-            MISC324=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_auto_focus_key4132); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC324);
+            MISC330=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_auto_focus_key4185); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC330);
 
-            ID325=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key4134); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID325);
+            ID331=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key4187); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID331);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -13039,7 +13287,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 918:2: -> VK_AUTO_FOCUS[$start, text]
+            // 942:2: -> VK_AUTO_FOCUS[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AUTO_FOCUS, ((Token)retval.start),  text));
 
@@ -13072,20 +13320,20 @@
     };
 
     // $ANTLR start activation_group_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:921:1: activation_group_key : {...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:945:1: activation_group_key : {...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] ;
     public final activation_group_key_return activation_group_key() throws RecognitionException {
         activation_group_key_return retval = new activation_group_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID326=null;
-        Token MISC327=null;
-        Token ID328=null;
+        Token ID332=null;
+        Token MISC333=null;
+        Token ID334=null;
 
-        Object ID326_tree=null;
-        Object MISC327_tree=null;
-        Object ID328_tree=null;
+        Object ID332_tree=null;
+        Object MISC333_tree=null;
+        Object ID334_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -13093,24 +13341,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:3: ({...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:948:3: ({...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:948:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "activation_group_key", "(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.GROUP))");
             }
-            ID326=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key4160); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID326);
+            ID332=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key4213); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID332);
 
-            MISC327=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_activation_group_key4162); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC327);
+            MISC333=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_activation_group_key4215); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC333);
 
-            ID328=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key4164); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID328);
+            ID334=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key4217); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID334);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -13127,7 +13375,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 925:2: -> VK_ACTIVATION_GROUP[$start, text]
+            // 949:2: -> VK_ACTIVATION_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTIVATION_GROUP, ((Token)retval.start),  text));
 
@@ -13160,20 +13408,20 @@
     };
 
     // $ANTLR start agenda_group_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:928:1: agenda_group_key : {...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:952:1: agenda_group_key : {...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] ;
     public final agenda_group_key_return agenda_group_key() throws RecognitionException {
         agenda_group_key_return retval = new agenda_group_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID329=null;
-        Token MISC330=null;
-        Token ID331=null;
+        Token ID335=null;
+        Token MISC336=null;
+        Token ID337=null;
 
-        Object ID329_tree=null;
-        Object MISC330_tree=null;
-        Object ID331_tree=null;
+        Object ID335_tree=null;
+        Object MISC336_tree=null;
+        Object ID337_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -13181,24 +13429,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:3: ({...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:3: ({...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "agenda_group_key", "(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.GROUP))");
             }
-            ID329=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key4190); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID329);
+            ID335=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key4243); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID335);
 
-            MISC330=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_agenda_group_key4192); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC330);
+            MISC336=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_agenda_group_key4245); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC336);
 
-            ID331=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key4194); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID331);
+            ID337=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key4247); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID337);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -13215,7 +13463,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 932:2: -> VK_AGENDA_GROUP[$start, text]
+            // 956:2: -> VK_AGENDA_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AGENDA_GROUP, ((Token)retval.start),  text));
 
@@ -13248,20 +13496,20 @@
     };
 
     // $ANTLR start ruleflow_group_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:1: ruleflow_group_key : {...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:1: ruleflow_group_key : {...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] ;
     public final ruleflow_group_key_return ruleflow_group_key() throws RecognitionException {
         ruleflow_group_key_return retval = new ruleflow_group_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID332=null;
-        Token MISC333=null;
-        Token ID334=null;
+        Token ID338=null;
+        Token MISC339=null;
+        Token ID340=null;
 
-        Object ID332_tree=null;
-        Object MISC333_tree=null;
-        Object ID334_tree=null;
+        Object ID338_tree=null;
+        Object MISC339_tree=null;
+        Object ID340_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -13269,24 +13517,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:938:3: ({...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:938:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:962:3: ({...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:962:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "ruleflow_group_key", "(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.GROUP))");
             }
-            ID332=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key4220); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID332);
+            ID338=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key4273); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID338);
 
-            MISC333=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key4222); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC333);
+            MISC339=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key4275); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC339);
 
-            ID334=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key4224); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID334);
+            ID340=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key4277); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID340);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -13303,7 +13551,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 939:2: -> VK_RULEFLOW_GROUP[$start, text]
+            // 963:2: -> VK_RULEFLOW_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULEFLOW_GROUP, ((Token)retval.start),  text));
 
@@ -13336,7 +13584,7 @@
     };
 
     // $ANTLR start duration_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:942:1: duration_key : {...}? =>id= ID -> VK_DURATION[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:966:1: duration_key : {...}? =>id= ID -> VK_DURATION[$id] ;
     public final duration_key_return duration_key() throws RecognitionException {
         duration_key_return retval = new duration_key_return();
         retval.start = input.LT(1);
@@ -13349,15 +13597,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:943:2: ({...}? =>id= ID -> VK_DURATION[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:943:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:967:2: ({...}? =>id= ID -> VK_DURATION[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:967:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DURATION))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "duration_key", "(validateIdentifierKey(DroolsSoftKeywords.DURATION))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_duration_key4249); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_duration_key4302); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13372,7 +13620,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 943:69: -> VK_DURATION[$id]
+            // 967:69: -> VK_DURATION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DURATION, id));
 
@@ -13405,7 +13653,7 @@
     };
 
     // $ANTLR start package_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:1: package_key : {...}? =>id= ID -> VK_PACKAGE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:1: package_key : {...}? =>id= ID -> VK_PACKAGE[$id] ;
     public final package_key_return package_key() throws RecognitionException {
         package_key_return retval = new package_key_return();
         retval.start = input.LT(1);
@@ -13418,15 +13666,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:947:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:947:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.PACKAGE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "package_key", "(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_package_key4271); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_package_key4324); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13441,7 +13689,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 947:68: -> VK_PACKAGE[$id]
+            // 971:68: -> VK_PACKAGE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_PACKAGE, id));
 
@@ -13474,7 +13722,7 @@
     };
 
     // $ANTLR start import_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:950:1: import_key : {...}? =>id= ID -> VK_IMPORT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:1: import_key : {...}? =>id= ID -> VK_IMPORT[$id] ;
     public final import_key_return import_key() throws RecognitionException {
         import_key_return retval = new import_key_return();
         retval.start = input.LT(1);
@@ -13487,15 +13735,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "import_key", "(validateIdentifierKey(DroolsSoftKeywords.IMPORT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_import_key4293); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_import_key4346); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13510,7 +13758,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 951:67: -> VK_IMPORT[$id]
+            // 975:67: -> VK_IMPORT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IMPORT, id));
 
@@ -13543,7 +13791,7 @@
     };
 
     // $ANTLR start dialect_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:954:1: dialect_key : {...}? =>id= ID -> VK_DIALECT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:978:1: dialect_key : {...}? =>id= ID -> VK_DIALECT[$id] ;
     public final dialect_key_return dialect_key() throws RecognitionException {
         dialect_key_return retval = new dialect_key_return();
         retval.start = input.LT(1);
@@ -13556,15 +13804,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "dialect_key", "(validateIdentifierKey(DroolsSoftKeywords.DIALECT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dialect_key4315); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_dialect_key4368); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13579,7 +13827,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 955:68: -> VK_DIALECT[$id]
+            // 979:68: -> VK_DIALECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DIALECT, id));
 
@@ -13612,7 +13860,7 @@
     };
 
     // $ANTLR start salience_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:958:1: salience_key : {...}? =>id= ID -> VK_SALIENCE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:982:1: salience_key : {...}? =>id= ID -> VK_SALIENCE[$id] ;
     public final salience_key_return salience_key() throws RecognitionException {
         salience_key_return retval = new salience_key_return();
         retval.start = input.LT(1);
@@ -13625,15 +13873,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "salience_key", "(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_salience_key4337); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_salience_key4390); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13648,7 +13896,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 959:69: -> VK_SALIENCE[$id]
+            // 983:69: -> VK_SALIENCE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SALIENCE, id));
 
@@ -13681,7 +13929,7 @@
     };
 
     // $ANTLR start enabled_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:962:1: enabled_key : {...}? =>id= ID -> VK_ENABLED[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:1: enabled_key : {...}? =>id= ID -> VK_ENABLED[$id] ;
     public final enabled_key_return enabled_key() throws RecognitionException {
         enabled_key_return retval = new enabled_key_return();
         retval.start = input.LT(1);
@@ -13694,15 +13942,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:963:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:963:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ENABLED))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "enabled_key", "(validateIdentifierKey(DroolsSoftKeywords.ENABLED))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enabled_key4359); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_enabled_key4412); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13717,7 +13965,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 963:68: -> VK_ENABLED[$id]
+            // 987:68: -> VK_ENABLED[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENABLED, id));
 
@@ -13750,7 +13998,7 @@
     };
 
     // $ANTLR start attributes_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:966:1: attributes_key : {...}? =>id= ID -> VK_ATTRIBUTES[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:1: attributes_key : {...}? =>id= ID -> VK_ATTRIBUTES[$id] ;
     public final attributes_key_return attributes_key() throws RecognitionException {
         attributes_key_return retval = new attributes_key_return();
         retval.start = input.LT(1);
@@ -13763,15 +14011,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:967:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:967:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "attributes_key", "(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_attributes_key4381); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_attributes_key4434); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13786,7 +14034,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 967:71: -> VK_ATTRIBUTES[$id]
+            // 991:71: -> VK_ATTRIBUTES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ATTRIBUTES, id));
 
@@ -13819,7 +14067,7 @@
     };
 
     // $ANTLR start when_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:1: when_key : {...}? =>id= ID -> VK_WHEN[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:1: when_key : {...}? =>id= ID -> VK_WHEN[$id] ;
     public final when_key_return when_key() throws RecognitionException {
         when_key_return retval = new when_key_return();
         retval.start = input.LT(1);
@@ -13832,15 +14080,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:2: ({...}? =>id= ID -> VK_WHEN[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:995:2: ({...}? =>id= ID -> VK_WHEN[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:995:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "when_key", "(validateIdentifierKey(DroolsSoftKeywords.WHEN))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_when_key4403); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_when_key4456); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13855,7 +14103,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 971:65: -> VK_WHEN[$id]
+            // 995:65: -> VK_WHEN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_WHEN, id));
 
@@ -13888,7 +14136,7 @@
     };
 
     // $ANTLR start rule_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:1: rule_key : {...}? =>id= ID -> VK_RULE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:998:1: rule_key : {...}? =>id= ID -> VK_RULE[$id] ;
     public final rule_key_return rule_key() throws RecognitionException {
         rule_key_return retval = new rule_key_return();
         retval.start = input.LT(1);
@@ -13901,15 +14149,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:2: ({...}? =>id= ID -> VK_RULE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:2: ({...}? =>id= ID -> VK_RULE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "rule_key", "(validateIdentifierKey(DroolsSoftKeywords.RULE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_rule_key4425); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_rule_key4478); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13924,7 +14172,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 975:65: -> VK_RULE[$id]
+            // 999:65: -> VK_RULE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULE, id));
 
@@ -13957,7 +14205,7 @@
     };
 
     // $ANTLR start template_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:978:1: template_key : {...}? =>id= ID -> VK_TEMPLATE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1002:1: template_key : {...}? =>id= ID -> VK_TEMPLATE[$id] ;
     public final template_key_return template_key() throws RecognitionException {
         template_key_return retval = new template_key_return();
         retval.start = input.LT(1);
@@ -13970,15 +14218,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "template_key", "(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_template_key4447); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_template_key4500); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13993,7 +14241,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 979:69: -> VK_TEMPLATE[$id]
+            // 1003:69: -> VK_TEMPLATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_TEMPLATE, id));
 
@@ -14026,7 +14274,7 @@
     };
 
     // $ANTLR start query_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:982:1: query_key : {...}? =>id= ID -> VK_QUERY[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:1: query_key : {...}? =>id= ID -> VK_QUERY[$id] ;
     public final query_key_return query_key() throws RecognitionException {
         query_key_return retval = new query_key_return();
         retval.start = input.LT(1);
@@ -14039,15 +14287,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:2: ({...}? =>id= ID -> VK_QUERY[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:2: ({...}? =>id= ID -> VK_QUERY[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "query_key", "(validateIdentifierKey(DroolsSoftKeywords.QUERY))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_query_key4469); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_query_key4522); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14062,7 +14310,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 983:66: -> VK_QUERY[$id]
+            // 1007:66: -> VK_QUERY[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_QUERY, id));
 
@@ -14095,7 +14343,7 @@
     };
 
     // $ANTLR start declare_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:1: declare_key : {...}? =>id= ID -> VK_DECLARE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:1: declare_key : {...}? =>id= ID -> VK_DECLARE[$id] ;
     public final declare_key_return declare_key() throws RecognitionException {
         declare_key_return retval = new declare_key_return();
         retval.start = input.LT(1);
@@ -14108,15 +14356,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DECLARE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "declare_key", "(validateIdentifierKey(DroolsSoftKeywords.DECLARE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_declare_key4491); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_declare_key4544); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14131,7 +14379,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 987:68: -> VK_DECLARE[$id]
+            // 1011:68: -> VK_DECLARE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DECLARE, id));
 
@@ -14164,7 +14412,7 @@
     };
 
     // $ANTLR start function_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:1: function_key : {...}? =>id= ID -> VK_FUNCTION[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:1: function_key : {...}? =>id= ID -> VK_FUNCTION[$id] ;
     public final function_key_return function_key() throws RecognitionException {
         function_key_return retval = new function_key_return();
         retval.start = input.LT(1);
@@ -14177,15 +14425,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.FUNCTION))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "function_key", "(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_function_key4513); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_function_key4566); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14200,7 +14448,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 991:69: -> VK_FUNCTION[$id]
+            // 1015:69: -> VK_FUNCTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FUNCTION, id));
 
@@ -14233,7 +14481,7 @@
     };
 
     // $ANTLR start global_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:1: global_key : {...}? =>id= ID -> VK_GLOBAL[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:1: global_key : {...}? =>id= ID -> VK_GLOBAL[$id] ;
     public final global_key_return global_key() throws RecognitionException {
         global_key_return retval = new global_key_return();
         retval.start = input.LT(1);
@@ -14246,15 +14494,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:995:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:995:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "global_key", "(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_global_key4535); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_global_key4588); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14269,7 +14517,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 995:67: -> VK_GLOBAL[$id]
+            // 1019:67: -> VK_GLOBAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_GLOBAL, id));
 
@@ -14302,7 +14550,7 @@
     };
 
     // $ANTLR start eval_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:998:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
     public final eval_key_return eval_key() throws RecognitionException {
         eval_key_return retval = new eval_key_return();
         retval.start = input.LT(1);
@@ -14315,15 +14563,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:2: ({...}? =>id= ID -> VK_EVAL[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023:2: ({...}? =>id= ID -> VK_EVAL[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.EVAL))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "eval_key", "(validateIdentifierKey(DroolsSoftKeywords.EVAL))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_eval_key4557); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_eval_key4610); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14338,7 +14586,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 999:65: -> VK_EVAL[$id]
+            // 1023:65: -> VK_EVAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EVAL, id));
 
@@ -14371,7 +14619,7 @@
     };
 
     // $ANTLR start contains_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1002:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1026:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
     public final contains_key_return contains_key() throws RecognitionException {
         contains_key_return retval = new contains_key_return();
         retval.start = input.LT(1);
@@ -14384,15 +14632,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "contains_key", "(validateIdentifierKey(DroolsSoftKeywords.CONTAINS))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_contains_key4579); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_contains_key4632); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14407,7 +14655,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1003:69: -> VK_CONTAINS[$id]
+            // 1027:69: -> VK_CONTAINS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_CONTAINS, id));
 
@@ -14440,7 +14688,7 @@
     };
 
     // $ANTLR start matches_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1030:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
     public final matches_key_return matches_key() throws RecognitionException {
         matches_key_return retval = new matches_key_return();
         retval.start = input.LT(1);
@@ -14453,15 +14701,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.MATCHES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "matches_key", "(validateIdentifierKey(DroolsSoftKeywords.MATCHES))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_matches_key4601); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_matches_key4654); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14476,7 +14724,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1007:68: -> VK_MATCHES[$id]
+            // 1031:68: -> VK_MATCHES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MATCHES, id));
 
@@ -14509,7 +14757,7 @@
     };
 
     // $ANTLR start excludes_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
     public final excludes_key_return excludes_key() throws RecognitionException {
         excludes_key_return retval = new excludes_key_return();
         retval.start = input.LT(1);
@@ -14522,15 +14770,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1011:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "excludes_key", "(validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_excludes_key4623); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_excludes_key4676); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14545,7 +14793,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1011:69: -> VK_EXCLUDES[$id]
+            // 1035:69: -> VK_EXCLUDES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXCLUDES, id));
 
@@ -14578,7 +14826,7 @@
     };
 
     // $ANTLR start soundslike_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
     public final soundslike_key_return soundslike_key() throws RecognitionException {
         soundslike_key_return retval = new soundslike_key_return();
         retval.start = input.LT(1);
@@ -14591,15 +14839,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "soundslike_key", "(validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_soundslike_key4645); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_soundslike_key4698); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14614,7 +14862,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1015:71: -> VK_SOUNDSLIKE[$id]
+            // 1039:71: -> VK_SOUNDSLIKE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SOUNDSLIKE, id));
 
@@ -14647,7 +14895,7 @@
     };
 
     // $ANTLR start memberof_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1042:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
     public final memberof_key_return memberof_key() throws RecognitionException {
         memberof_key_return retval = new memberof_key_return();
         retval.start = input.LT(1);
@@ -14660,15 +14908,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1043:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1043:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "memberof_key", "(validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_memberof_key4667); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_memberof_key4720); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14683,7 +14931,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1019:69: -> VK_MEMBEROF[$id]
+            // 1043:69: -> VK_MEMBEROF[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MEMBEROF, id));
 
@@ -14716,7 +14964,7 @@
     };
 
     // $ANTLR start not_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1046:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
     public final not_key_return not_key() throws RecognitionException {
         not_key_return retval = new not_key_return();
         retval.start = input.LT(1);
@@ -14729,15 +14977,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023:2: ({...}? =>id= ID -> VK_NOT[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1047:2: ({...}? =>id= ID -> VK_NOT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1047:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "not_key", "(validateIdentifierKey(DroolsSoftKeywords.NOT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_not_key4689); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_not_key4742); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14752,7 +15000,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1023:64: -> VK_NOT[$id]
+            // 1047:64: -> VK_NOT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NOT, id));
 
@@ -14785,7 +15033,7 @@
     };
 
     // $ANTLR start in_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1026:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1050:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
     public final in_key_return in_key() throws RecognitionException {
         in_key_return retval = new in_key_return();
         retval.start = input.LT(1);
@@ -14798,15 +15046,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:2: ({...}? =>id= ID -> VK_IN[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:2: ({...}? =>id= ID -> VK_IN[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "in_key", "(validateIdentifierKey(DroolsSoftKeywords.IN))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_in_key4711); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_in_key4764); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14821,7 +15069,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1027:63: -> VK_IN[$id]
+            // 1051:63: -> VK_IN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IN, id));
 
@@ -14854,7 +15102,7 @@
     };
 
     // $ANTLR start or_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1030:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1054:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
     public final or_key_return or_key() throws RecognitionException {
         or_key_return retval = new or_key_return();
         retval.start = input.LT(1);
@@ -14867,15 +15115,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:2: ({...}? =>id= ID -> VK_OR[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:2: ({...}? =>id= ID -> VK_OR[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.OR))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "or_key", "(validateIdentifierKey(DroolsSoftKeywords.OR))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_or_key4733); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_or_key4786); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14890,7 +15138,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1031:63: -> VK_OR[$id]
+            // 1055:63: -> VK_OR[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_OR, id));
 
@@ -14923,7 +15171,7 @@
     };
 
     // $ANTLR start and_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1058:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
     public final and_key_return and_key() throws RecognitionException {
         and_key_return retval = new and_key_return();
         retval.start = input.LT(1);
@@ -14936,15 +15184,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:2: ({...}? =>id= ID -> VK_AND[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:2: ({...}? =>id= ID -> VK_AND[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.AND))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "and_key", "(validateIdentifierKey(DroolsSoftKeywords.AND))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_and_key4755); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_and_key4808); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14959,7 +15207,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1035:64: -> VK_AND[$id]
+            // 1059:64: -> VK_AND[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AND, id));
 
@@ -14992,7 +15240,7 @@
     };
 
     // $ANTLR start exists_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
     public final exists_key_return exists_key() throws RecognitionException {
         exists_key_return retval = new exists_key_return();
         retval.start = input.LT(1);
@@ -15005,15 +15253,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.EXISTS))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "exists_key", "(validateIdentifierKey(DroolsSoftKeywords.EXISTS))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_exists_key4777); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_exists_key4830); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15028,7 +15276,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1039:67: -> VK_EXISTS[$id]
+            // 1063:67: -> VK_EXISTS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXISTS, id));
 
@@ -15061,7 +15309,7 @@
     };
 
     // $ANTLR start forall_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1042:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1066:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
     public final forall_key_return forall_key() throws RecognitionException {
         forall_key_return retval = new forall_key_return();
         retval.start = input.LT(1);
@@ -15074,15 +15322,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1043:2: ({...}? =>id= ID -> VK_FORALL[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1043:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1067:2: ({...}? =>id= ID -> VK_FORALL[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1067:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.FORALL))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "forall_key", "(validateIdentifierKey(DroolsSoftKeywords.FORALL))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_forall_key4799); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_forall_key4852); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15097,7 +15345,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1043:67: -> VK_FORALL[$id]
+            // 1067:67: -> VK_FORALL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FORALL, id));
 
@@ -15130,7 +15378,7 @@
     };
 
     // $ANTLR start from_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1046:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1070:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
     public final from_key_return from_key() throws RecognitionException {
         from_key_return retval = new from_key_return();
         retval.start = input.LT(1);
@@ -15143,15 +15391,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1047:2: ({...}? =>id= ID -> VK_FROM[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1047:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1071:2: ({...}? =>id= ID -> VK_FROM[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1071:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "from_key", "(validateIdentifierKey(DroolsSoftKeywords.FROM))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_key4821); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_from_key4874); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15166,7 +15414,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1047:65: -> VK_FROM[$id]
+            // 1071:65: -> VK_FROM[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FROM, id));
 
@@ -15199,20 +15447,20 @@
     };
 
     // $ANTLR start entry_point_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1050:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
     public final entry_point_key_return entry_point_key() throws RecognitionException {
         entry_point_key_return retval = new entry_point_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID335=null;
-        Token MISC336=null;
-        Token ID337=null;
+        Token ID341=null;
+        Token MISC342=null;
+        Token ID343=null;
 
-        Object ID335_tree=null;
-        Object MISC336_tree=null;
-        Object ID337_tree=null;
+        Object ID341_tree=null;
+        Object MISC342_tree=null;
+        Object ID343_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -15220,24 +15468,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1053:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1053:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ENTRY) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.POINT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "entry_point_key", "(validateIdentifierKey(DroolsSoftKeywords.ENTRY) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.POINT))");
             }
-            ID335=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key4844); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID335);
+            ID341=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4897); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID341);
 
-            MISC336=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_entry_point_key4846); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC336);
+            MISC342=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_entry_point_key4899); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC342);
 
-            ID337=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key4848); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID337);
+            ID343=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4901); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID343);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -15254,7 +15502,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1054:2: -> VK_ENTRY_POINT[$start, text]
+            // 1078:2: -> VK_ENTRY_POINT[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENTRY_POINT, ((Token)retval.start),  text));
 
@@ -15287,7 +15535,7 @@
     };
 
     // $ANTLR start accumulate_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1057:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
     public final accumulate_key_return accumulate_key() throws RecognitionException {
         accumulate_key_return retval = new accumulate_key_return();
         retval.start = input.LT(1);
@@ -15300,15 +15548,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1058:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1058:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "accumulate_key", "(validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_key4873); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_key4926); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15323,7 +15571,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1058:71: -> VK_ACCUMULATE[$id]
+            // 1082:71: -> VK_ACCUMULATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACCUMULATE, id));
 
@@ -15356,7 +15604,7 @@
     };
 
     // $ANTLR start init_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1061:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1085:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
     public final init_key_return init_key() throws RecognitionException {
         init_key_return retval = new init_key_return();
         retval.start = input.LT(1);
@@ -15369,15 +15617,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:2: ({...}? =>id= ID -> VK_INIT[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1086:2: ({...}? =>id= ID -> VK_INIT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1086:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "init_key", "(validateIdentifierKey(DroolsSoftKeywords.INIT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_init_key4895); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_init_key4948); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15392,7 +15640,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1062:65: -> VK_INIT[$id]
+            // 1086:65: -> VK_INIT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_INIT, id));
 
@@ -15425,7 +15673,7 @@
     };
 
     // $ANTLR start action_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1065:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1089:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
     public final action_key_return action_key() throws RecognitionException {
         action_key_return retval = new action_key_return();
         retval.start = input.LT(1);
@@ -15438,15 +15686,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1066:2: ({...}? =>id= ID -> VK_ACTION[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1066:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1090:2: ({...}? =>id= ID -> VK_ACTION[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1090:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ACTION))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "action_key", "(validateIdentifierKey(DroolsSoftKeywords.ACTION))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_action_key4917); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_action_key4970); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15461,7 +15709,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1066:67: -> VK_ACTION[$id]
+            // 1090:67: -> VK_ACTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTION, id));
 
@@ -15494,7 +15742,7 @@
     };
 
     // $ANTLR start reverse_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1069:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
     public final reverse_key_return reverse_key() throws RecognitionException {
         reverse_key_return retval = new reverse_key_return();
         retval.start = input.LT(1);
@@ -15507,15 +15755,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1070:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1070:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1094:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1094:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "reverse_key", "(validateIdentifierKey(DroolsSoftKeywords.REVERSE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_reverse_key4939); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_reverse_key4992); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15530,7 +15778,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1070:68: -> VK_REVERSE[$id]
+            // 1094:68: -> VK_REVERSE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_REVERSE, id));
 
@@ -15563,7 +15811,7 @@
     };
 
     // $ANTLR start result_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1073:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1097:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
     public final result_key_return result_key() throws RecognitionException {
         result_key_return retval = new result_key_return();
         retval.start = input.LT(1);
@@ -15576,15 +15824,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074:2: ({...}? =>id= ID -> VK_RESULT[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:2: ({...}? =>id= ID -> VK_RESULT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "result_key", "(validateIdentifierKey(DroolsSoftKeywords.RESULT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_result_key4961); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_result_key5014); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15599,7 +15847,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1074:67: -> VK_RESULT[$id]
+            // 1098:67: -> VK_RESULT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RESULT, id));
 
@@ -15632,7 +15880,7 @@
     };
 
     // $ANTLR start collect_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
     public final collect_key_return collect_key() throws RecognitionException {
         collect_key_return retval = new collect_key_return();
         retval.start = input.LT(1);
@@ -15645,15 +15893,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1078:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1078:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.COLLECT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "collect_key", "(validateIdentifierKey(DroolsSoftKeywords.COLLECT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_collect_key4983); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_collect_key5036); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15668,7 +15916,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1078:68: -> VK_COLLECT[$id]
+            // 1102:68: -> VK_COLLECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_COLLECT, id));
 
@@ -15697,11 +15945,11 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:5: ( LEFT_PAREN or_key )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:6: LEFT_PAREN or_key
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:5: ( LEFT_PAREN or_key )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:6: LEFT_PAREN or_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11833); if (failed) return ;
-        pushFollow(FOLLOW_or_key_in_synpred11835);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11853); if (failed) return ;
+        pushFollow(FOLLOW_or_key_in_synpred11855);
         or_key();
         _fsp--;
         if (failed) return ;
@@ -15712,28 +15960,28 @@
 
     // $ANTLR start synpred2
     public final void synpred2_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:5: ( or_key | DOUBLE_PIPE )
-        int alt99=2;
-        int LA99_0 = input.LA(1);
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:5: ( or_key | DOUBLE_PIPE )
+        int alt101=2;
+        int LA101_0 = input.LA(1);
 
-        if ( (LA99_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
-            alt99=1;
+        if ( (LA101_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
+            alt101=1;
         }
-        else if ( (LA99_0==DOUBLE_PIPE) ) {
-            alt99=2;
+        else if ( (LA101_0==DOUBLE_PIPE) ) {
+            alt101=2;
         }
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("555:5: synpred2 : ( or_key | DOUBLE_PIPE );", 99, 0, input);
+                new NoViableAltException("573:5: synpred2 : ( or_key | DOUBLE_PIPE );", 101, 0, input);
 
             throw nvae;
         }
-        switch (alt99) {
+        switch (alt101) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:6: or_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:6: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred21882);
+                pushFollow(FOLLOW_or_key_in_synpred21902);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -15741,9 +15989,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:13: DOUBLE_PIPE
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:13: DOUBLE_PIPE
                 {
-                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21884); if (failed) return ;
+                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21904); if (failed) return ;
 
                 }
                 break;
@@ -15753,11 +16001,11 @@
 
     // $ANTLR start synpred3
     public final void synpred3_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:5: ( LEFT_PAREN and_key )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:6: LEFT_PAREN and_key
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:5: ( LEFT_PAREN and_key )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:6: LEFT_PAREN and_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31935); if (failed) return ;
-        pushFollow(FOLLOW_and_key_in_synpred31937);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31955); if (failed) return ;
+        pushFollow(FOLLOW_and_key_in_synpred31957);
         and_key();
         _fsp--;
         if (failed) return ;
@@ -15768,28 +16016,28 @@
 
     // $ANTLR start synpred4
     public final void synpred4_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:5: ( and_key | DOUBLE_AMPER )
-        int alt100=2;
-        int LA100_0 = input.LA(1);
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:5: ( and_key | DOUBLE_AMPER )
+        int alt102=2;
+        int LA102_0 = input.LA(1);
 
-        if ( (LA100_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.AND)))) {
-            alt100=1;
+        if ( (LA102_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.AND)))) {
+            alt102=1;
         }
-        else if ( (LA100_0==DOUBLE_AMPER) ) {
-            alt100=2;
+        else if ( (LA102_0==DOUBLE_AMPER) ) {
+            alt102=2;
         }
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("565:5: synpred4 : ( and_key | DOUBLE_AMPER );", 100, 0, input);
+                new NoViableAltException("583:5: synpred4 : ( and_key | DOUBLE_AMPER );", 102, 0, input);
 
             throw nvae;
         }
-        switch (alt100) {
+        switch (alt102) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:6: and_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:6: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred41984);
+                pushFollow(FOLLOW_and_key_in_synpred42004);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -15797,9 +16045,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:14: DOUBLE_AMPER
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:14: DOUBLE_AMPER
                 {
-                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred41986); if (failed) return ;
+                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred42006); if (failed) return ;
 
                 }
                 break;
@@ -15809,10 +16057,10 @@
 
     // $ANTLR start synpred5
     public final void synpred5_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:4: ( SEMICOLON )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:5: SEMICOLON
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597:4: ( SEMICOLON )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597:5: SEMICOLON
         {
-        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred52088); if (failed) return ;
+        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred52116); if (failed) return ;
 
         }
     }
@@ -15820,27 +16068,27 @@
 
     // $ANTLR start synpred6
     public final void synpred6_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:12: ( LEFT_PAREN ( or_key | and_key ) )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:13: LEFT_PAREN ( or_key | and_key )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:12: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:13: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred62120); if (failed) return ;
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:24: ( or_key | and_key )
-        int alt101=2;
-        int LA101_0 = input.LA(1);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred62148); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:24: ( or_key | and_key )
+        int alt103=2;
+        int LA103_0 = input.LA(1);
 
-        if ( (LA101_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-            int LA101_1 = input.LA(2);
+        if ( (LA103_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+            int LA103_1 = input.LA(2);
 
             if ( ((validateIdentifierKey(DroolsSoftKeywords.OR))) ) {
-                alt101=1;
+                alt103=1;
             }
             else if ( ((validateIdentifierKey(DroolsSoftKeywords.AND))) ) {
-                alt101=2;
+                alt103=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("583:24: ( or_key | and_key )", 101, 1, input);
+                    new NoViableAltException("602:24: ( or_key | and_key )", 103, 1, input);
 
                 throw nvae;
             }
@@ -15848,15 +16096,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("583:24: ( or_key | and_key )", 101, 0, input);
+                new NoViableAltException("602:24: ( or_key | and_key )", 103, 0, input);
 
             throw nvae;
         }
-        switch (alt101) {
+        switch (alt103) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:25: or_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:25: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred62123);
+                pushFollow(FOLLOW_or_key_in_synpred62151);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -15864,9 +16112,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:32: and_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:32: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred62125);
+                pushFollow(FOLLOW_and_key_in_synpred62153);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -15883,27 +16131,27 @@
 
     // $ANTLR start synpred7
     public final void synpred7_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:591:5: ( LEFT_PAREN ( or_key | and_key ) )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:591:6: LEFT_PAREN ( or_key | and_key )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:615:5: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:615:6: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred72207); if (failed) return ;
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:591:17: ( or_key | and_key )
-        int alt102=2;
-        int LA102_0 = input.LA(1);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred72260); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:615:17: ( or_key | and_key )
+        int alt104=2;
+        int LA104_0 = input.LA(1);
 
-        if ( (LA102_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-            int LA102_1 = input.LA(2);
+        if ( (LA104_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+            int LA104_1 = input.LA(2);
 
             if ( ((validateIdentifierKey(DroolsSoftKeywords.OR))) ) {
-                alt102=1;
+                alt104=1;
             }
             else if ( ((validateIdentifierKey(DroolsSoftKeywords.AND))) ) {
-                alt102=2;
+                alt104=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("591:17: ( or_key | and_key )", 102, 1, input);
+                    new NoViableAltException("615:17: ( or_key | and_key )", 104, 1, input);
 
                 throw nvae;
             }
@@ -15911,15 +16159,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("591:17: ( or_key | and_key )", 102, 0, input);
+                new NoViableAltException("615:17: ( or_key | and_key )", 104, 0, input);
 
             throw nvae;
         }
-        switch (alt102) {
+        switch (alt104) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:591:18: or_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:615:18: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred72210);
+                pushFollow(FOLLOW_or_key_in_synpred72263);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -15927,9 +16175,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:591:25: and_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:615:25: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred72212);
+                pushFollow(FOLLOW_and_key_in_synpred72265);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -15946,10 +16194,10 @@
 
     // $ANTLR start synpred8
     public final void synpred8_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:5: ( LEFT_PAREN )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:6: LEFT_PAREN
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:5: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:6: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82765); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82818); if (failed) return ;
 
         }
     }
@@ -15957,10 +16205,10 @@
 
     // $ANTLR start synpred9
     public final void synpred9_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:6: ( LEFT_SQUARE )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:8: LEFT_SQUARE
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:6: ( LEFT_SQUARE )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:8: LEFT_SQUARE
         {
-        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92826); if (failed) return ;
+        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92879); if (failed) return ;
 
         }
     }
@@ -15968,10 +16216,10 @@
 
     // $ANTLR start synpred10
     public final void synpred10_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:6: ( LEFT_PAREN )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:8: LEFT_PAREN
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:6: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:8: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102848); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102901); if (failed) return ;
 
         }
     }
@@ -16122,14 +16370,13 @@
     protected DFA12 dfa12 = new DFA12(this);
     protected DFA17 dfa17 = new DFA17(this);
     protected DFA28 dfa28 = new DFA28(this);
-    protected DFA34 dfa34 = new DFA34(this);
-    protected DFA51 dfa51 = new DFA51(this);
-    protected DFA52 dfa52 = new DFA52(this);
-    protected DFA59 dfa59 = new DFA59(this);
-    protected DFA63 dfa63 = new DFA63(this);
+    protected DFA36 dfa36 = new DFA36(this);
+    protected DFA53 dfa53 = new DFA53(this);
+    protected DFA54 dfa54 = new DFA54(this);
+    protected DFA61 dfa61 = new DFA61(this);
     protected DFA65 dfa65 = new DFA65(this);
-    protected DFA80 dfa80 = new DFA80(this);
-    protected DFA81 dfa81 = new DFA81(this);
+    protected DFA82 dfa82 = new DFA82(this);
+    protected DFA83 dfa83 = new DFA83(this);
     static final String DFA12_eotS =
         "\16\uffff";
     static final String DFA12_eofS =
@@ -16189,7 +16436,7 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "367:23: ( parameters )?";
+            return "383:23: ( parameters )?";
         }
     }
     static final String DFA17_eotS =
@@ -16243,52 +16490,61 @@
             this.transition = DFA17_transition;
         }
         public String getDescription() {
-            return "386:4: ( data_type )?";
+            return "402:4: ( data_type )?";
         }
     }
     static final String DFA28_eotS =
-        "\33\uffff";
+        "\42\uffff";
     static final String DFA28_eofS =
-        "\33\uffff";
+        "\42\uffff";
     static final String DFA28_minS =
-        "\2\130\3\uffff\1\4\1\130\3\uffff\1\4\1\0\1\uffff\1\0\1\4\2\0\3\4"+
-        "\1\0\2\4\4\0";
+        "\2\130\4\uffff\1\4\1\130\3\uffff\1\4\1\0\2\uffff\1\0\1\4\1\0\2\4"+
+        "\1\0\1\4\1\0\3\4\1\0\1\4\2\0\2\4\2\0";
     static final String DFA28_maxS =
-        "\1\164\1\167\3\uffff\1\u0080\1\164\3\uffff\1\u0080\1\0\1\uffff\1"+
-        "\0\1\u0080\2\0\3\u0080\1\0\2\u0080\4\0";
+        "\1\164\1\167\4\uffff\1\u0080\1\164\3\uffff\1\u0080\1\0\2\uffff\1"+
+        "\0\1\u0080\1\0\2\u0080\1\0\1\u0080\1\0\3\u0080\1\0\1\u0080\2\0\2"+
+        "\u0080\2\0";
     static final String DFA28_acceptS =
-        "\2\uffff\1\2\2\1\2\uffff\2\1\1\2\2\uffff\1\1\16\uffff";
+        "\2\uffff\1\2\3\1\2\uffff\2\2\1\1\2\uffff\1\1\1\2\23\uffff";
     static final String DFA28_specialS =
-        "\1\6\1\11\3\uffff\1\1\1\7\3\uffff\1\14\1\10\1\uffff\1\16\1\12\1"+
-        "\4\1\0\1\13\1\15\1\2\1\17\1\5\1\3\4\uffff}>";
+        "\1\10\1\24\4\uffff\1\30\1\23\3\uffff\1\21\1\16\2\uffff\1\11\1\25"+
+        "\1\15\1\22\1\7\1\2\1\5\1\17\1\4\1\1\1\20\1\14\1\6\1\27\1\26\1\3"+
+        "\1\0\1\13\1\12}>";
     static final String[] DFA28_transitionS = {
             "\1\1\33\uffff\1\2",
-            "\1\11\3\uffff\1\7\1\5\3\uffff\1\6\1\uffff\1\10\1\4\17\uffff"+
+            "\1\10\3\uffff\1\12\1\6\3\uffff\1\7\1\uffff\1\4\1\5\17\uffff"+
             "\1\11\2\uffff\1\3",
             "",
             "",
             "",
-            "\124\14\1\12\4\14\1\13\43\14",
-            "\1\15\4\uffff\1\11\26\uffff\1\11",
             "",
+            "\124\15\1\13\4\15\1\14\43\15",
+            "\1\17\4\uffff\1\16\26\uffff\1\11",
             "",
             "",
-            "\124\14\1\20\1\21\3\14\1\17\3\14\1\16\20\14\1\22\16\14",
+            "",
+            "\124\15\1\21\1\22\3\15\1\24\3\15\1\20\20\15\1\23\16\15",
             "\1\uffff",
             "",
+            "",
             "\1\uffff",
-            "\124\14\1\23\4\14\1\24\43\14",
+            "\124\15\1\25\4\15\1\26\43\15",
             "\1\uffff",
+            "\124\15\1\27\50\15",
+            "\157\15\1\30\15\15",
             "\1\uffff",
-            "\124\14\1\25\50\14",
-            "\157\14\1\26\15\14",
-            "\125\14\1\27\3\14\1\31\24\14\1\30\16\14",
+            "\125\15\1\31\3\15\1\32\24\15\1\33\16\15",
             "\1\uffff",
-            "\125\14\1\21\3\14\1\32\24\14\1\22\16\14",
-            "\131\14\1\32\24\14\1\22\16\14",
+            "\125\15\1\22\3\15\1\34\24\15\1\23\16\15",
+            "\131\15\1\35\24\15\1\23\16\15",
+            "\124\15\1\36\50\15",
             "\1\uffff",
+            "\157\15\1\37\15\15",
             "\1\uffff",
             "\1\uffff",
+            "\125\15\1\31\3\15\1\40\24\15\1\33\16\15",
+            "\131\15\1\41\24\15\1\33\16\15",
+            "\1\uffff",
             "\1\uffff"
     };
 
@@ -16322,92 +16578,96 @@
             this.transition = DFA28_transition;
         }
         public String getDescription() {
-            return "452:21: ( rule_attributes )?";
+            return "468:21: ( rule_attributes )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA28_16 = input.LA(1);
+                        int LA28_31 = input.LA(1);
 
                          
-                        int index28_16 = input.index();
+                        int index28_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( (LA28_31==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 33;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (LA28_31==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 27;}
 
+                        else if ( ((LA28_31>=VT_COMPILATION_UNIT && LA28_31<=STRING)||(LA28_31>=COMMA && LA28_31<=NULL)||(LA28_31>=RIGHT_SQUARE && LA28_31<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
+
                          
-                        input.seek(index28_16);
+                        input.seek(index28_31);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA28_5 = input.LA(1);
+                        int LA28_24 = input.LA(1);
 
                          
-                        int index28_5 = input.index();
+                        int index28_24 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_5==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 10;}
+                        if ( (LA28_24==LEFT_PAREN) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 29;}
 
-                        else if ( (LA28_5==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 11;}
+                        else if ( (LA28_24==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
 
-                        else if ( ((LA28_5>=VT_COMPILATION_UNIT && LA28_5<=SEMICOLON)||(LA28_5>=DOT && LA28_5<=STRING)||(LA28_5>=COMMA && LA28_5<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( ((LA28_24>=VT_COMPILATION_UNIT && LA28_24<=STRING)||(LA28_24>=COMMA && LA28_24<=NULL)||(LA28_24>=RIGHT_SQUARE && LA28_24<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
 
                          
-                        input.seek(index28_5);
+                        input.seek(index28_24);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA28_19 = input.LA(1);
+                        int LA28_20 = input.LA(1);
 
                          
-                        int index28_19 = input.index();
+                        int index28_20 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_19==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 23;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 13;}
 
-                        else if ( (LA28_19==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 24;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 14;}
 
-                        else if ( (LA28_19==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
-
-                        else if ( ((LA28_19>=VT_COMPILATION_UNIT && LA28_19<=ID)||(LA28_19>=DOT_STAR && LA28_19<=STRING)||(LA28_19>=COMMA && LA28_19<=NULL)||(LA28_19>=RIGHT_SQUARE && LA28_19<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
-
                          
-                        input.seek(index28_19);
+                        input.seek(index28_20);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA28_22 = input.LA(1);
+                        int LA28_30 = input.LA(1);
 
                          
-                        int index28_22 = input.index();
+                        int index28_30 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_22==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 26;}
+                        if ( (LA28_30==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 27;}
 
-                        else if ( (LA28_22==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+                        else if ( (LA28_30==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 32;}
 
-                        else if ( ((LA28_22>=VT_COMPILATION_UNIT && LA28_22<=STRING)||(LA28_22>=COMMA && LA28_22<=NULL)||(LA28_22>=RIGHT_SQUARE && LA28_22<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( (LA28_30==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
 
+                        else if ( ((LA28_30>=VT_COMPILATION_UNIT && LA28_30<=ID)||(LA28_30>=DOT_STAR && LA28_30<=STRING)||(LA28_30>=COMMA && LA28_30<=NULL)||(LA28_30>=RIGHT_SQUARE && LA28_30<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
+
                          
-                        input.seek(index28_22);
+                        input.seek(index28_30);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA28_15 = input.LA(1);
+                        int LA28_23 = input.LA(1);
 
                          
-                        int index28_15 = input.index();
+                        int index28_23 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( ((LA28_23>=VT_COMPILATION_UNIT && LA28_23<=ID)||(LA28_23>=DOT_STAR && LA28_23<=STRING)||(LA28_23>=COMMA && LA28_23<=NULL)||(LA28_23>=RIGHT_SQUARE && LA28_23<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (LA28_23==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
 
+                        else if ( (LA28_23==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 28;}
+
+                        else if ( (LA28_23==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 18;}
+
                          
-                        input.seek(index28_15);
+                        input.seek(index28_23);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
@@ -16417,188 +16677,329 @@
                         int index28_21 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_21==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+                        if ( ((LA28_21>=VT_COMPILATION_UNIT && LA28_21<=ID)||(LA28_21>=DOT_STAR && LA28_21<=STRING)||(LA28_21>=COMMA && LA28_21<=NULL)||(LA28_21>=RIGHT_SQUARE && LA28_21<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
 
-                        else if ( (LA28_21==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 26;}
+                        else if ( (LA28_21==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
 
-                        else if ( (LA28_21==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+                        else if ( (LA28_21==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 26;}
 
-                        else if ( ((LA28_21>=VT_COMPILATION_UNIT && LA28_21<=ID)||(LA28_21>=DOT_STAR && LA28_21<=STRING)||(LA28_21>=COMMA && LA28_21<=NULL)||(LA28_21>=RIGHT_SQUARE && LA28_21<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( (LA28_21==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 27;}
 
                          
                         input.seek(index28_21);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA28_0 = input.LA(1);
+                        int LA28_27 = input.LA(1);
 
                          
-                        int index28_0 = input.index();
+                        int index28_27 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierK!
 ey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {s = 1;}
+                        if ( (LA28_27==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)!
 ))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 31;}
 
-                        else if ( (LA28_0==THEN) ) {s = 2;}
+                        else if ( ((LA28_27>=VT_COMPILATION_UNIT && LA28_27<=LEFT_SQUARE)||(LA28_27>=THEN && LA28_27<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
 
                          
-                        input.seek(index28_0);
+                        input.seek(index28_27);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA28_6 = input.LA(1);
+                        int LA28_19 = input.LA(1);
 
                          
-                        int index28_6 = input.index();
+                        int index28_19 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_6==LEFT_PAREN||LA28_6==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 9;}
+                        if ( (LA28_19==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)!
 ))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 24;}
 
-                        else if ( (LA28_6==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))))) {s = 13;}
+                        else if ( ((LA28_19>=VT_COMPILATION_UNIT && LA28_19<=LEFT_SQUARE)||(LA28_19>=THEN && LA28_19<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
 
                          
-                        input.seek(index28_6);
+                        input.seek(index28_19);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA28_11 = input.LA(1);
+                        int LA28_0 = input.LA(1);
 
                          
-                        int index28_11 = input.index();
+                        int index28_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( (LA28_0==ID) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis!
 ()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWi!
 thParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(v
alidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthe!
 sis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWith!
 Parenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(val
idateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateWhenWi!
 thParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeyw!
 ords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(D
roolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWith!
 Parenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywo!
 rds.ATTRIBUTES))||(validateWhenWithParenthesis()&&(validateIdentifierK
ey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIden!
 tifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(!
 validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywor
ds.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 1;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (LA28_0==THEN) ) {s = 2;}
 
                          
-                        input.seek(index28_11);
+                        input.seek(index28_0);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA28_1 = input.LA(1);
+                        int LA28_15 = input.LA(1);
 
                          
-                        int index28_1 = input.index();
+                        int index28_15 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateL!
 T(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 3;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))) ) {s = 13;}
 
-                        else if ( (LA28_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 4;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 14;}
 
-                        else if ( (LA28_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 5;}
+                         
+                        input.seek(index28_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA28_33 = input.LA(1);
 
-                        else if ( (LA28_1==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))))) {s = 6;}
+                         
+                        int index28_33 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 13;}
 
-                        else if ( (LA28_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 7;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 14;}
 
-                        else if ( (LA28_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 8;}
+                         
+                        input.seek(index28_33);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA28_32 = input.LA(1);
 
-                        else if ( (LA28_1==ID||LA28_1==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 9;}
+                         
+                        int index28_32 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 13;}
 
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 14;}
+
                          
-                        input.seek(index28_1);
+                        input.seek(index28_32);
                         if ( s>=0 ) return s;
                         break;
-                    case 10 : 
-                        int LA28_14 = input.LA(1);
+                    case 12 : 
+                        int LA28_26 = input.LA(1);
 
                          
-                        int index28_14 = input.index();
+                        int index28_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_14==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 13;}
 
-                        else if ( (LA28_14==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 20;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 14;}
 
-                        else if ( ((LA28_14>=VT_COMPILATION_UNIT && LA28_14<=SEMICOLON)||(LA28_14>=DOT && LA28_14<=STRING)||(LA28_14>=COMMA && LA28_14<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
-
                          
-                        input.seek(index28_14);
+                        input.seek(index28_26);
                         if ( s>=0 ) return s;
                         break;
-                    case 11 : 
+                    case 13 : 
                         int LA28_17 = input.LA(1);
 
                          
                         int index28_17 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_17==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 21;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 13;}
 
-                        else if ( ((LA28_17>=VT_COMPILATION_UNIT && LA28_17<=SEMICOLON)||(LA28_17>=DOT && LA28_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 14;}
 
                          
                         input.seek(index28_17);
                         if ( s>=0 ) return s;
                         break;
-                    case 12 : 
-                        int LA28_10 = input.LA(1);
+                    case 14 : 
+                        int LA28_12 = input.LA(1);
 
                          
-                        int index28_10 = input.index();
+                        int index28_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_10==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 14;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 13;}
 
-                        else if ( (LA28_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 15;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 14;}
 
-                        else if ( (LA28_10==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
+                         
+                        input.seek(index28_12);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 15 : 
+                        int LA28_22 = input.LA(1);
 
-                        else if ( ((LA28_10>=VT_COMPILATION_UNIT && LA28_10<=SEMICOLON)||(LA28_10>=DOT_STAR && LA28_10<=STRING)||(LA28_10>=COMMA && LA28_10<=AT)||(LA28_10>=EQUALS && LA28_10<=NULL)||(LA28_10>=RIGHT_SQUARE && LA28_10<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                         
+                        int index28_22 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 13;}
 
-                        else if ( (LA28_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 14;}
 
-                        else if ( (LA28_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+                         
+                        input.seek(index28_22);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 16 : 
+                        int LA28_25 = input.LA(1);
 
                          
-                        input.seek(index28_10);
+                        int index28_25 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA28_25==ID) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Drool!
 sSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 30;}
+
+                        else if ( ((LA28_25>=VT_COMPILATION_UNIT && LA28_25<=SEMICOLON)||(LA28_25>=DOT && LA28_25<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
+
+                         
+                        input.seek(index28_25);
                         if ( s>=0 ) return s;
                         break;
-                    case 13 : 
+                    case 17 : 
+                        int LA28_11 = input.LA(1);
+
+                         
+                        int index28_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA28_11==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(va!
 lidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 16;}
+
+                        else if ( (LA28_11==ID) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParen!
 thesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WH!
 EN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSo
ftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(D!
 roolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 17;}
+
+                        else if ( (LA28_11==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+
+                        else if ( (LA28_11==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
+
+                        else if ( (LA28_11==LEFT_PAREN) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateId!
 entifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKey!
 words.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(
DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 20;}
+
+                        else if ( ((LA28_11>=VT_COMPILATION_UNIT && LA28_11<=SEMICOLON)||(LA28_11>=DOT_STAR && LA28_11<=STRING)||(LA28_11>=COMMA && LA28_11<=AT)||(LA28_11>=EQUALS && LA28_11<=NULL)||(LA28_11>=RIGHT_SQUARE && LA28_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
+
+                         
+                        input.seek(index28_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 18 : 
                         int LA28_18 = input.LA(1);
 
                          
                         int index28_18 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_18==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 22;}
+                        if ( (LA28_18==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(valid!
 ateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 23;}
 
-                        else if ( ((LA28_18>=VT_COMPILATION_UNIT && LA28_18<=LEFT_SQUARE)||(LA28_18>=THEN && LA28_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( ((LA28_18>=VT_COMPILATION_UNIT && LA28_18<=SEMICOLON)||(LA28_18>=DOT && LA28_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
 
                          
                         input.seek(index28_18);
                         if ( s>=0 ) return s;
                         break;
-                    case 14 : 
-                        int LA28_13 = input.LA(1);
+                    case 19 : 
+                        int LA28_7 = input.LA(1);
 
                          
-                        int index28_13 = input.index();
+                        int index28_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))) ) {s = 12;}
+                        if ( (LA28_7==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 14;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (LA28_7==ID) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 15;}
 
+                        else if ( (LA28_7==THEN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 9;}
+
                          
-                        input.seek(index28_13);
+                        input.seek(index28_7);
                         if ( s>=0 ) return s;
                         break;
-                    case 15 : 
-                        int LA28_20 = input.LA(1);
+                    case 20 : 
+                        int LA28_1 = input.LA(1);
 
                          
-                        int index28_20 = input.index();
+                        int index28_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( (LA28_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateL!
 T(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 3;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (LA28_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 4;}
 
+                        else if ( (LA28_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 5;}
+
+                        else if ( (LA28_1==LEFT_PAREN) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWi!
 thParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validat!
 eIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesi
s()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithPar!
 enthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhe!
 nWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))|
|(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.W!
 HEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKe!
 ywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey
(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WH!
 EN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 6;}
+
+                        else if ( (LA28_1==COLON) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKe!
 y(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIden!
 tifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&
(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthe!
 sis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWith!
 Parenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(val
idateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))!
 )||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeyword!
 s.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Droo
lsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierK!
 ey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywor!
 ds.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Dro
olsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 7;}
+
+                        else if ( (LA28_1==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 8;}
+
+                        else if ( (LA28_1==THEN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 9;}
+
+                        else if ( (LA28_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 10;}
+
                          
-                        input.seek(index28_20);
+                        input.seek(index28_1);
                         if ( s>=0 ) return s;
                         break;
+                    case 21 : 
+                        int LA28_16 = input.LA(1);
+
+                         
+                        int index28_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA28_16==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Drool!
 sSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 21;}
+
+                        else if ( (LA28_16==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 22;}
+
+                        else if ( ((LA28_16>=VT_COMPILATION_UNIT && LA28_16<=SEMICOLON)||(LA28_16>=DOT && LA28_16<=STRING)||(LA28_16>=COMMA && LA28_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
+
+                         
+                        input.seek(index28_16);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 22 : 
+                        int LA28_29 = input.LA(1);
+
+                         
+                        int index28_29 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 13;}
+
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 14;}
+
+                         
+                        input.seek(index28_29);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 23 : 
+                        int LA28_28 = input.LA(1);
+
+                         
+                        int index28_28 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 13;}
+
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 14;}
+
+                         
+                        input.seek(index28_28);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 24 : 
+                        int LA28_6 = input.LA(1);
+
+                         
+                        int index28_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA28_6==ID) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis!
 ()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKe!
 y(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validat
eIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(!
 validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthe!
 sis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhe
nWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(vali!
 dateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))!
 )||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKe
ywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Drool!
 sSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierK!
 ey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(valida
teIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&!
 (validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenth!
 esis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWh
enWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(val!
 idateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)!
 ))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftK
eywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Droo!
 lsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifier!
 Key(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(valid
ateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&!
 &(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParent!
 hesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateW
henWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(va!
 lidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN!
 )))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoft
Keywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Dro!
 olsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifie!
 rKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(vali
dateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()!
 &&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParen!
 thesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validate
WhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(v!
 alidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParent!
 hesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateW
henWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(va!
 lidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN!
 )))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoft
Keywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Dro!
 olsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifie!
 rKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(vali
dateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()!
 &&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParen!
 thesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validate
WhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(v!
 alidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHE!
 N)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSof
tKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Dr!
 oolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifi!
 erKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(val
idateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 11;}
+
+                        else if ( (LA28_6==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 12;}
+
+                        else if ( ((LA28_6>=VT_COMPILATION_UNIT && LA28_6<=SEMICOLON)||(LA28_6>=DOT && LA28_6<=STRING)||(LA28_6>=COMMA && LA28_6<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 13;}
+
+                         
+                        input.seek(index28_6);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
@@ -16607,376 +17008,529 @@
             throw nvae;
         }
     }
-    static final String DFA34_eotS =
-        "\32\uffff";
-    static final String DFA34_eofS =
-        "\32\uffff";
-    static final String DFA34_minS =
-        "\2\130\5\uffff\1\4\2\uffff\1\4\1\0\1\uffff\1\4\2\0\3\4\1\0\2\4\4"+
-        "\0";
-    static final String DFA34_maxS =
-        "\1\164\1\167\5\uffff\1\u0080\2\uffff\1\u0080\1\0\1\uffff\1\u0080"+
-        "\2\0\3\u0080\1\0\2\u0080\4\0";
-    static final String DFA34_acceptS =
-        "\2\uffff\1\2\4\1\1\uffff\1\1\1\2\2\uffff\1\1\15\uffff";
-    static final String DFA34_specialS =
-        "\1\5\1\2\5\uffff\1\1\2\uffff\1\13\1\10\1\uffff\1\11\1\6\1\0\1\12"+
-        "\1\14\1\3\1\15\1\7\1\4\4\uffff}>";
-    static final String[] DFA34_transitionS = {
+    static final String DFA36_eotS =
+        "\41\uffff";
+    static final String DFA36_eofS =
+        "\41\uffff";
+    static final String DFA36_minS =
+        "\2\130\6\uffff\1\4\3\uffff\1\4\1\0\1\uffff\1\4\1\0\2\4\1\0\1\4\1"+
+        "\0\4\4\3\0\2\4\2\0";
+    static final String DFA36_maxS =
+        "\1\164\1\167\6\uffff\1\u0080\3\uffff\1\u0080\1\0\1\uffff\1\u0080"+
+        "\1\0\2\u0080\1\0\1\u0080\1\0\4\u0080\3\0\2\u0080\2\0";
+    static final String DFA36_acceptS =
+        "\2\uffff\1\2\4\1\1\2\1\uffff\2\2\1\1\2\uffff\1\1\22\uffff";
+    static final String DFA36_specialS =
+        "\1\15\1\17\6\uffff\1\26\3\uffff\1\21\1\10\1\uffff\1\23\1\14\1\22"+
+        "\1\7\1\1\1\5\1\16\1\4\1\2\1\20\1\6\1\13\1\25\1\24\1\3\1\0\1\12\1"+
+        "\11}>";
+    static final String[] DFA36_transitionS = {
             "\1\1\5\uffff\1\3\25\uffff\1\2",
-            "\1\11\3\uffff\1\10\1\7\3\uffff\1\11\1\uffff\1\5\1\6\17\uffff"+
-            "\1\11\2\uffff\1\4",
+            "\1\11\3\uffff\1\5\1\10\3\uffff\1\7\1\uffff\1\6\1\13\17\uffff"+
+            "\1\12\2\uffff\1\4",
             "",
             "",
             "",
             "",
             "",
-            "\124\14\1\12\4\14\1\13\43\14",
             "",
+            "\124\16\1\14\4\16\1\15\43\16",
             "",
-            "\124\14\1\17\1\20\3\14\1\16\3\14\1\15\20\14\1\21\16\14",
+            "",
+            "",
+            "\124\16\1\20\1\21\3\16\1\23\3\16\1\17\20\16\1\22\16\16",
             "\1\uffff",
             "",
-            "\124\14\1\22\4\14\1\23\43\14",
+            "\124\16\1\24\4\16\1\25\43\16",
             "\1\uffff",
+            "\124\16\1\26\50\16",
+            "\157\16\1\27\15\16",
             "\1\uffff",
-            "\124\14\1\24\50\14",
-            "\157\14\1\25\15\14",
-            "\125\14\1\26\3\14\1\27\24\14\1\30\16\14",
+            "\125\16\1\30\3\16\1\32\24\16\1\31\16\16",
             "\1\uffff",
-            "\125\14\1\20\3\14\1\31\24\14\1\21\16\14",
-            "\131\14\1\31\24\14\1\21\16\14",
+            "\125\16\1\21\3\16\1\33\24\16\1\22\16\16",
+            "\131\16\1\34\24\16\1\22\16\16",
+            "\124\16\1\35\50\16",
+            "\157\16\1\36\15\16",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\125\16\1\30\3\16\1\37\24\16\1\31\16\16",
+            "\131\16\1\40\24\16\1\31\16\16",
+            "\1\uffff",
             "\1\uffff"
     };
 
-    static final short[] DFA34_eot = DFA.unpackEncodedString(DFA34_eotS);
-    static final short[] DFA34_eof = DFA.unpackEncodedString(DFA34_eofS);
-    static final char[] DFA34_min = DFA.unpackEncodedStringToUnsignedChars(DFA34_minS);
-    static final char[] DFA34_max = DFA.unpackEncodedStringToUnsignedChars(DFA34_maxS);
-    static final short[] DFA34_accept = DFA.unpackEncodedString(DFA34_acceptS);
-    static final short[] DFA34_special = DFA.unpackEncodedString(DFA34_specialS);
-    static final short[][] DFA34_transition;
+    static final short[] DFA36_eot = DFA.unpackEncodedString(DFA36_eotS);
+    static final short[] DFA36_eof = DFA.unpackEncodedString(DFA36_eofS);
+    static final char[] DFA36_min = DFA.unpackEncodedStringToUnsignedChars(DFA36_minS);
+    static final char[] DFA36_max = DFA.unpackEncodedStringToUnsignedChars(DFA36_maxS);
+    static final short[] DFA36_accept = DFA.unpackEncodedString(DFA36_acceptS);
+    static final short[] DFA36_special = DFA.unpackEncodedString(DFA36_specialS);
+    static final short[][] DFA36_transition;
 
     static {
-        int numStates = DFA34_transitionS.length;
-        DFA34_transition = new short[numStates][];
+        int numStates = DFA36_transitionS.length;
+        DFA36_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA34_transition[i] = DFA.unpackEncodedString(DFA34_transitionS[i]);
+            DFA36_transition[i] = DFA.unpackEncodedString(DFA36_transitionS[i]);
         }
     }
 
-    class DFA34 extends DFA {
+    class DFA36 extends DFA {
 
-        public DFA34(BaseRecognizer recognizer) {
+        public DFA36(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 34;
-            this.eot = DFA34_eot;
-            this.eof = DFA34_eof;
-            this.min = DFA34_min;
-            this.max = DFA34_max;
-            this.accept = DFA34_accept;
-            this.special = DFA34_special;
-            this.transition = DFA34_transition;
+            this.decisionNumber = 36;
+            this.eot = DFA36_eot;
+            this.eof = DFA36_eof;
+            this.min = DFA36_min;
+            this.max = DFA36_max;
+            this.accept = DFA36_accept;
+            this.special = DFA36_special;
+            this.transition = DFA36_transition;
         }
         public String getDescription() {
-            return "()* loopback of 469:45: ( ( COMMA )? attr= rule_attribute )*";
+            return "()* loopback of 487:45: ( ( COMMA )? attr= rule_attribute )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA34_15 = input.LA(1);
+                        int LA36_30 = input.LA(1);
 
                          
-                        int index34_15 = input.index();
+                        int index36_30 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( (LA36_30==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 32;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (LA36_30==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
 
+                        else if ( ((LA36_30>=VT_COMPILATION_UNIT && LA36_30<=STRING)||(LA36_30>=COMMA && LA36_30<=NULL)||(LA36_30>=RIGHT_SQUARE && LA36_30<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
+
                          
-                        input.seek(index34_15);
+                        input.seek(index36_30);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA34_7 = input.LA(1);
+                        int LA36_19 = input.LA(1);
 
                          
-                        int index34_7 = input.index();
+                        int index36_19 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA34_7==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 10;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 14;}
 
-                        else if ( (LA34_7==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 11;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 10;}
 
-                        else if ( ((LA34_7>=VT_COMPILATION_UNIT && LA34_7<=SEMICOLON)||(LA34_7>=DOT && LA34_7<=STRING)||(LA34_7>=COMMA && LA34_7<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
-
                          
-                        input.seek(index34_7);
+                        input.seek(index36_19);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA34_1 = input.LA(1);
+                        int LA36_23 = input.LA(1);
 
                          
-                        int index34_1 = input.index();
+                        int index36_23 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA34_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateL!
 T(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 4;}
+                        if ( (LA36_23==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 28;}
 
-                        else if ( (LA34_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 5;}
+                        else if ( (LA36_23==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
 
-                        else if ( (LA34_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 6;}
+                        else if ( ((LA36_23>=VT_COMPILATION_UNIT && LA36_23<=STRING)||(LA36_23>=COMMA && LA36_23<=NULL)||(LA36_23>=RIGHT_SQUARE && LA36_23<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
 
-                        else if ( (LA34_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 7;}
-
-                        else if ( (LA34_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 8;}
-
-                        else if ( (LA34_1==ID||LA34_1==COLON||LA34_1==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 9;}
-
                          
-                        input.seek(index34_1);
+                        input.seek(index36_23);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA34_18 = input.LA(1);
+                        int LA36_29 = input.LA(1);
 
                          
-                        int index34_18 = input.index();
+                        int index36_29 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA34_18>=VT_COMPILATION_UNIT && LA34_18<=ID)||(LA34_18>=DOT_STAR && LA34_18<=STRING)||(LA34_18>=COMMA && LA34_18<=NULL)||(LA34_18>=RIGHT_SQUARE && LA34_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        if ( (LA36_29==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
 
-                        else if ( (LA34_18==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 22;}
+                        else if ( (LA36_29==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 31;}
 
-                        else if ( (LA34_18==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 23;}
+                        else if ( (LA36_29==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 24;}
 
-                        else if ( (LA34_18==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 24;}
+                        else if ( ((LA36_29>=VT_COMPILATION_UNIT && LA36_29<=ID)||(LA36_29>=DOT_STAR && LA36_29<=STRING)||(LA36_29>=COMMA && LA36_29<=NULL)||(LA36_29>=RIGHT_SQUARE && LA36_29<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
 
                          
-                        input.seek(index34_18);
+                        input.seek(index36_29);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA34_21 = input.LA(1);
+                        int LA36_22 = input.LA(1);
 
                          
-                        int index34_21 = input.index();
+                        int index36_22 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA34_21>=VT_COMPILATION_UNIT && LA34_21<=STRING)||(LA34_21>=COMMA && LA34_21<=NULL)||(LA34_21>=RIGHT_SQUARE && LA34_21<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        if ( (LA36_22==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 18;}
 
-                        else if ( (LA34_21==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+                        else if ( (LA36_22==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 27;}
 
-                        else if ( (LA34_21==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
+                        else if ( (LA36_22==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 17;}
 
+                        else if ( ((LA36_22>=VT_COMPILATION_UNIT && LA36_22<=ID)||(LA36_22>=DOT_STAR && LA36_22<=STRING)||(LA36_22>=COMMA && LA36_22<=NULL)||(LA36_22>=RIGHT_SQUARE && LA36_22<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
+
                          
-                        input.seek(index34_21);
+                        input.seek(index36_22);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA34_0 = input.LA(1);
+                        int LA36_20 = input.LA(1);
 
                          
-                        int index34_0 = input.index();
+                        int index36_20 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA34_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierK!
 ey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {s = 1;}
+                        if ( (LA36_20==DOT) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 24;}
 
-                        else if ( (LA34_0==THEN) ) {s = 2;}
+                        else if ( (LA36_20==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
 
-                        else if ( (LA34_0==COMMA) ) {s = 3;}
+                        else if ( (LA36_20==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 26;}
 
+                        else if ( ((LA36_20>=VT_COMPILATION_UNIT && LA36_20<=ID)||(LA36_20>=DOT_STAR && LA36_20<=STRING)||(LA36_20>=COMMA && LA36_20<=NULL)||(LA36_20>=RIGHT_SQUARE && LA36_20<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
+
                          
-                        input.seek(index34_0);
+                        input.seek(index36_20);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA34_14 = input.LA(1);
+                        int LA36_25 = input.LA(1);
 
                          
-                        int index34_14 = input.index();
+                        int index36_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( (LA36_25==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)!
 ))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 30;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( ((LA36_25>=VT_COMPILATION_UNIT && LA36_25<=LEFT_SQUARE)||(LA36_25>=THEN && LA36_25<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
 
                          
-                        input.seek(index34_14);
+                        input.seek(index36_25);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA34_20 = input.LA(1);
+                        int LA36_18 = input.LA(1);
 
                          
-                        int index34_20 = input.index();
+                        int index36_18 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA34_20>=VT_COMPILATION_UNIT && LA34_20<=ID)||(LA34_20>=DOT_STAR && LA34_20<=STRING)||(LA34_20>=COMMA && LA34_20<=NULL)||(LA34_20>=RIGHT_SQUARE && LA34_20<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        if ( (LA36_18==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)!
 ))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 23;}
 
-                        else if ( (LA34_20==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+                        else if ( ((LA36_18>=VT_COMPILATION_UNIT && LA36_18<=LEFT_SQUARE)||(LA36_18>=THEN && LA36_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
 
-                        else if ( (LA34_20==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
-
-                        else if ( (LA34_20==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
-
                          
-                        input.seek(index34_20);
+                        input.seek(index36_18);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA34_11 = input.LA(1);
+                        int LA36_13 = input.LA(1);
 
                          
-                        int index34_11 = input.index();
+                        int index36_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 14;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 10;}
 
                          
-                        input.seek(index34_11);
+                        input.seek(index36_13);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA34_13 = input.LA(1);
+                        int LA36_32 = input.LA(1);
 
                          
-                        int index34_13 = input.index();
+                        int index36_32 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA34_13>=VT_COMPILATION_UNIT && LA34_13<=SEMICOLON)||(LA34_13>=DOT && LA34_13<=STRING)||(LA34_13>=COMMA && LA34_13<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 14;}
 
-                        else if ( (LA34_13==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 10;}
 
-                        else if ( (LA34_13==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
-
                          
-                        input.seek(index34_13);
+                        input.seek(index36_32);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA34_16 = input.LA(1);
+                        int LA36_31 = input.LA(1);
 
                          
-                        int index34_16 = input.index();
+                        int index36_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA34_16==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 20;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 14;}
 
-                        else if ( ((LA34_16>=VT_COMPILATION_UNIT && LA34_16<=SEMICOLON)||(LA34_16>=DOT && LA34_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 10;}
 
                          
-                        input.seek(index34_16);
+                        input.seek(index36_31);
                         if ( s>=0 ) return s;
                         break;
                     case 11 : 
-                        int LA34_10 = input.LA(1);
+                        int LA36_26 = input.LA(1);
 
                          
-                        int index34_10 = input.index();
+                        int index36_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA34_10==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 13;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 14;}
 
-                        else if ( (LA34_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 14;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 10;}
 
-                        else if ( (LA34_10==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 15;}
+                         
+                        input.seek(index36_26);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
+                        int LA36_16 = input.LA(1);
 
-                        else if ( ((LA34_10>=VT_COMPILATION_UNIT && LA34_10<=SEMICOLON)||(LA34_10>=DOT_STAR && LA34_10<=STRING)||(LA34_10>=COMMA && LA34_10<=AT)||(LA34_10>=EQUALS && LA34_10<=NULL)||(LA34_10>=RIGHT_SQUARE && LA34_10<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                         
+                        int index36_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 14;}
 
-                        else if ( (LA34_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 10;}
 
-                        else if ( (LA34_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+                         
+                        input.seek(index36_16);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 13 : 
+                        int LA36_0 = input.LA(1);
 
                          
-                        input.seek(index34_10);
+                        int index36_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA36_0==ID) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis!
 ()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWi!
 thParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(v
alidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN!
 )))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWith!
 Parenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(val
idateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))!
 )||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(valida!
 teWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHE
N)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateWhenWith!
 Parenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(valid!
 ateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthe
sis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdenti!
 fierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Dr!
 oolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIde
ntifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 1;}
+
+                        else if ( (LA36_0==THEN) ) {s = 2;}
+
+                        else if ( (LA36_0==COMMA) ) {s = 3;}
+
+                         
+                        input.seek(index36_0);
                         if ( s>=0 ) return s;
                         break;
-                    case 12 : 
-                        int LA34_17 = input.LA(1);
+                    case 14 : 
+                        int LA36_21 = input.LA(1);
 
                          
-                        int index34_17 = input.index();
+                        int index36_21 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA34_17==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 21;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 14;}
 
-                        else if ( ((LA34_17>=VT_COMPILATION_UNIT && LA34_17<=LEFT_SQUARE)||(LA34_17>=THEN && LA34_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 10;}
 
                          
-                        input.seek(index34_17);
+                        input.seek(index36_21);
                         if ( s>=0 ) return s;
                         break;
-                    case 13 : 
-                        int LA34_19 = input.LA(1);
+                    case 15 : 
+                        int LA36_1 = input.LA(1);
 
                          
-                        int index34_19 = input.index();
+                        int index36_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( (LA36_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateL!
 T(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 4;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (LA36_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 5;}
 
+                        else if ( (LA36_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 6;}
+
+                        else if ( (LA36_1==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 7;}
+
+                        else if ( (LA36_1==LEFT_PAREN) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentif!
 ierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validat!
 eIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesi
s()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithPar!
 enthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhe!
 nWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))|
|(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.W!
 HEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKe!
 ywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey
(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WH!
 EN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 8;}
+
+                        else if ( (LA36_1==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 9;}
+
+                        else if ( (LA36_1==THEN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 10;}
+
+                        else if ( (LA36_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 11;}
+
                          
-                        input.seek(index34_19);
+                        input.seek(index36_1);
                         if ( s>=0 ) return s;
                         break;
+                    case 16 : 
+                        int LA36_24 = input.LA(1);
+
+                         
+                        int index36_24 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA36_24==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(valid!
 ateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 29;}
+
+                        else if ( ((LA36_24>=VT_COMPILATION_UNIT && LA36_24<=SEMICOLON)||(LA36_24>=DOT && LA36_24<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
+
+                         
+                        input.seek(index36_24);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 17 : 
+                        int LA36_12 = input.LA(1);
+
+                         
+                        int index36_12 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA36_12==COLON) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(va!
 lidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 15;}
+
+                        else if ( (LA36_12==ID) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifier!
 Key(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WH!
 EN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSo
ftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(D!
 roolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 16;}
+
+                        else if ( (LA36_12==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 17;}
+
+                        else if ( (LA36_12==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 18;}
+
+                        else if ( (LA36_12==LEFT_PAREN) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WH!
 EN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKey!
 words.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(
DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 19;}
+
+                        else if ( ((LA36_12>=VT_COMPILATION_UNIT && LA36_12<=SEMICOLON)||(LA36_12>=DOT_STAR && LA36_12<=STRING)||(LA36_12>=COMMA && LA36_12<=AT)||(LA36_12>=EQUALS && LA36_12<=NULL)||(LA36_12>=RIGHT_SQUARE && LA36_12<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
+
+                         
+                        input.seek(index36_12);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 18 : 
+                        int LA36_17 = input.LA(1);
+
+                         
+                        int index36_17 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA36_17==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Drool!
 sSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 22;}
+
+                        else if ( ((LA36_17>=VT_COMPILATION_UNIT && LA36_17<=SEMICOLON)||(LA36_17>=DOT && LA36_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
+
+                         
+                        input.seek(index36_17);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 19 : 
+                        int LA36_15 = input.LA(1);
+
+                         
+                        int index36_15 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA36_15==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Drool!
 sSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 20;}
+
+                        else if ( (LA36_15==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 21;}
+
+                        else if ( ((LA36_15>=VT_COMPILATION_UNIT && LA36_15<=SEMICOLON)||(LA36_15>=DOT && LA36_15<=STRING)||(LA36_15>=COMMA && LA36_15<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
+
+                         
+                        input.seek(index36_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 20 : 
+                        int LA36_28 = input.LA(1);
+
+                         
+                        int index36_28 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 14;}
+
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 10;}
+
+                         
+                        input.seek(index36_28);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 21 : 
+                        int LA36_27 = input.LA(1);
+
+                         
+                        int index36_27 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 14;}
+
+                        else if ( (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))))) ) {s = 10;}
+
+                         
+                        input.seek(index36_27);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 22 : 
+                        int LA36_8 = input.LA(1);
+
+                         
+                        int index36_8 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA36_8==ID) && (((validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis!
 ()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKe!
 y(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validat
eIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(!
 validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthe!
 sis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhe
nWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(vali!
 dateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN))!
 )||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKe
ywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Drool!
 sSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierK!
 ey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(valida
teIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&!
 (validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenth!
 esis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWh
enWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(val!
 idateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)!
 ))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftK
eywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Droo!
 lsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifier!
 Key(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(valid
ateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&!
 &(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParent!
 hesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateW
henWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(va!
 lidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN!
 )))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoft
Keywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Dro!
 olsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifie!
 rKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(vali
dateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()!
 &&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParen!
 thesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validate
WhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(v!
 alidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParent!
 hesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateW
henWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(va!
 lidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN!
 )))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoft
Keywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Dro!
 olsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifie!
 rKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(vali
dateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()!
 &&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParen!
 thesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validate
WhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(v!
 alidateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHE!
 N)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSof
tKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(Dr!
 oolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifi!
 erKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(val
idateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 12;}
+
+                        else if ( (LA36_8==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))||(validateWhenWithParenthesis()&&(validateIdentifierKey(DroolsSoftKeywords.WHEN)))))) {s = 13;}
+
+                        else if ( ((LA36_8>=VT_COMPILATION_UNIT && LA36_8<=SEMICOLON)||(LA36_8>=DOT && LA36_8<=STRING)||(LA36_8>=COMMA && LA36_8<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 14;}
+
+                         
+                        input.seek(index36_8);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 34, _s, input);
+                new NoViableAltException(getDescription(), 36, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA51_eotS =
+    static final String DFA53_eotS =
         "\172\uffff";
-    static final String DFA51_eofS =
+    static final String DFA53_eofS =
         "\172\uffff";
-    static final String DFA51_minS =
-        "\3\130\2\0\2\130\1\163\1\0\3\uffff\1\131\1\130\1\131\1\135\1\uffff"+
-        "\1\130\1\163\1\130\1\131\1\130\1\131\1\135\1\130\2\0\1\130\1\163"+
-        "\2\130\2\0\1\130\1\4\11\130\1\0\2\uffff\1\131\1\135\1\130\1\0\2"+
-        "\130\1\0\1\4\11\130\1\uffff\1\130\1\4\12\0\1\uffff\14\0\1\uffff"+
-        "\4\0\1\uffff\32\0";
-    static final String DFA51_maxS =
-        "\2\135\1\162\2\0\1\135\1\130\1\163\1\0\3\uffff\1\162\1\130\2\162"+
-        "\1\uffff\1\130\1\163\1\137\1\162\1\137\3\162\2\0\1\130\1\163\1\137"+
-        "\1\162\2\0\1\130\1\u0080\1\130\7\161\1\130\1\0\2\uffff\3\162\1\0"+
-        "\1\145\1\130\1\0\1\u0080\1\130\7\161\1\130\1\uffff\1\162\1\u0080"+
-        "\12\0\1\uffff\14\0\1\uffff\4\0\1\uffff\32\0";
-    static final String DFA51_acceptS =
-        "\11\uffff\1\1\2\2\4\uffff\1\3\34\uffff\2\3\21\uffff\1\3\14\uffff"+
-        "\1\3\14\uffff\1\3\4\uffff\1\3\32\uffff";
-    static final String DFA51_specialS =
-        "\2\uffff\1\2\1\6\1\3\3\uffff\1\4\20\uffff\1\10\1\5\4\uffff\1\7\1"+
-        "\12\13\uffff\1\0\5\uffff\1\11\2\uffff\1\1\104\uffff}>";
-    static final String[] DFA51_transitionS = {
+    static final String DFA53_minS =
+        "\3\130\2\0\1\130\1\0\1\uffff\1\130\1\163\2\uffff\1\131\1\130\1\uffff"+
+        "\1\131\1\135\1\130\1\163\1\130\1\131\1\130\1\131\1\135\1\130\2\0"+
+        "\1\130\1\163\2\130\2\0\1\130\1\0\1\4\11\130\2\uffff\1\131\1\135"+
+        "\1\130\1\0\2\130\1\4\11\130\1\0\1\uffff\1\130\1\uffff\1\4\26\0\1"+
+        "\uffff\17\0\1\uffff\17\0";
+    static final String DFA53_maxS =
+        "\2\135\1\162\2\0\1\135\1\0\1\uffff\1\130\1\163\2\uffff\1\162\1\130"+
+        "\1\uffff\2\162\1\130\1\163\1\137\1\162\1\137\3\162\2\0\1\130\1\163"+
+        "\1\137\1\162\2\0\1\130\1\0\1\u0080\1\130\7\161\1\130\2\uffff\3\162"+
+        "\1\0\1\145\1\130\1\u0080\1\130\7\161\1\130\1\0\1\uffff\1\162\1\uffff"+
+        "\1\u0080\26\0\1\uffff\17\0\1\uffff\17\0";
+    static final String DFA53_acceptS =
+        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\36\uffff\2\3\21\uffff\1\3\1"+
+        "\uffff\1\3\27\uffff\1\3\17\uffff\1\3\17\uffff";
+    static final String DFA53_specialS =
+        "\2\uffff\1\7\1\0\1\3\1\uffff\1\10\22\uffff\1\2\1\1\4\uffff\1\5\1"+
+        "\11\1\uffff\1\4\17\uffff\1\6\14\uffff\1\12\72\uffff}>";
+    static final String[] DFA53_transitionS = {
             "\1\2\4\uffff\1\1",
-            "\1\4\4\uffff\1\3",
-            "\1\11\1\6\3\uffff\1\10\3\uffff\1\5\20\uffff\1\7",
+            "\1\3\4\uffff\1\4",
+            "\1\7\1\10\3\uffff\1\6\3\uffff\1\5\20\uffff\1\11",
             "\1\uffff",
             "\1\uffff",
             "\1\14\4\uffff\1\15",
-            "\1\16",
-            "\1\17",
             "\1\uffff",
             "",
+            "\1\17",
+            "\1\20",
             "",
             "",
             "\1\21\3\uffff\1\23\24\uffff\1\22",
             "\1\24",
-            "\1\6\3\uffff\1\25\24\uffff\1\7",
-            "\1\25\24\uffff\1\7",
             "",
+            "\1\10\3\uffff\1\25\24\uffff\1\11",
+            "\1\25\24\uffff\1\11",
             "\1\26",
             "\1\27",
             "\1\30\4\uffff\1\31\1\uffff\1\32",
@@ -16984,29 +17538,29 @@
             "\1\36\4\uffff\1\37\1\uffff\1\40",
             "\1\21\3\uffff\1\23\24\uffff\1\22",
             "\1\23\24\uffff\1\22",
-            "\1\44\1\43\3\uffff\1\54\3\uffff\1\41\7\uffff\1\45\1\46\1\47"+
-            "\1\50\1\51\1\52\1\53\2\uffff\1\42",
+            "\1\45\1\44\3\uffff\1\42\3\uffff\1\41\7\uffff\1\46\1\47\1\50"+
+            "\1\51\1\52\1\53\1\54\2\uffff\1\43",
             "\1\uffff",
             "\1\uffff",
             "\1\57",
             "\1\60",
             "\1\61\4\uffff\1\62\1\uffff\1\63",
-            "\1\70\1\67\3\uffff\1\65\3\uffff\1\64\7\uffff\1\71\1\72\1\73"+
-            "\1\74\1\75\1\76\1\77\2\uffff\1\66",
+            "\1\67\1\66\3\uffff\1\77\3\uffff\1\64\7\uffff\1\70\1\71\1\72"+
+            "\1\73\1\74\1\75\1\76\2\uffff\1\65",
             "\1\uffff",
             "\1\uffff",
             "\1\101",
-            "\156\102\1\103\1\104\15\102",
-            "\1\105",
-            "\1\106\3\uffff\1\107\1\110\5\uffff\2\107\12\uffff\1\111\2\107",
-            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
-            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
-            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
-            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
-            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
-            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
-            "\1\114",
             "\1\uffff",
+            "\156\103\1\104\1\105\15\103",
+            "\1\106",
+            "\1\107\3\uffff\1\110\1\111\5\uffff\2\110\12\uffff\1\112\2\110",
+            "\1\113\3\uffff\1\110\1\114\5\uffff\2\110\13\uffff\2\110",
+            "\1\113\3\uffff\1\110\1\114\5\uffff\2\110\13\uffff\2\110",
+            "\1\113\3\uffff\1\110\1\114\5\uffff\2\110\13\uffff\2\110",
+            "\1\113\3\uffff\1\110\1\114\5\uffff\2\110\13\uffff\2\110",
+            "\1\113\3\uffff\1\110\1\114\5\uffff\2\110\13\uffff\2\110",
+            "\1\113\3\uffff\1\110\1\114\5\uffff\2\110\13\uffff\2\110",
+            "\1\115",
             "",
             "",
             "\1\33\3\uffff\1\35\24\uffff\1\34",
@@ -17016,22 +17570,23 @@
             "\1\uffff",
             "\1\133\6\uffff\1\135\5\uffff\1\134",
             "\1\136",
+            "\156\137\1\140\1\141\15\137",
+            "\1\142",
+            "\1\144\3\uffff\1\145\1\143\5\uffff\2\145\12\uffff\1\146\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\151",
             "\1\uffff",
-            "\156\140\1\141\1\142\15\140",
-            "\1\143",
-            "\1\144\3\uffff\1\145\1\146\5\uffff\2\145\12\uffff\1\147\2\145",
-            "\1\150\3\uffff\1\145\1\151\5\uffff\2\145\13\uffff\2\145",
-            "\1\150\3\uffff\1\145\1\151\5\uffff\2\145\13\uffff\2\145",
-            "\1\150\3\uffff\1\145\1\151\5\uffff\2\145\13\uffff\2\145",
-            "\1\150\3\uffff\1\145\1\151\5\uffff\2\145\13\uffff\2\145",
-            "\1\150\3\uffff\1\145\1\151\5\uffff\2\145\13\uffff\2\145",
-            "\1\150\3\uffff\1\145\1\151\5\uffff\2\145\13\uffff\2\145",
-            "\1\152",
             "",
             "\1\155\1\154\3\uffff\1\165\1\171\1\32\5\uffff\1\170\1\167\1"+
             "\uffff\1\166\1\156\1\157\1\160\1\161\1\162\1\163\1\164\2\uffff"+
             "\1\153",
-            "\156\102\1\103\1\104\15\102",
+            "",
+            "\156\103\1\104\1\105\15\103",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17042,7 +17597,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17060,7 +17614,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17072,6 +17625,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17089,243 +17643,243 @@
             "\1\uffff"
     };
 
-    static final short[] DFA51_eot = DFA.unpackEncodedString(DFA51_eotS);
-    static final short[] DFA51_eof = DFA.unpackEncodedString(DFA51_eofS);
-    static final char[] DFA51_min = DFA.unpackEncodedStringToUnsignedChars(DFA51_minS);
-    static final char[] DFA51_max = DFA.unpackEncodedStringToUnsignedChars(DFA51_maxS);
-    static final short[] DFA51_accept = DFA.unpackEncodedString(DFA51_acceptS);
-    static final short[] DFA51_special = DFA.unpackEncodedString(DFA51_specialS);
-    static final short[][] DFA51_transition;
+    static final short[] DFA53_eot = DFA.unpackEncodedString(DFA53_eotS);
+    static final short[] DFA53_eof = DFA.unpackEncodedString(DFA53_eofS);
+    static final char[] DFA53_min = DFA.unpackEncodedStringToUnsignedChars(DFA53_minS);
+    static final char[] DFA53_max = DFA.unpackEncodedStringToUnsignedChars(DFA53_maxS);
+    static final short[] DFA53_accept = DFA.unpackEncodedString(DFA53_acceptS);
+    static final short[] DFA53_special = DFA.unpackEncodedString(DFA53_specialS);
+    static final short[][] DFA53_transition;
 
     static {
-        int numStates = DFA51_transitionS.length;
-        DFA51_transition = new short[numStates][];
+        int numStates = DFA53_transitionS.length;
+        DFA53_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA51_transition[i] = DFA.unpackEncodedString(DFA51_transitionS[i]);
+            DFA53_transition[i] = DFA.unpackEncodedString(DFA53_transitionS[i]);
         }
     }
 
-    class DFA51 extends DFA {
+    class DFA53 extends DFA {
 
-        public DFA51(BaseRecognizer recognizer) {
+        public DFA53(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 51;
-            this.eot = DFA51_eot;
-            this.eof = DFA51_eof;
-            this.min = DFA51_min;
-            this.max = DFA51_max;
-            this.accept = DFA51_accept;
-            this.special = DFA51_special;
-            this.transition = DFA51_transition;
+            this.decisionNumber = 53;
+            this.eot = DFA53_eot;
+            this.eof = DFA53_eof;
+            this.min = DFA53_min;
+            this.max = DFA53_max;
+            this.accept = DFA53_accept;
+            this.special = DFA53_special;
+            this.transition = DFA53_transition;
         }
         public String getDescription() {
-            return "583:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "602:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA51_44 = input.LA(1);
+                        int LA53_3 = input.LA(1);
 
                          
-                        int index51_44 = input.index();
+                        int index53_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 77;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index51_44);
+                        input.seek(index53_3);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA51_53 = input.LA(1);
+                        int LA53_26 = input.LA(1);
 
                          
-                        int index51_53 = input.index();
+                        int index53_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 95;}
+                        else if ( (true) ) {s = 46;}
 
                          
-                        input.seek(index51_53);
+                        input.seek(index53_26);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA51_2 = input.LA(1);
+                        int LA53_25 = input.LA(1);
 
                          
-                        int index51_2 = input.index();
+                        int index53_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA51_2==COLON) ) {s = 5;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (LA51_2==DOT) ) {s = 6;}
+                        else if ( (true) ) {s = 45;}
 
-                        else if ( (LA51_2==LEFT_SQUARE) ) {s = 7;}
-
-                        else if ( (LA51_2==LEFT_PAREN) ) {s = 8;}
-
-                        else if ( (LA51_2==ID) && (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifi!
 erKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 9;}
-
                          
-                        input.seek(index51_2);
+                        input.seek(index53_25);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA51_4 = input.LA(1);
+                        int LA53_4 = input.LA(1);
 
                          
-                        int index51_4 = input.index();
+                        int index53_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (synpred6()) ) {s = 7;}
 
                         else if ( (true) ) {s = 11;}
 
                          
-                        input.seek(index51_4);
+                        input.seek(index53_4);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA51_8 = input.LA(1);
+                        int LA53_34 = input.LA(1);
 
                          
-                        int index51_8 = input.index();
+                        int index53_34 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((synpred6()||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL))))) ) {s = 9;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 16;}
+                        else if ( (true) ) {s = 66;}
 
                          
-                        input.seek(index51_8);
+                        input.seek(index53_34);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA51_26 = input.LA(1);
+                        int LA53_31 = input.LA(1);
 
                          
-                        int index51_26 = input.index();
+                        int index53_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 64;}
 
                          
-                        input.seek(index51_26);
+                        input.seek(index53_31);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA51_3 = input.LA(1);
+                        int LA53_50 = input.LA(1);
 
                          
-                        int index51_3 = input.index();
+                        int index53_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (true) ) {s = 90;}
 
                          
-                        input.seek(index51_3);
+                        input.seek(index53_50);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA51_31 = input.LA(1);
+                        int LA53_2 = input.LA(1);
 
                          
-                        int index51_31 = input.index();
+                        int index53_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (LA53_2==COLON) ) {s = 5;}
 
-                        else if ( (true) ) {s = 64;}
+                        else if ( (LA53_2==LEFT_PAREN) ) {s = 6;}
 
+                        else if ( (LA53_2==ID) && ((((synpred6()&&validateNotWithBinding())&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synp!
 red6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))))) {s = 7;}
+
+                        else if ( (LA53_2==DOT) ) {s = 8;}
+
+                        else if ( (LA53_2==LEFT_SQUARE) ) {s = 9;}
+
                          
-                        input.seek(index51_31);
+                        input.seek(index53_2);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA51_25 = input.LA(1);
+                        int LA53_6 = input.LA(1);
 
                          
-                        int index51_25 = input.index();
+                        int index53_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||synpred6()||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL))))) ) {s = 7;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 14;}
 
                          
-                        input.seek(index51_25);
+                        input.seek(index53_6);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA51_50 = input.LA(1);
+                        int LA53_32 = input.LA(1);
 
                          
-                        int index51_50 = input.index();
+                        int index53_32 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 90;}
+                        else if ( (true) ) {s = 46;}
 
                          
-                        input.seek(index51_50);
+                        input.seek(index53_32);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA51_32 = input.LA(1);
+                        int LA53_63 = input.LA(1);
 
                          
-                        int index51_32 = input.index();
+                        int index53_63 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 9;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 106;}
 
                          
-                        input.seek(index51_32);
+                        input.seek(index53_63);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 51, _s, input);
+                new NoViableAltException(getDescription(), 53, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA52_eotS =
+    static final String DFA54_eotS =
         "\172\uffff";
-    static final String DFA52_eofS =
+    static final String DFA54_eofS =
         "\172\uffff";
-    static final String DFA52_minS =
+    static final String DFA54_minS =
         "\3\130\2\0\1\130\1\0\1\uffff\1\130\1\163\2\uffff\1\131\1\130\1\uffff"+
         "\1\131\1\135\1\130\1\163\1\130\1\131\1\130\1\131\1\135\1\130\2\0"+
         "\1\130\1\163\2\130\2\0\1\130\1\0\1\4\11\130\2\uffff\1\131\1\135"+
-        "\1\130\1\0\2\130\1\0\1\4\11\130\1\uffff\1\130\1\uffff\1\4\26\0\1"+
-        "\uffff\4\0\1\uffff\32\0";
-    static final String DFA52_maxS =
+        "\1\130\1\0\2\130\1\4\11\130\1\0\1\uffff\1\130\1\uffff\1\4\26\0\1"+
+        "\uffff\17\0\1\uffff\17\0";
+    static final String DFA54_maxS =
         "\2\135\1\162\2\0\1\135\1\0\1\uffff\1\130\1\163\2\uffff\1\162\1\130"+
         "\1\uffff\2\162\1\130\1\163\1\137\1\162\1\137\3\162\2\0\1\130\1\163"+
         "\1\137\1\162\2\0\1\130\1\0\1\u0080\1\130\7\161\1\130\2\uffff\3\162"+
-        "\1\0\1\145\1\130\1\0\1\u0080\1\130\7\161\1\130\1\uffff\1\162\1\uffff"+
-        "\1\u0080\26\0\1\uffff\4\0\1\uffff\32\0";
-    static final String DFA52_acceptS =
+        "\1\0\1\145\1\130\1\u0080\1\130\7\161\1\130\1\0\1\uffff\1\162\1\uffff"+
+        "\1\u0080\26\0\1\uffff\17\0\1\uffff\17\0";
+    static final String DFA54_acceptS =
         "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\36\uffff\2\3\21\uffff\1\3\1"+
-        "\uffff\1\3\27\uffff\1\3\4\uffff\1\3\32\uffff";
-    static final String DFA52_specialS =
-        "\2\uffff\1\3\1\1\1\2\1\uffff\1\12\22\uffff\1\10\1\5\4\uffff\1\6"+
-        "\1\11\1\uffff\1\0\17\uffff\1\7\2\uffff\1\4\104\uffff}>";
-    static final String[] DFA52_transitionS = {
+        "\uffff\1\3\27\uffff\1\3\17\uffff\1\3\17\uffff";
+    static final String DFA54_specialS =
+        "\2\uffff\1\10\1\11\1\1\1\uffff\1\2\22\uffff\1\4\1\0\4\uffff\1\6"+
+        "\1\7\1\uffff\1\3\17\uffff\1\5\14\uffff\1\12\72\uffff}>";
+    static final String[] DFA54_transitionS = {
             "\1\2\4\uffff\1\1",
             "\1\4\4\uffff\1\3",
             "\1\7\1\10\3\uffff\1\6\3\uffff\1\5\20\uffff\1\11",
@@ -17357,8 +17911,8 @@
             "\1\57",
             "\1\60",
             "\1\61\4\uffff\1\62\1\uffff\1\63",
-            "\1\70\1\67\3\uffff\1\65\3\uffff\1\64\7\uffff\1\71\1\72\1\73"+
-            "\1\74\1\75\1\76\1\77\2\uffff\1\66",
+            "\1\67\1\66\3\uffff\1\77\3\uffff\1\64\7\uffff\1\70\1\71\1\72"+
+            "\1\73\1\74\1\75\1\76\2\uffff\1\65",
             "\1\uffff",
             "\1\uffff",
             "\1\101",
@@ -17382,17 +17936,17 @@
             "\1\uffff",
             "\1\133\6\uffff\1\135\5\uffff\1\134",
             "\1\136",
+            "\156\137\1\140\1\141\15\137",
+            "\1\142",
+            "\1\144\3\uffff\1\145\1\143\5\uffff\2\145\12\uffff\1\146\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\147\3\uffff\1\145\1\150\5\uffff\2\145\13\uffff\2\145",
+            "\1\151",
             "\1\uffff",
-            "\156\140\1\141\1\142\15\140",
-            "\1\143",
-            "\1\144\3\uffff\1\146\1\147\5\uffff\2\146\12\uffff\1\145\2\146",
-            "\1\150\3\uffff\1\146\1\151\5\uffff\2\146\13\uffff\2\146",
-            "\1\150\3\uffff\1\146\1\151\5\uffff\2\146\13\uffff\2\146",
-            "\1\150\3\uffff\1\146\1\151\5\uffff\2\146\13\uffff\2\146",
-            "\1\150\3\uffff\1\146\1\151\5\uffff\2\146\13\uffff\2\146",
-            "\1\150\3\uffff\1\146\1\151\5\uffff\2\146\13\uffff\2\146",
-            "\1\150\3\uffff\1\146\1\151\5\uffff\2\146\13\uffff\2\146",
-            "\1\152",
             "",
             "\1\155\1\154\3\uffff\1\165\1\171\1\32\5\uffff\1\170\1\167\1"+
             "\uffff\1\166\1\156\1\157\1\160\1\161\1\162\1\163\1\164\2\uffff"+
@@ -17426,7 +17980,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17438,6 +17991,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17455,142 +18009,136 @@
             "\1\uffff"
     };
 
-    static final short[] DFA52_eot = DFA.unpackEncodedString(DFA52_eotS);
-    static final short[] DFA52_eof = DFA.unpackEncodedString(DFA52_eofS);
-    static final char[] DFA52_min = DFA.unpackEncodedStringToUnsignedChars(DFA52_minS);
-    static final char[] DFA52_max = DFA.unpackEncodedStringToUnsignedChars(DFA52_maxS);
-    static final short[] DFA52_accept = DFA.unpackEncodedString(DFA52_acceptS);
-    static final short[] DFA52_special = DFA.unpackEncodedString(DFA52_specialS);
-    static final short[][] DFA52_transition;
+    static final short[] DFA54_eot = DFA.unpackEncodedString(DFA54_eotS);
+    static final short[] DFA54_eof = DFA.unpackEncodedString(DFA54_eofS);
+    static final char[] DFA54_min = DFA.unpackEncodedStringToUnsignedChars(DFA54_minS);
+    static final char[] DFA54_max = DFA.unpackEncodedStringToUnsignedChars(DFA54_maxS);
+    static final short[] DFA54_accept = DFA.unpackEncodedString(DFA54_acceptS);
+    static final short[] DFA54_special = DFA.unpackEncodedString(DFA54_specialS);
+    static final short[][] DFA54_transition;
 
     static {
-        int numStates = DFA52_transitionS.length;
-        DFA52_transition = new short[numStates][];
+        int numStates = DFA54_transitionS.length;
+        DFA54_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA52_transition[i] = DFA.unpackEncodedString(DFA52_transitionS[i]);
+            DFA54_transition[i] = DFA.unpackEncodedString(DFA54_transitionS[i]);
         }
     }
 
-    class DFA52 extends DFA {
+    class DFA54 extends DFA {
 
-        public DFA52(BaseRecognizer recognizer) {
+        public DFA54(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 52;
-            this.eot = DFA52_eot;
-            this.eof = DFA52_eof;
-            this.min = DFA52_min;
-            this.max = DFA52_max;
-            this.accept = DFA52_accept;
-            this.special = DFA52_special;
-            this.transition = DFA52_transition;
+            this.decisionNumber = 54;
+            this.eot = DFA54_eot;
+            this.eof = DFA54_eof;
+            this.min = DFA54_min;
+            this.max = DFA54_max;
+            this.accept = DFA54_accept;
+            this.special = DFA54_special;
+            this.transition = DFA54_transition;
         }
         public String getDescription() {
-            return "591:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "615:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA52_34 = input.LA(1);
+                        int LA54_26 = input.LA(1);
 
                          
-                        int index52_34 = input.index();
+                        int index54_26 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 66;}
+                        else if ( (true) ) {s = 46;}
 
                          
-                        input.seek(index52_34);
+                        input.seek(index54_26);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA52_3 = input.LA(1);
+                        int LA54_4 = input.LA(1);
 
                          
-                        int index52_3 = input.index();
+                        int index54_4 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (true) ) {s = 11;}
 
                          
-                        input.seek(index52_3);
+                        input.seek(index54_4);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA52_4 = input.LA(1);
+                        int LA54_6 = input.LA(1);
 
                          
-                        int index52_4 = input.index();
+                        int index54_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( ((synpred7()||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL))))) ) {s = 7;}
 
-                        else if ( (true) ) {s = 11;}
+                        else if ( (true) ) {s = 14;}
 
                          
-                        input.seek(index52_4);
+                        input.seek(index54_6);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA52_2 = input.LA(1);
+                        int LA54_34 = input.LA(1);
 
                          
-                        int index52_2 = input.index();
+                        int index54_34 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA52_2==COLON) ) {s = 5;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (LA52_2==LEFT_PAREN) ) {s = 6;}
+                        else if ( (true) ) {s = 66;}
 
-                        else if ( (LA52_2==ID) && (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifi!
 erKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 7;}
-
-                        else if ( (LA52_2==DOT) ) {s = 8;}
-
-                        else if ( (LA52_2==LEFT_SQUARE) ) {s = 9;}
-
                          
-                        input.seek(index52_2);
+                        input.seek(index54_34);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA52_53 = input.LA(1);
+                        int LA54_25 = input.LA(1);
 
                          
-                        int index52_53 = input.index();
+                        int index54_25 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 95;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index52_53);
+                        input.seek(index54_25);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA52_26 = input.LA(1);
+                        int LA54_50 = input.LA(1);
 
                          
-                        int index52_26 = input.index();
+                        int index54_50 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 90;}
 
                          
-                        input.seek(index52_26);
+                        input.seek(index54_50);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA52_31 = input.LA(1);
+                        int LA54_31 = input.LA(1);
 
                          
-                        int index52_31 = input.index();
+                        int index54_31 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
@@ -17598,90 +18146,96 @@
                         else if ( (true) ) {s = 64;}
 
                          
-                        input.seek(index52_31);
+                        input.seek(index54_31);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA52_50 = input.LA(1);
+                        int LA54_32 = input.LA(1);
 
                          
-                        int index52_50 = input.index();
+                        int index54_32 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 90;}
+                        else if ( (true) ) {s = 46;}
 
                          
-                        input.seek(index52_50);
+                        input.seek(index54_32);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA52_25 = input.LA(1);
+                        int LA54_2 = input.LA(1);
 
                          
-                        int index52_25 = input.index();
+                        int index54_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (LA54_2==COLON) ) {s = 5;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (LA54_2==LEFT_PAREN) ) {s = 6;}
 
+                        else if ( (LA54_2==ID) && (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierK!
 ey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||((synpred7()&&validateNotWithBinding())&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 7;}
+
+                        else if ( (LA54_2==DOT) ) {s = 8;}
+
+                        else if ( (LA54_2==LEFT_SQUARE) ) {s = 9;}
+
                          
-                        input.seek(index52_25);
+                        input.seek(index54_2);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA52_32 = input.LA(1);
+                        int LA54_3 = input.LA(1);
 
                          
-                        int index52_32 = input.index();
+                        int index54_3 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index52_32);
+                        input.seek(index54_3);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA52_6 = input.LA(1);
+                        int LA54_63 = input.LA(1);
 
                          
-                        int index52_6 = input.index();
+                        int index54_63 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||synpred7()||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL))))) ) {s = 7;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 14;}
+                        else if ( (true) ) {s = 106;}
 
                          
-                        input.seek(index52_6);
+                        input.seek(index54_63);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 52, _s, input);
+                new NoViableAltException(getDescription(), 54, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA59_eotS =
+    static final String DFA61_eotS =
         "\13\uffff";
-    static final String DFA59_eofS =
+    static final String DFA61_eofS =
         "\13\uffff";
-    static final String DFA59_minS =
+    static final String DFA61_minS =
         "\1\130\1\135\2\4\1\0\1\130\1\0\4\uffff";
-    static final String DFA59_maxS =
+    static final String DFA61_maxS =
         "\1\130\1\135\2\u0080\1\0\1\137\1\0\4\uffff";
-    static final String DFA59_acceptS =
+    static final String DFA61_acceptS =
         "\7\uffff\1\1\2\2\1\1";
-    static final String DFA59_specialS =
-        "\4\uffff\1\0\1\1\1\2\4\uffff}>";
-    static final String[] DFA59_transitionS = {
+    static final String DFA61_specialS =
+        "\4\uffff\1\2\1\0\1\1\4\uffff}>";
+    static final String[] DFA61_transitionS = {
             "\1\1",
             "\1\2",
             "\131\3\1\4\1\3\1\5\41\3",
@@ -17695,113 +18249,113 @@
             ""
     };
 
-    static final short[] DFA59_eot = DFA.unpackEncodedString(DFA59_eotS);
-    static final short[] DFA59_eof = DFA.unpackEncodedString(DFA59_eofS);
-    static final char[] DFA59_min = DFA.unpackEncodedStringToUnsignedChars(DFA59_minS);
-    static final char[] DFA59_max = DFA.unpackEncodedStringToUnsignedChars(DFA59_maxS);
-    static final short[] DFA59_accept = DFA.unpackEncodedString(DFA59_acceptS);
-    static final short[] DFA59_special = DFA.unpackEncodedString(DFA59_specialS);
-    static final short[][] DFA59_transition;
+    static final short[] DFA61_eot = DFA.unpackEncodedString(DFA61_eotS);
+    static final short[] DFA61_eof = DFA.unpackEncodedString(DFA61_eofS);
+    static final char[] DFA61_min = DFA.unpackEncodedStringToUnsignedChars(DFA61_minS);
+    static final char[] DFA61_max = DFA.unpackEncodedStringToUnsignedChars(DFA61_maxS);
+    static final short[] DFA61_accept = DFA.unpackEncodedString(DFA61_acceptS);
+    static final short[] DFA61_special = DFA.unpackEncodedString(DFA61_specialS);
+    static final short[][] DFA61_transition;
 
     static {
-        int numStates = DFA59_transitionS.length;
-        DFA59_transition = new short[numStates][];
+        int numStates = DFA61_transitionS.length;
+        DFA61_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA59_transition[i] = DFA.unpackEncodedString(DFA59_transitionS[i]);
+            DFA61_transition[i] = DFA.unpackEncodedString(DFA61_transitionS[i]);
         }
     }
 
-    class DFA59 extends DFA {
+    class DFA61 extends DFA {
 
-        public DFA59(BaseRecognizer recognizer) {
+        public DFA61(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 59;
-            this.eot = DFA59_eot;
-            this.eof = DFA59_eof;
-            this.min = DFA59_min;
-            this.max = DFA59_max;
-            this.accept = DFA59_accept;
-            this.special = DFA59_special;
-            this.transition = DFA59_transition;
+            this.decisionNumber = 61;
+            this.eot = DFA61_eot;
+            this.eof = DFA61_eof;
+            this.min = DFA61_min;
+            this.max = DFA61_max;
+            this.accept = DFA61_accept;
+            this.special = DFA61_special;
+            this.transition = DFA61_transition;
         }
         public String getDescription() {
-            return "635:3: ( accumulate_init_clause | accumulate_id_clause )";
+            return "659:3: ( accumulate_init_clause | accumulate_id_clause )";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA59_4 = input.LA(1);
+                        int LA61_5 = input.LA(1);
 
                          
-                        int index59_4 = input.index();
+                        int index61_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {s = 7;}
+                        if ( (LA61_5==RIGHT_PAREN) ) {s = 9;}
 
-                        else if ( (true) ) {s = 8;}
+                        else if ( (LA61_5==ID||LA61_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.INIT)))) {s = 10;}
 
                          
-                        input.seek(index59_4);
+                        input.seek(index61_5);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA59_5 = input.LA(1);
+                        int LA61_6 = input.LA(1);
 
                          
-                        int index59_5 = input.index();
+                        int index61_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA59_5==RIGHT_PAREN) ) {s = 9;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {s = 10;}
 
-                        else if ( (LA59_5==ID||LA59_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.INIT)))) {s = 10;}
+                        else if ( (true) ) {s = 9;}
 
                          
-                        input.seek(index59_5);
+                        input.seek(index61_6);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA59_6 = input.LA(1);
+                        int LA61_4 = input.LA(1);
 
                          
-                        int index59_6 = input.index();
+                        int index61_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {s = 10;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {s = 7;}
 
-                        else if ( (true) ) {s = 9;}
+                        else if ( (true) ) {s = 8;}
 
                          
-                        input.seek(index59_6);
+                        input.seek(index61_4);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 59, _s, input);
+                new NoViableAltException(getDescription(), 61, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA63_eotS =
+    static final String DFA65_eotS =
         "\13\uffff";
-    static final String DFA63_eofS =
+    static final String DFA65_eofS =
         "\13\uffff";
-    static final String DFA63_minS =
+    static final String DFA65_minS =
         "\1\130\1\135\2\4\1\0\1\130\1\0\4\uffff";
-    static final String DFA63_maxS =
+    static final String DFA65_maxS =
         "\1\130\1\135\2\u0080\1\0\1\137\1\0\4\uffff";
-    static final String DFA63_acceptS =
-        "\7\uffff\1\1\1\2\1\1\1\2";
-    static final String DFA63_specialS =
-        "\1\5\1\3\1\2\1\4\1\0\1\1\1\6\4\uffff}>";
-    static final String[] DFA63_transitionS = {
+    static final String DFA65_acceptS =
+        "\7\uffff\1\1\2\2\1\1";
+    static final String DFA65_specialS =
+        "\1\5\1\4\1\2\1\6\1\0\1\1\1\3\4\uffff}>";
+    static final String[] DFA65_transitionS = {
             "\1\1",
             "\1\2",
             "\131\3\1\4\1\3\1\5\41\3",
             "\131\3\1\6\1\3\1\5\41\3",
             "\1\uffff",
-            "\1\11\5\uffff\1\11\1\12",
+            "\1\12\5\uffff\1\12\1\11",
             "\1\uffff",
             "",
             "",
@@ -17809,193 +18363,6 @@
             ""
     };
 
-    static final short[] DFA63_eot = DFA.unpackEncodedString(DFA63_eotS);
-    static final short[] DFA63_eof = DFA.unpackEncodedString(DFA63_eofS);
-    static final char[] DFA63_min = DFA.unpackEncodedStringToUnsignedChars(DFA63_minS);
-    static final char[] DFA63_max = DFA.unpackEncodedStringToUnsignedChars(DFA63_maxS);
-    static final short[] DFA63_accept = DFA.unpackEncodedString(DFA63_acceptS);
-    static final short[] DFA63_special = DFA.unpackEncodedString(DFA63_specialS);
-    static final short[][] DFA63_transition;
-
-    static {
-        int numStates = DFA63_transitionS.length;
-        DFA63_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA63_transition[i] = DFA.unpackEncodedString(DFA63_transitionS[i]);
-        }
-    }
-
-    class DFA63 extends DFA {
-
-        public DFA63(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 63;
-            this.eot = DFA63_eot;
-            this.eof = DFA63_eof;
-            this.min = DFA63_min;
-            this.max = DFA63_max;
-            this.accept = DFA63_accept;
-            this.special = DFA63_special;
-            this.transition = DFA63_transition;
-        }
-        public String getDescription() {
-            return "646:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
-        }
-        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA63_4 = input.LA(1);
-
-                         
-                        int index63_4 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 7;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 8;}
-
-                         
-                        input.seek(index63_4);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA63_5 = input.LA(1);
-
-                         
-                        int index63_5 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA63_5==ID||LA63_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.REVERSE)))) {s = 9;}
-
-                        else if ( (LA63_5==RIGHT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.RESULT)))) {s = 10;}
-
-                         
-                        input.seek(index63_5);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA63_2 = input.LA(1);
-
-                         
-                        int index63_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((LA63_2>=VT_COMPILATION_UNIT && LA63_2<=STRING)||LA63_2==COMMA||(LA63_2>=AT && LA63_2<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 3;}
-
-                        else if ( (LA63_2==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 4;}
-
-                        else if ( (LA63_2==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 5;}
-
-                         
-                        input.seek(index63_2);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA63_1 = input.LA(1);
-
-                         
-                        int index63_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA63_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 2;}
-
-                         
-                        input.seek(index63_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA63_3 = input.LA(1);
-
-                         
-                        int index63_3 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA63_3==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 5;}
-
-                        else if ( ((LA63_3>=VT_COMPILATION_UNIT && LA63_3<=STRING)||LA63_3==COMMA||(LA63_3>=AT && LA63_3<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 3;}
-
-                        else if ( (LA63_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 6;}
-
-                         
-                        input.seek(index63_3);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
-                        int LA63_0 = input.LA(1);
-
-                         
-                        int index63_0 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA63_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 1;}
-
-                         
-                        input.seek(index63_0);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 6 : 
-                        int LA63_6 = input.LA(1);
-
-                         
-                        int index63_6 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 9;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 10;}
-
-                         
-                        input.seek(index63_6);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (backtracking>0) {failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 63, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA65_eotS =
-        "\25\uffff";
-    static final String DFA65_eofS =
-        "\25\uffff";
-    static final String DFA65_minS =
-        "\1\127\1\4\1\uffff\1\4\1\0\2\uffff\1\4\2\0\3\4\1\0\1\4\1\uffff\1"+
-        "\4\4\0";
-    static final String DFA65_maxS =
-        "\1\164\1\u0080\1\uffff\1\u0080\1\0\2\uffff\1\u0080\2\0\3\u0080\1"+
-        "\0\1\u0080\1\uffff\1\u0080\4\0";
-    static final String DFA65_acceptS =
-        "\2\uffff\1\2\2\uffff\2\1\10\uffff\1\1\5\uffff";
-    static final String DFA65_specialS =
-        "\1\uffff\1\5\1\uffff\1\12\1\1\2\uffff\1\10\1\11\1\2\1\13\1\3\1\6"+
-        "\1\0\1\7\1\uffff\1\4\4\uffff}>";
-    static final String[] DFA65_transitionS = {
-            "\3\2\1\uffff\1\2\1\uffff\1\1\2\2\5\uffff\2\2\15\uffff\1\2",
-            "\124\5\1\3\4\5\1\4\1\5\1\6\41\5",
-            "",
-            "\124\5\1\11\1\12\3\5\1\10\1\5\1\6\1\5\1\7\20\5\1\13\16\5",
-            "\1\uffff",
-            "",
-            "",
-            "\124\5\1\14\4\5\1\15\1\5\1\6\41\5",
-            "\1\uffff",
-            "\1\uffff",
-            "\124\5\1\16\4\5\1\17\1\5\1\6\41\5",
-            "\131\5\1\17\1\5\1\6\23\5\1\20\15\5",
-            "\125\5\1\21\3\5\1\22\1\5\1\6\22\5\1\23\16\5",
-            "\1\uffff",
-            "\125\5\1\12\3\5\1\24\1\5\1\6\22\5\1\13\16\5",
-            "",
-            "\131\5\1\24\1\5\1\6\22\5\1\13\16\5",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff"
-    };
-
     static final short[] DFA65_eot = DFA.unpackEncodedString(DFA65_eotS);
     static final short[] DFA65_eof = DFA.unpackEncodedString(DFA65_eofS);
     static final char[] DFA65_min = DFA.unpackEncodedStringToUnsignedChars(DFA65_minS);
@@ -18026,233 +18393,116 @@
             this.transition = DFA65_transition;
         }
         public String getDescription() {
-            return "674:3: ( ( LEFT_PAREN )=>args= paren_chunk )?";
+            return "670:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA65_13 = input.LA(1);
+                        int LA65_4 = input.LA(1);
 
                          
-                        int index65_13 = input.index();
+                        int index65_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred8()) ) {s = 15;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 7;}
 
-                        else if ( (true) ) {s = 2;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 8;}
 
                          
-                        input.seek(index65_13);
+                        input.seek(index65_4);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA65_4 = input.LA(1);
+                        int LA65_5 = input.LA(1);
 
                          
-                        int index65_4 = input.index();
+                        int index65_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred8()) ) {s = 6;}
+                        if ( (LA65_5==RIGHT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.RESULT)))) {s = 9;}
 
-                        else if ( (true) ) {s = 2;}
+                        else if ( (LA65_5==ID||LA65_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.REVERSE)))) {s = 10;}
 
                          
-                        input.seek(index65_4);
+                        input.seek(index65_5);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA65_9 = input.LA(1);
+                        int LA65_2 = input.LA(1);
 
                          
-                        int index65_9 = input.index();
+                        int index65_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred8()) ) {s = 6;}
+                        if ( ((LA65_2>=VT_COMPILATION_UNIT && LA65_2<=STRING)||LA65_2==COMMA||(LA65_2>=AT && LA65_2<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 3;}
 
-                        else if ( (true) ) {s = 2;}
+                        else if ( (LA65_2==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 4;}
 
+                        else if ( (LA65_2==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 5;}
+
                          
-                        input.seek(index65_9);
+                        input.seek(index65_2);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA65_11 = input.LA(1);
+                        int LA65_6 = input.LA(1);
 
                          
-                        int index65_11 = input.index();
+                        int index65_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA65_11==RIGHT_SQUARE) ) {s = 16;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 10;}
 
-                        else if ( (LA65_11==RIGHT_PAREN) && (synpred8())) {s = 6;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 9;}
 
-                        else if ( ((LA65_11>=VT_COMPILATION_UNIT && LA65_11<=STRING)||LA65_11==COMMA||(LA65_11>=AT && LA65_11<=LEFT_SQUARE)||(LA65_11>=THEN && LA65_11<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                        else if ( (LA65_11==LEFT_PAREN) && (synpred8())) {s = 15;}
-
                          
-                        input.seek(index65_11);
+                        input.seek(index65_6);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA65_16 = input.LA(1);
-
-                         
-                        int index65_16 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA65_16==LEFT_PAREN) ) {s = 20;}
-
-                        else if ( (LA65_16==LEFT_SQUARE) ) {s = 11;}
-
-                        else if ( (LA65_16==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA65_16>=VT_COMPILATION_UNIT && LA65_16<=STRING)||LA65_16==COMMA||(LA65_16>=AT && LA65_16<=NULL)||(LA65_16>=RIGHT_SQUARE && LA65_16<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                         
-                        input.seek(index65_16);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
                         int LA65_1 = input.LA(1);
 
                          
                         int index65_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA65_1==ID) ) {s = 3;}
+                        if ( (LA65_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 2;}
 
-                        else if ( (LA65_1==LEFT_PAREN) ) {s = 4;}
-
-                        else if ( ((LA65_1>=VT_COMPILATION_UNIT && LA65_1<=SEMICOLON)||(LA65_1>=DOT && LA65_1<=STRING)||LA65_1==COMMA||(LA65_1>=AT && LA65_1<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                        else if ( (LA65_1==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
                          
                         input.seek(index65_1);
                         if ( s>=0 ) return s;
                         break;
-                    case 6 : 
-                        int LA65_12 = input.LA(1);
+                    case 5 : 
+                        int LA65_0 = input.LA(1);
 
                          
-                        int index65_12 = input.index();
+                        int index65_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA65_12==RIGHT_PAREN) && (synpred8())) {s = 6;}
+                        if ( (LA65_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 1;}
 
-                        else if ( (LA65_12==DOT) ) {s = 17;}
-
-                        else if ( (LA65_12==LEFT_PAREN) ) {s = 18;}
-
-                        else if ( (LA65_12==LEFT_SQUARE) ) {s = 19;}
-
-                        else if ( ((LA65_12>=VT_COMPILATION_UNIT && LA65_12<=ID)||(LA65_12>=DOT_STAR && LA65_12<=STRING)||LA65_12==COMMA||(LA65_12>=AT && LA65_12<=NULL)||(LA65_12>=RIGHT_SQUARE && LA65_12<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
                          
-                        input.seek(index65_12);
+                        input.seek(index65_0);
                         if ( s>=0 ) return s;
                         break;
-                    case 7 : 
-                        int LA65_14 = input.LA(1);
-
-                         
-                        int index65_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA65_14==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( (LA65_14==LEFT_SQUARE) ) {s = 11;}
-
-                        else if ( (LA65_14==LEFT_PAREN) ) {s = 20;}
-
-                        else if ( (LA65_14==DOT) ) {s = 10;}
-
-                        else if ( ((LA65_14>=VT_COMPILATION_UNIT && LA65_14<=ID)||(LA65_14>=DOT_STAR && LA65_14<=STRING)||LA65_14==COMMA||(LA65_14>=AT && LA65_14<=NULL)||(LA65_14>=RIGHT_SQUARE && LA65_14<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                         
-                        input.seek(index65_14);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 8 : 
-                        int LA65_7 = input.LA(1);
-
-                         
-                        int index65_7 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA65_7==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( (LA65_7==ID) ) {s = 12;}
-
-                        else if ( (LA65_7==LEFT_PAREN) ) {s = 13;}
-
-                        else if ( ((LA65_7>=VT_COMPILATION_UNIT && LA65_7<=SEMICOLON)||(LA65_7>=DOT && LA65_7<=STRING)||LA65_7==COMMA||(LA65_7>=AT && LA65_7<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                         
-                        input.seek(index65_7);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 9 : 
-                        int LA65_8 = input.LA(1);
-
-                         
-                        int index65_8 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 6;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index65_8);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 10 : 
+                    case 6 : 
                         int LA65_3 = input.LA(1);
 
                          
                         int index65_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA65_3==COLON) ) {s = 7;}
+                        if ( (LA65_3==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 5;}
 
-                        else if ( (LA65_3==LEFT_PAREN) ) {s = 8;}
+                        else if ( ((LA65_3>=VT_COMPILATION_UNIT && LA65_3<=STRING)||LA65_3==COMMA||(LA65_3>=AT && LA65_3<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 3;}
 
-                        else if ( (LA65_3==ID) ) {s = 9;}
+                        else if ( (LA65_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 6;}
 
-                        else if ( (LA65_3==DOT) ) {s = 10;}
-
-                        else if ( (LA65_3==LEFT_SQUARE) ) {s = 11;}
-
-                        else if ( (LA65_3==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA65_3>=VT_COMPILATION_UNIT && LA65_3<=SEMICOLON)||(LA65_3>=DOT_STAR && LA65_3<=STRING)||LA65_3==COMMA||LA65_3==AT||(LA65_3>=EQUALS && LA65_3<=NULL)||(LA65_3>=RIGHT_SQUARE && LA65_3<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
                          
                         input.seek(index65_3);
                         if ( s>=0 ) return s;
                         break;
-                    case 11 : 
-                        int LA65_10 = input.LA(1);
-
-                         
-                        int index65_10 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA65_10==ID) ) {s = 14;}
-
-                        else if ( (LA65_10==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA65_10>=VT_COMPILATION_UNIT && LA65_10<=SEMICOLON)||(LA65_10>=DOT && LA65_10<=STRING)||LA65_10==COMMA||(LA65_10>=AT && LA65_10<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
-
-                        else if ( (LA65_10==LEFT_PAREN) && (synpred8())) {s = 15;}
-
-                         
-                        input.seek(index65_10);
-                        if ( s>=0 ) return s;
-                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
@@ -18261,39 +18511,38 @@
             throw nvae;
         }
     }
-    static final String DFA80_eotS =
+    static final String DFA82_eotS =
         "\30\uffff";
-    static final String DFA80_eofS =
+    static final String DFA82_eofS =
         "\30\uffff";
-    static final String DFA80_minS =
-        "\1\136\1\uffff\2\130\1\0\1\uffff\1\130\1\0\1\130\2\0\1\4\1\162\2"+
-        "\4\11\0";
-    static final String DFA80_maxS =
-        "\1\146\1\uffff\1\157\1\162\1\0\1\uffff\1\162\1\0\1\130\2\0\1\u0080"+
-        "\1\162\2\u0080\11\0";
-    static final String DFA80_acceptS =
-        "\1\uffff\1\2\3\uffff\1\1\22\uffff";
-    static final String DFA80_specialS =
-        "\2\uffff\1\3\1\6\1\5\1\uffff\1\0\1\1\1\uffff\1\2\1\4\15\uffff}>";
-    static final String[] DFA80_transitionS = {
+    static final String DFA82_minS =
+        "\1\136\1\uffff\2\130\1\uffff\2\0\2\130\2\0\1\4\1\162\2\4\11\0";
+    static final String DFA82_maxS =
+        "\1\146\1\uffff\1\157\1\162\1\uffff\2\0\1\162\1\130\2\0\1\u0080\1"+
+        "\162\2\u0080\11\0";
+    static final String DFA82_acceptS =
+        "\1\uffff\1\2\2\uffff\1\1\23\uffff";
+    static final String DFA82_specialS =
+        "\2\uffff\1\5\1\6\1\uffff\1\3\1\4\1\0\1\uffff\1\1\1\2\15\uffff}>";
+    static final String[] DFA82_transitionS = {
             "\2\1\5\uffff\1\2\1\1",
             "",
-            "\1\3\4\uffff\1\4\13\uffff\7\5",
-            "\1\6\1\1\2\uffff\1\5\1\7\3\uffff\1\1\1\uffff\2\5\4\uffff\6\1"+
-            "\1\10\2\5\1\1",
-            "\1\uffff",
+            "\1\3\4\uffff\1\5\13\uffff\7\4",
+            "\1\7\1\1\2\uffff\1\4\1\6\3\uffff\1\1\1\uffff\2\4\4\uffff\6\1"+
+            "\1\10\2\4\1\1",
             "",
-            "\1\11\1\5\2\uffff\1\12\1\13\2\5\3\uffff\2\12\2\5\10\uffff\1"+
-            "\1\2\12\1\5",
             "\1\uffff",
+            "\1\uffff",
+            "\1\11\1\4\2\uffff\1\12\1\13\2\4\3\uffff\2\12\2\4\10\uffff\1"+
+            "\1\2\12\1\4",
             "\1\14",
             "\1\uffff",
             "\1\uffff",
             "\124\20\1\15\3\20\1\16\1\17\1\20\1\21\3\20\2\16\13\20\2\16\17"+
             "\20",
             "\1\22",
-            "\125\20\1\24\3\20\1\27\1\25\1\26\22\20\1\23\16\20",
-            "\131\20\1\27\1\25\1\26\41\20",
+            "\125\20\1\26\3\20\1\25\1\27\1\23\22\20\1\24\16\20",
+            "\131\20\1\25\1\27\1\23\41\20",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18305,209 +18554,213 @@
             "\1\uffff"
     };
 
-    static final short[] DFA80_eot = DFA.unpackEncodedString(DFA80_eotS);
-    static final short[] DFA80_eof = DFA.unpackEncodedString(DFA80_eofS);
-    static final char[] DFA80_min = DFA.unpackEncodedStringToUnsignedChars(DFA80_minS);
-    static final char[] DFA80_max = DFA.unpackEncodedStringToUnsignedChars(DFA80_maxS);
-    static final short[] DFA80_accept = DFA.unpackEncodedString(DFA80_acceptS);
-    static final short[] DFA80_special = DFA.unpackEncodedString(DFA80_specialS);
-    static final short[][] DFA80_transition;
+    static final short[] DFA82_eot = DFA.unpackEncodedString(DFA82_eotS);
+    static final short[] DFA82_eof = DFA.unpackEncodedString(DFA82_eofS);
+    static final char[] DFA82_min = DFA.unpackEncodedStringToUnsignedChars(DFA82_minS);
+    static final char[] DFA82_max = DFA.unpackEncodedStringToUnsignedChars(DFA82_maxS);
+    static final short[] DFA82_accept = DFA.unpackEncodedString(DFA82_acceptS);
+    static final short[] DFA82_special = DFA.unpackEncodedString(DFA82_specialS);
+    static final short[][] DFA82_transition;
 
     static {
-        int numStates = DFA80_transitionS.length;
-        DFA80_transition = new short[numStates][];
+        int numStates = DFA82_transitionS.length;
+        DFA82_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA80_transition[i] = DFA.unpackEncodedString(DFA80_transitionS[i]);
+            DFA82_transition[i] = DFA.unpackEncodedString(DFA82_transitionS[i]);
         }
     }
 
-    class DFA80 extends DFA {
+    class DFA82 extends DFA {
 
-        public DFA80(BaseRecognizer recognizer) {
+        public DFA82(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 80;
-            this.eot = DFA80_eot;
-            this.eof = DFA80_eof;
-            this.min = DFA80_min;
-            this.max = DFA80_max;
-            this.accept = DFA80_accept;
-            this.special = DFA80_special;
-            this.transition = DFA80_transition;
+            this.decisionNumber = 82;
+            this.eot = DFA82_eot;
+            this.eof = DFA82_eof;
+            this.min = DFA82_min;
+            this.max = DFA82_max;
+            this.accept = DFA82_accept;
+            this.special = DFA82_special;
+            this.transition = DFA82_transition;
         }
         public String getDescription() {
-            return "()* loopback of 755:25: ({...}? => DOUBLE_PIPE and_restr_connective )*";
+            return "()* loopback of 779:25: ({...}? => DOUBLE_PIPE and_restr_connective )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA80_6 = input.LA(1);
+                        int LA82_7 = input.LA(1);
 
                          
-                        int index80_6 = input.index();
+                        int index82_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA80_6==ID) ) {s = 9;}
+                        if ( (LA82_7==ID) ) {s = 9;}
 
-                        else if ( (LA80_6==STRING||(LA80_6>=BOOL && LA80_6<=INT)||(LA80_6>=FLOAT && LA80_6<=NULL)) ) {s = 10;}
+                        else if ( (LA82_7==STRING||(LA82_7>=BOOL && LA82_7<=INT)||(LA82_7>=FLOAT && LA82_7<=NULL)) ) {s = 10;}
 
-                        else if ( (LA80_6==LEFT_PAREN) ) {s = 11;}
+                        else if ( (LA82_7==LEFT_PAREN) ) {s = 11;}
 
-                        else if ( (LA80_6==GRAVE_ACCENT) ) {s = 1;}
+                        else if ( (LA82_7==GRAVE_ACCENT) ) {s = 1;}
 
-                        else if ( (LA80_6==DOT||(LA80_6>=COMMA && LA80_6<=RIGHT_PAREN)||(LA80_6>=DOUBLE_PIPE && LA80_6<=DOUBLE_AMPER)||LA80_6==LEFT_SQUARE) && ((validateRestr()))) {s = 5;}
+                        else if ( (LA82_7==DOT||(LA82_7>=COMMA && LA82_7<=RIGHT_PAREN)||(LA82_7>=DOUBLE_PIPE && LA82_7<=DOUBLE_AMPER)||LA82_7==LEFT_SQUARE) && ((validateRestr()))) {s = 4;}
 
                          
-                        input.seek(index80_6);
+                        input.seek(index82_7);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA80_7 = input.LA(1);
+                        int LA82_9 = input.LA(1);
 
                          
-                        int index80_7 = input.index();
+                        int index82_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index80_7);
+                        input.seek(index82_9);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA80_9 = input.LA(1);
+                        int LA82_10 = input.LA(1);
 
                          
-                        int index80_9 = input.index();
+                        int index82_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index80_9);
+                        input.seek(index82_10);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA80_2 = input.LA(1);
+                        int LA82_5 = input.LA(1);
 
                          
-                        int index80_2 = input.index();
+                        int index82_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA80_2==ID) ) {s = 3;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
-                        else if ( (LA80_2==LEFT_PAREN) ) {s = 4;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( ((LA80_2>=EQUAL && LA80_2<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 5;}
-
                          
-                        input.seek(index80_2);
+                        input.seek(index82_5);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA80_10 = input.LA(1);
+                        int LA82_6 = input.LA(1);
 
                          
-                        int index80_10 = input.index();
+                        int index82_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index80_10);
+                        input.seek(index82_6);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA80_4 = input.LA(1);
+                        int LA82_2 = input.LA(1);
 
                          
-                        int index80_4 = input.index();
+                        int index82_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateRestr())) ) {s = 5;}
+                        if ( (LA82_2==ID) ) {s = 3;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( ((LA82_2>=EQUAL && LA82_2<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 4;}
 
+                        else if ( (LA82_2==LEFT_PAREN) ) {s = 5;}
+
                          
-                        input.seek(index80_4);
+                        input.seek(index82_2);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA80_3 = input.LA(1);
+                        int LA82_3 = input.LA(1);
 
                          
-                        int index80_3 = input.index();
+                        int index82_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA80_3==DOT||LA80_3==COLON||(LA80_3>=EQUAL && LA80_3<=NOT_EQUAL)||LA80_3==LEFT_SQUARE) ) {s = 1;}
+                        if ( (LA82_3==DOT||LA82_3==COLON||(LA82_3>=EQUAL && LA82_3<=NOT_EQUAL)||LA82_3==LEFT_SQUARE) ) {s = 1;}
 
-                        else if ( (LA80_3==ID) ) {s = 6;}
+                        else if ( (LA82_3==LEFT_PAREN) ) {s = 6;}
 
-                        else if ( (LA80_3==STRING||(LA80_3>=BOOL && LA80_3<=INT)||(LA80_3>=FLOAT && LA80_3<=NULL)) && ((validateRestr()))) {s = 5;}
+                        else if ( (LA82_3==ID) ) {s = 7;}
 
-                        else if ( (LA80_3==LEFT_PAREN) ) {s = 7;}
+                        else if ( (LA82_3==STRING||(LA82_3>=BOOL && LA82_3<=INT)||(LA82_3>=FLOAT && LA82_3<=NULL)) && ((validateRestr()))) {s = 4;}
 
-                        else if ( (LA80_3==GRAVE_ACCENT) ) {s = 8;}
+                        else if ( (LA82_3==GRAVE_ACCENT) ) {s = 8;}
 
                          
-                        input.seek(index80_3);
+                        input.seek(index82_3);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 80, _s, input);
+                new NoViableAltException(getDescription(), 82, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA81_eotS =
-        "\50\uffff";
-    static final String DFA81_eofS =
-        "\50\uffff";
-    static final String DFA81_minS =
-        "\1\136\1\uffff\2\130\1\uffff\1\130\1\4\3\130\1\0\1\4\2\0\2\4\30"+
-        "\0";
-    static final String DFA81_maxS =
-        "\1\146\1\uffff\1\157\1\162\1\uffff\1\157\1\u0080\1\162\1\130\1\162"+
-        "\1\0\1\u0080\2\0\2\u0080\30\0";
-    static final String DFA81_acceptS =
-        "\1\uffff\1\2\2\uffff\1\1\43\uffff";
-    static final String DFA81_specialS =
-        "\2\uffff\1\1\1\3\1\uffff\1\7\1\uffff\1\5\1\uffff\1\2\1\4\1\uffff"+
-        "\1\6\1\0\32\uffff}>";
-    static final String[] DFA81_transitionS = {
+    static final String DFA83_eotS =
+        "\57\uffff";
+    static final String DFA83_eofS =
+        "\57\uffff";
+    static final String DFA83_minS =
+        "\1\136\1\uffff\2\130\1\uffff\3\130\1\4\1\130\1\0\1\4\2\0\1\162\1"+
+        "\4\2\0\3\4\32\0";
+    static final String DFA83_maxS =
+        "\1\146\1\uffff\1\157\1\162\1\uffff\1\157\1\162\1\130\1\u0080\1\162"+
+        "\1\0\1\u0080\2\0\1\162\1\u0080\2\0\3\u0080\32\0";
+    static final String DFA83_acceptS =
+        "\1\uffff\1\2\2\uffff\1\1\52\uffff";
+    static final String DFA83_specialS =
+        "\2\uffff\1\2\1\4\1\uffff\1\6\1\7\2\uffff\1\3\1\5\1\uffff\1\0\1\1"+
+        "\2\uffff\1\10\1\11\35\uffff}>";
+    static final String[] DFA83_transitionS = {
             "\2\1\5\uffff\1\1\1\2",
             "",
             "\1\3\4\uffff\1\5\13\uffff\7\4",
-            "\1\7\1\1\2\uffff\1\4\1\6\3\uffff\1\1\1\uffff\2\4\4\uffff\6\1"+
-            "\1\10\2\4\1\1",
+            "\1\6\1\1\2\uffff\1\4\1\10\3\uffff\1\1\1\uffff\2\4\4\uffff\6"+
+            "\1\1\7\2\4\1\1",
             "",
             "\1\11\4\uffff\1\12\13\uffff\7\4",
-            "\124\26\1\13\3\26\1\25\1\14\1\26\1\15\3\26\2\25\4\26\1\16\1"+
-            "\17\1\20\1\21\1\22\1\23\1\24\2\25\17\26",
-            "\1\27\1\4\2\uffff\1\30\1\31\2\4\3\uffff\2\30\2\4\10\uffff\1"+
-            "\1\2\30\1\4",
-            "\1\32",
-            "\1\34\1\1\2\uffff\1\4\1\33\3\uffff\1\1\1\uffff\2\4\4\uffff\6"+
-            "\1\1\35\2\4\1\1",
+            "\1\14\1\4\2\uffff\1\15\1\13\2\4\3\uffff\2\15\2\4\10\uffff\1"+
+            "\1\2\15\1\4",
+            "\1\16",
+            "\124\32\1\17\3\32\1\22\1\20\1\32\1\21\3\32\2\22\4\32\1\23\1"+
+            "\24\1\25\1\26\1\27\1\30\1\31\2\22\17\32",
+            "\1\33\1\1\2\uffff\1\4\1\35\3\uffff\1\1\1\uffff\2\4\4\uffff\6"+
+            "\1\1\34\2\4\1\1",
             "\1\uffff",
-            "\124\26\1\36\1\43\2\26\1\37\1\40\1\44\1\45\3\26\2\37\12\26\1"+
-            "\41\2\37\1\42\16\26",
+            "\124\42\1\36\3\42\1\41\1\37\1\42\1\40\3\42\2\41\13\42\2\41\17"+
+            "\42",
             "\1\uffff",
             "\1\uffff",
-            "\124\26\1\46\3\26\1\37\1\47\1\26\1\15\3\26\2\37\13\26\2\37\17"+
-            "\26",
-            "\124\26\1\46\3\26\1\37\1\47\1\26\1\15\3\26\2\37\13\26\2\37\17"+
-            "\26",
+            "\1\43",
+            "\124\32\1\50\1\45\2\32\1\52\1\51\1\46\1\47\3\32\2\52\12\32\1"+
+            "\53\2\52\1\44\16\32",
             "\1\uffff",
             "\1\uffff",
+            "\131\32\1\54\1\46\1\47\41\32",
+            "\124\32\1\55\3\32\1\52\1\56\1\32\1\21\3\32\2\52\13\32\2\52\17"+
+            "\32",
+            "\124\32\1\55\3\32\1\52\1\56\1\32\1\21\3\32\2\52\13\32\2\52\17"+
+            "\32",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18529,49 +18782,53 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             "\1\uffff"
     };
 
-    static final short[] DFA81_eot = DFA.unpackEncodedString(DFA81_eotS);
-    static final short[] DFA81_eof = DFA.unpackEncodedString(DFA81_eofS);
-    static final char[] DFA81_min = DFA.unpackEncodedStringToUnsignedChars(DFA81_minS);
-    static final char[] DFA81_max = DFA.unpackEncodedStringToUnsignedChars(DFA81_maxS);
-    static final short[] DFA81_accept = DFA.unpackEncodedString(DFA81_acceptS);
-    static final short[] DFA81_special = DFA.unpackEncodedString(DFA81_specialS);
-    static final short[][] DFA81_transition;
+    static final short[] DFA83_eot = DFA.unpackEncodedString(DFA83_eotS);
+    static final short[] DFA83_eof = DFA.unpackEncodedString(DFA83_eofS);
+    static final char[] DFA83_min = DFA.unpackEncodedStringToUnsignedChars(DFA83_minS);
+    static final char[] DFA83_max = DFA.unpackEncodedStringToUnsignedChars(DFA83_maxS);
+    static final short[] DFA83_accept = DFA.unpackEncodedString(DFA83_acceptS);
+    static final short[] DFA83_special = DFA.unpackEncodedString(DFA83_specialS);
+    static final short[][] DFA83_transition;
 
     static {
-        int numStates = DFA81_transitionS.length;
-        DFA81_transition = new short[numStates][];
+        int numStates = DFA83_transitionS.length;
+        DFA83_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA81_transition[i] = DFA.unpackEncodedString(DFA81_transitionS[i]);
+            DFA83_transition[i] = DFA.unpackEncodedString(DFA83_transitionS[i]);
         }
     }
 
-    class DFA81 extends DFA {
+    class DFA83 extends DFA {
 
-        public DFA81(BaseRecognizer recognizer) {
+        public DFA83(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 81;
-            this.eot = DFA81_eot;
-            this.eof = DFA81_eof;
-            this.min = DFA81_min;
-            this.max = DFA81_max;
-            this.accept = DFA81_accept;
-            this.special = DFA81_special;
-            this.transition = DFA81_transition;
+            this.decisionNumber = 83;
+            this.eot = DFA83_eot;
+            this.eof = DFA83_eof;
+            this.min = DFA83_min;
+            this.max = DFA83_max;
+            this.accept = DFA83_accept;
+            this.special = DFA83_special;
+            this.transition = DFA83_transition;
         }
         public String getDescription() {
-            return "()* loopback of 759:26: ({...}? => DOUBLE_AMPER constraint_expression )*";
+            return "()* loopback of 783:26: ({...}? => DOUBLE_AMPER constraint_expression )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA81_13 = input.LA(1);
+                        int LA83_12 = input.LA(1);
 
                          
-                        int index81_13 = input.index();
+                        int index83_12 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateRestr())) ) {s = 4;}
@@ -18579,109 +18836,141 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index81_13);
+                        input.seek(index83_12);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA81_2 = input.LA(1);
+                        int LA83_13 = input.LA(1);
 
                          
-                        int index81_2 = input.index();
+                        int index83_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA81_2==ID) ) {s = 3;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
-                        else if ( ((LA81_2>=EQUAL && LA81_2<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 4;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( (LA81_2==LEFT_PAREN) ) {s = 5;}
-
                          
-                        input.seek(index81_2);
+                        input.seek(index83_13);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA81_9 = input.LA(1);
+                        int LA83_2 = input.LA(1);
 
                          
-                        int index81_9 = input.index();
+                        int index83_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA81_9==DOT||LA81_9==COLON||(LA81_9>=EQUAL && LA81_9<=NOT_EQUAL)||LA81_9==LEFT_SQUARE) ) {s = 1;}
+                        if ( (LA83_2==ID) ) {s = 3;}
 
-                        else if ( (LA81_9==LEFT_PAREN) ) {s = 27;}
+                        else if ( ((LA83_2>=EQUAL && LA83_2<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 4;}
 
-                        else if ( (LA81_9==ID) ) {s = 28;}
+                        else if ( (LA83_2==LEFT_PAREN) ) {s = 5;}
 
-                        else if ( (LA81_9==STRING||(LA81_9>=BOOL && LA81_9<=INT)||(LA81_9>=FLOAT && LA81_9<=NULL)) && ((validateRestr()))) {s = 4;}
-
-                        else if ( (LA81_9==GRAVE_ACCENT) ) {s = 29;}
-
                          
-                        input.seek(index81_9);
+                        input.seek(index83_2);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA81_3 = input.LA(1);
+                        int LA83_9 = input.LA(1);
 
                          
-                        int index81_3 = input.index();
+                        int index83_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA81_3==DOT||LA81_3==COLON||(LA81_3>=EQUAL && LA81_3<=NOT_EQUAL)||LA81_3==LEFT_SQUARE) ) {s = 1;}
+                        if ( (LA83_9==DOT||LA83_9==COLON||(LA83_9>=EQUAL && LA83_9<=NOT_EQUAL)||LA83_9==LEFT_SQUARE) ) {s = 1;}
 
-                        else if ( (LA81_3==LEFT_PAREN) ) {s = 6;}
+                        else if ( (LA83_9==ID) ) {s = 27;}
 
-                        else if ( (LA81_3==ID) ) {s = 7;}
+                        else if ( (LA83_9==GRAVE_ACCENT) ) {s = 28;}
 
-                        else if ( (LA81_3==GRAVE_ACCENT) ) {s = 8;}
+                        else if ( (LA83_9==LEFT_PAREN) ) {s = 29;}
 
-                        else if ( (LA81_3==STRING||(LA81_3>=BOOL && LA81_3<=INT)||(LA81_3>=FLOAT && LA81_3<=NULL)) && ((validateRestr()))) {s = 4;}
+                        else if ( (LA83_9==STRING||(LA83_9>=BOOL && LA83_9<=INT)||(LA83_9>=FLOAT && LA83_9<=NULL)) && ((validateRestr()))) {s = 4;}
 
                          
-                        input.seek(index81_3);
+                        input.seek(index83_9);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA81_10 = input.LA(1);
+                        int LA83_3 = input.LA(1);
 
                          
-                        int index81_10 = input.index();
+                        int index83_3 = input.index();
                         input.rewind();
                         s = -1;
+                        if ( (LA83_3==DOT||LA83_3==COLON||(LA83_3>=EQUAL && LA83_3<=NOT_EQUAL)||LA83_3==LEFT_SQUARE) ) {s = 1;}
+
+                        else if ( (LA83_3==ID) ) {s = 6;}
+
+                        else if ( (LA83_3==GRAVE_ACCENT) ) {s = 7;}
+
+                        else if ( (LA83_3==LEFT_PAREN) ) {s = 8;}
+
+                        else if ( (LA83_3==STRING||(LA83_3>=BOOL && LA83_3<=INT)||(LA83_3>=FLOAT && LA83_3<=NULL)) && ((validateRestr()))) {s = 4;}
+
+                         
+                        input.seek(index83_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA83_10 = input.LA(1);
+
+                         
+                        int index83_10 = input.index();
+                        input.rewind();
+                        s = -1;
                         if ( ((validateRestr())) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index81_10);
+                        input.seek(index83_10);
                         if ( s>=0 ) return s;
                         break;
-                    case 5 : 
-                        int LA81_7 = input.LA(1);
+                    case 6 : 
+                        int LA83_5 = input.LA(1);
 
                          
-                        int index81_7 = input.index();
+                        int index83_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA81_7==ID) ) {s = 23;}
+                        if ( (LA83_5==ID) ) {s = 9;}
 
-                        else if ( (LA81_7==STRING||(LA81_7>=BOOL && LA81_7<=INT)||(LA81_7>=FLOAT && LA81_7<=NULL)) ) {s = 24;}
+                        else if ( (LA83_5==LEFT_PAREN) ) {s = 10;}
 
-                        else if ( (LA81_7==LEFT_PAREN) ) {s = 25;}
+                        else if ( ((LA83_5>=EQUAL && LA83_5<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 4;}
 
-                        else if ( (LA81_7==DOT||(LA81_7>=COMMA && LA81_7<=RIGHT_PAREN)||(LA81_7>=DOUBLE_PIPE && LA81_7<=DOUBLE_AMPER)||LA81_7==LEFT_SQUARE) && ((validateRestr()))) {s = 4;}
+                         
+                        input.seek(index83_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA83_6 = input.LA(1);
 
-                        else if ( (LA81_7==GRAVE_ACCENT) ) {s = 1;}
+                         
+                        int index83_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA83_6==LEFT_PAREN) ) {s = 11;}
 
+                        else if ( (LA83_6==ID) ) {s = 12;}
+
+                        else if ( (LA83_6==STRING||(LA83_6>=BOOL && LA83_6<=INT)||(LA83_6>=FLOAT && LA83_6<=NULL)) ) {s = 13;}
+
+                        else if ( (LA83_6==GRAVE_ACCENT) ) {s = 1;}
+
+                        else if ( (LA83_6==DOT||(LA83_6>=COMMA && LA83_6<=RIGHT_PAREN)||(LA83_6>=DOUBLE_PIPE && LA83_6<=DOUBLE_AMPER)||LA83_6==LEFT_SQUARE) && ((validateRestr()))) {s = 4;}
+
                          
-                        input.seek(index81_7);
+                        input.seek(index83_6);
                         if ( s>=0 ) return s;
                         break;
-                    case 6 : 
-                        int LA81_12 = input.LA(1);
+                    case 8 : 
+                        int LA83_16 = input.LA(1);
 
                          
-                        int index81_12 = input.index();
+                        int index83_16 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateRestr())) ) {s = 4;}
@@ -18689,30 +18978,28 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index81_12);
+                        input.seek(index83_16);
                         if ( s>=0 ) return s;
                         break;
-                    case 7 : 
-                        int LA81_5 = input.LA(1);
+                    case 9 : 
+                        int LA83_17 = input.LA(1);
 
                          
-                        int index81_5 = input.index();
+                        int index83_17 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA81_5==ID) ) {s = 9;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
-                        else if ( ((LA81_5>=EQUAL && LA81_5<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 4;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( (LA81_5==LEFT_PAREN) ) {s = 10;}
-
                          
-                        input.seek(index81_5);
+                        input.seek(index83_17);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 81, _s, input);
+                new NoViableAltException(getDescription(), 83, _s, input);
             error(nvae);
             throw nvae;
         }
@@ -18809,351 +19096,357 @@
     public static final BitSet FOLLOW_rule_attributes_in_rule1359 = new BitSet(new long[]{0x0000000000000000L,0x0010000001000000L});
     public static final BitSet FOLLOW_when_part_in_rule1362 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
     public static final BitSet FOLLOW_rhs_chunk_in_rule1365 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_when_key_in_when_part1394 = new BitSet(new long[]{0x0000000000000002L,0x0000000221000000L});
-    public static final BitSet FOLLOW_COLON_in_when_part1396 = new BitSet(new long[]{0x0000000000000002L,0x0000000021000000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1399 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_id1420 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_rule_id1436 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1457 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
-    public static final BitSet FOLLOW_COLON_in_rule_attributes1459 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1464 = new BitSet(new long[]{0x0000000000000002L,0x0000000041000000L});
-    public static final BitSet FOLLOW_COMMA_in_rule_attributes1468 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1473 = new BitSet(new long[]{0x0000000000000002L,0x0000000041000000L});
-    public static final BitSet FOLLOW_salience_in_rule_attribute1512 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_in_rule_attribute1518 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1525 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_in_rule_attribute1532 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_in_rule_attribute1539 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1545 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_in_rule_attribute1551 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_in_rule_attribute1557 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_in_rule_attribute1563 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1569 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1575 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_in_rule_attribute1580 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_key_in_date_effective1592 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_STRING_in_date_effective1595 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_key_in_date_expires1606 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_STRING_in_date_expires1609 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_key_in_enabled1623 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
-    public static final BitSet FOLLOW_BOOL_in_enabled1626 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_salience_key_in_salience1638 = new BitSet(new long[]{0x0000000000000000L,0x0000001020000000L});
-    public static final BitSet FOLLOW_INT_in_salience1645 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_salience1654 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_key_in_no_loop1670 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-    public static final BitSet FOLLOW_BOOL_in_no_loop1673 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1685 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-    public static final BitSet FOLLOW_BOOL_in_auto_focus1688 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_key_in_activation_group1702 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_STRING_in_activation_group1705 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1716 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_STRING_in_ruleflow_group1719 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1730 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_STRING_in_agenda_group1733 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_key_in_duration1744 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
-    public static final BitSet FOLLOW_INT_in_duration1747 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_key_in_dialect1761 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_STRING_in_dialect1764 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active1782 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
-    public static final BitSet FOLLOW_BOOL_in_lock_on_active1785 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1797 = new BitSet(new long[]{0x0000000000000002L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs1818 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or1839 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or1843 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1845 = new BitSet(new long[]{0x0000000000000000L,0x00000000A1000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or1848 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1869 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or1891 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or1898 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1903 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and1941 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and1945 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1947 = new BitSet(new long[]{0x0000000000000000L,0x00000000A1000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and1950 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1971 = new BitSet(new long[]{0x0000000000000002L,0x0000004001000000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and1993 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and2000 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2005 = new BitSet(new long[]{0x0000000000000002L,0x0000004001000000L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary2043 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary2049 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary2055 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary2061 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary2067 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary2070 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary2072 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_pattern_source_in_lhs_unary2078 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary2092 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_exists_key_in_lhs_exist2106 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2130 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist2137 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2139 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist2141 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist2154 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_not_key_in_lhs_not2200 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not2217 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not2224 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not2226 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not2228 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not2236 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_eval_key_in_lhs_eval2275 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval2279 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forall_key_in_lhs_forall2303 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall2305 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2307 = new BitSet(new long[]{0x0000000000000000L,0x0000000081000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall2310 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2342 = new BitSet(new long[]{0x0000000000000002L,0x0000008001000000L});
-    public static final BitSet FOLLOW_over_clause_in_pattern_source2346 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
-    public static final BitSet FOLLOW_from_key_in_pattern_source2356 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2372 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_statement_in_pattern_source2388 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2405 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_from_source_in_pattern_source2421 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_OVER_in_over_clause2449 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_over_elements_in_over_clause2452 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
-    public static final BitSet FOLLOW_COMMA_in_over_clause2455 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_over_elements_in_over_clause2458 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
-    public static final BitSet FOLLOW_ID_in_over_elements2471 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
-    public static final BitSet FOLLOW_COLON_in_over_elements2473 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_over_elements2475 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_over_elements2477 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement2501 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2505 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2507 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2509 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2517 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2523 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2531 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause2560 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2565 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2567 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause2571 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2575 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2577 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause2583 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2587 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2589 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause2595 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2599 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_id_clause2648 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause2652 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_key_in_collect_statement2674 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2678 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_pattern_source_in_collect_statement2680 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2682 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement2704 = new BitSet(new long[]{0x0000000000000000L,0x0000000011000000L});
-    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement2706 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entrypoint_id2729 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_entrypoint_id2742 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_source2758 = new BitSet(new long[]{0x0000000000000002L,0x0000000022000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source2771 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
-    public static final BitSet FOLLOW_expression_chain_in_from_source2778 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOT_in_expression_chain2810 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_expression_chain2812 = new BitSet(new long[]{0x0000000000000002L,0x0004000022000000L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain2832 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2854 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain2865 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2898 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_pattern2911 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_fact_binding2931 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding2937 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding2944 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding2946 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding2948 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression2987 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
-    public static final BitSet FOLLOW_or_key_in_fact_binding_expression2999 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3005 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression3010 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
-    public static final BitSet FOLLOW_pattern_type_in_fact3050 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact3052 = new BitSet(new long[]{0x0000000000000000L,0x00000000A1000000L});
-    public static final BitSet FOLLOW_constraints_in_fact3054 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact3057 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints3082 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
-    public static final BitSet FOLLOW_COMMA_in_constraints3086 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_constraint_in_constraints3089 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
-    public static final BitSet FOLLOW_or_constr_in_constraint3103 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr3114 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr3118 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr3121 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr3136 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr3140 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr3143 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-    public static final BitSet FOLLOW_eval_key_in_unary_constr3164 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_unary_constr3167 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_field_constraint_in_unary_constr3172 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr3177 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
-    public static final BitSet FOLLOW_or_constr_in_unary_constr3180 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr3182 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_field_constraint3196 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint3198 = new BitSet(new long[]{0x0000000000000002L,0x0000FF0021000000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3202 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ARROW_in_field_constraint3208 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_field_constraint3210 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint3264 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3266 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_label3290 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
-    public static final BitSet FOLLOW_COLON_in_label3292 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3308 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective3314 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3317 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3332 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective3338 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3341 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression3363 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression3368 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression3373 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression3376 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression3378 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EQUAL_in_simple_operator3397 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_GREATER_in_simple_operator3403 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator3409 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_LESS_in_simple_operator3415 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator3421 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator3427 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_not_key_in_simple_operator3433 = new BitSet(new long[]{0x0000000000000000L,0x0000800001000000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator3436 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3439 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator3442 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator3445 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3449 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3454 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3457 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator3460 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator3466 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_excludes_key_in_simple_operator3472 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator3478 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3484 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator3490 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3496 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3502 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3505 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator3508 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_expression_value_in_simple_operator3512 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator3527 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_not_key_in_compound_operator3532 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator3534 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3539 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3542 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator3546 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3549 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3554 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_expression_value3565 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value3570 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_value3576 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_when_key_in_when_part1397 = new BitSet(new long[]{0x0000000000000002L,0x0000000221000000L});
+    public static final BitSet FOLLOW_COLON_in_when_part1399 = new BitSet(new long[]{0x0000000000000002L,0x0000000021000000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1402 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_when_key_in_when_part1414 = new BitSet(new long[]{0x0000000000000002L,0x0000000221000000L});
+    public static final BitSet FOLLOW_COLON_in_when_part1416 = new BitSet(new long[]{0x0000000000000002L,0x0000000021000000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1419 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_id1440 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_rule_id1456 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1477 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
+    public static final BitSet FOLLOW_COLON_in_rule_attributes1479 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1484 = new BitSet(new long[]{0x0000000000000002L,0x0000000041000000L});
+    public static final BitSet FOLLOW_COMMA_in_rule_attributes1488 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1493 = new BitSet(new long[]{0x0000000000000002L,0x0000000041000000L});
+    public static final BitSet FOLLOW_salience_in_rule_attribute1532 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_in_rule_attribute1538 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1545 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_in_rule_attribute1552 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_in_rule_attribute1559 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1565 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_in_rule_attribute1571 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_in_rule_attribute1577 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_in_rule_attribute1583 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1589 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1595 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_in_rule_attribute1600 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_key_in_date_effective1612 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_date_effective1615 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_key_in_date_expires1626 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_date_expires1629 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_key_in_enabled1643 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
+    public static final BitSet FOLLOW_BOOL_in_enabled1646 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_salience_key_in_salience1658 = new BitSet(new long[]{0x0000000000000000L,0x0000001020000000L});
+    public static final BitSet FOLLOW_INT_in_salience1665 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_salience1674 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_key_in_no_loop1690 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+    public static final BitSet FOLLOW_BOOL_in_no_loop1693 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1705 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+    public static final BitSet FOLLOW_BOOL_in_auto_focus1708 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_key_in_activation_group1722 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_activation_group1725 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1736 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_ruleflow_group1739 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1750 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_agenda_group1753 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_key_in_duration1764 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
+    public static final BitSet FOLLOW_INT_in_duration1767 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_key_in_dialect1781 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_dialect1784 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active1802 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+    public static final BitSet FOLLOW_BOOL_in_lock_on_active1805 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1817 = new BitSet(new long[]{0x0000000000000002L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs1838 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or1859 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1863 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1865 = new BitSet(new long[]{0x0000000000000000L,0x00000000A1000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or1868 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1889 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1911 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or1918 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1923 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and1961 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1965 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1967 = new BitSet(new long[]{0x0000000000000000L,0x00000000A1000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and1970 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1991 = new BitSet(new long[]{0x0000000000000002L,0x0000004001000000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and2013 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and2020 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2025 = new BitSet(new long[]{0x0000000000000002L,0x0000004001000000L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary2063 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_lhs_not_binding_in_lhs_unary2071 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary2077 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary2083 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary2089 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary2095 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary2098 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary2100 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_pattern_source_in_lhs_unary2106 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary2120 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_exists_key_in_lhs_exist2134 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2158 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist2165 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2167 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist2169 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist2182 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_key_in_lhs_not_binding2228 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_not_binding2230 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_key_in_lhs_not2253 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not2270 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not2277 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not2279 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not2281 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not2289 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_eval_key_in_lhs_eval2328 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval2332 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forall_key_in_lhs_forall2356 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall2358 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2360 = new BitSet(new long[]{0x0000000000000000L,0x0000000081000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall2363 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2395 = new BitSet(new long[]{0x0000000000000002L,0x0000008001000000L});
+    public static final BitSet FOLLOW_over_clause_in_pattern_source2399 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
+    public static final BitSet FOLLOW_from_key_in_pattern_source2409 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2425 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_statement_in_pattern_source2441 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2458 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_source_in_pattern_source2474 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_OVER_in_over_clause2502 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_over_elements_in_over_clause2505 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COMMA_in_over_clause2508 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_over_elements_in_over_clause2511 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_ID_in_over_elements2524 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
+    public static final BitSet FOLLOW_COLON_in_over_elements2526 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_over_elements2528 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_over_elements2530 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement2554 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2558 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2560 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2562 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2570 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2576 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2584 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause2613 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2618 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2620 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause2624 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2628 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2630 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause2636 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2640 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2642 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause2648 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2652 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause2701 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause2705 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_key_in_collect_statement2727 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2731 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_pattern_source_in_collect_statement2733 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2735 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement2757 = new BitSet(new long[]{0x0000000000000000L,0x0000000011000000L});
+    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement2759 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entrypoint_id2782 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_entrypoint_id2795 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source2811 = new BitSet(new long[]{0x0000000000000002L,0x0000000022000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source2824 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source2831 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOT_in_expression_chain2863 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_expression_chain2865 = new BitSet(new long[]{0x0000000000000002L,0x0004000022000000L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain2885 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2907 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain2918 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2951 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_pattern2964 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_fact_binding2984 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding2990 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding2997 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding2999 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding3001 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression3040 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
+    public static final BitSet FOLLOW_or_key_in_fact_binding_expression3052 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3058 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression3063 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
+    public static final BitSet FOLLOW_pattern_type_in_fact3103 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact3105 = new BitSet(new long[]{0x0000000000000000L,0x00000000A1000000L});
+    public static final BitSet FOLLOW_constraints_in_fact3107 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact3110 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints3135 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COMMA_in_constraints3139 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_constraint_in_constraints3142 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_or_constr_in_constraint3156 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr3167 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr3171 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr3174 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr3189 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr3193 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr3196 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_eval_key_in_unary_constr3217 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_unary_constr3220 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr3225 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr3230 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr3233 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr3235 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_field_constraint3249 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint3251 = new BitSet(new long[]{0x0000000000000002L,0x0000FF0021000000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3255 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ARROW_in_field_constraint3261 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_field_constraint3263 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint3317 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3319 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_label3343 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
+    public static final BitSet FOLLOW_COLON_in_label3345 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3361 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective3367 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3370 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3385 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective3391 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3394 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression3416 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression3421 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression3426 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression3429 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression3431 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EQUAL_in_simple_operator3450 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_GREATER_in_simple_operator3456 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator3462 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_LESS_in_simple_operator3468 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator3474 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator3480 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_not_key_in_simple_operator3486 = new BitSet(new long[]{0x0000000000000000L,0x0000800001000000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator3489 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3492 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator3495 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3498 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3502 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3507 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3510 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3513 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator3519 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_excludes_key_in_simple_operator3525 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator3531 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3537 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3543 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3549 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3555 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3558 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3561 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator3565 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3580 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_not_key_in_compound_operator3585 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3587 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3592 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3595 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator3599 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3602 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3607 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_expression_value3618 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value3623 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_value3629 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_set_in_literal_constraint0 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_pattern_type3620 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
-    public static final BitSet FOLLOW_DOT_in_pattern_type3626 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_pattern_type3630 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
-    public static final BitSet FOLLOW_dimension_definition_in_pattern_type3645 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
-    public static final BitSet FOLLOW_ID_in_data_type3671 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
-    public static final BitSet FOLLOW_DOT_in_data_type3675 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_data_type3677 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
-    public static final BitSet FOLLOW_dimension_definition_in_data_type3682 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3708 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3710 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path3721 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
-    public static final BitSet FOLLOW_DOT_in_accessor_path3725 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path3727 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
-    public static final BitSet FOLLOW_ID_in_accessor_element3751 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_accessor_element3753 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3782 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3801 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_set_in_rhs_chunk_data3805 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_END_in_rhs_chunk_data3811 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3813 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3830 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3849 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_set_in_curly_chunk_data3852 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3866 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3871 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3887 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3907 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_set_in_paren_chunk_data3910 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3924 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3929 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3946 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data3965 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_set_in_square_chunk_data3968 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data3982 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data3987 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key4006 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_effective_key4008 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key4010 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key4036 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_expires_key4038 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key4040 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key4066 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key4068 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key4070 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key4072 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key4074 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key4100 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_no_loop_key4102 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key4104 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key4130 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_auto_focus_key4132 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key4134 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key4160 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_activation_group_key4162 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key4164 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key4190 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_agenda_group_key4192 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key4194 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key4220 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key4222 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key4224 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_duration_key4249 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_package_key4271 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_key4293 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dialect_key4315 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_salience_key4337 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enabled_key4359 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_attributes_key4381 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_when_key4403 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_key4425 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_template_key4447 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_query_key4469 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_declare_key4491 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_function_key4513 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_global_key4535 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_eval_key4557 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_contains_key4579 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_matches_key4601 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_excludes_key4623 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_soundslike_key4645 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_memberof_key4667 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_not_key4689 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_in_key4711 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_or_key4733 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_and_key4755 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_exists_key4777 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_forall_key4799 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_key4821 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key4844 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_entry_point_key4846 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key4848 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_key4873 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_init_key4895 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_action_key4917 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_reverse_key4939 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_result_key4961 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_collect_key4983 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred11833 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_or_key_in_synpred11835 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_or_key_in_synpred21882 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred21884 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred31935 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_and_key_in_synpred31937 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred41984 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred41986 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SEMICOLON_in_synpred52088 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred62120 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_or_key_in_synpred62123 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred62125 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred72207 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_or_key_in_synpred72210 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred72212 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred82765 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred92826 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred102848 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_pattern_type3673 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
+    public static final BitSet FOLLOW_DOT_in_pattern_type3679 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_pattern_type3683 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_pattern_type3698 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_ID_in_data_type3724 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
+    public static final BitSet FOLLOW_DOT_in_data_type3728 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_data_type3730 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type3735 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3761 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3763 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3774 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_DOT_in_accessor_path3778 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3780 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_ID_in_accessor_element3804 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_accessor_element3806 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3835 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3854 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_set_in_rhs_chunk_data3858 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_END_in_rhs_chunk_data3864 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3866 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3883 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3902 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_set_in_curly_chunk_data3905 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3919 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3924 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3940 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3960 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_set_in_paren_chunk_data3963 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3977 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3982 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3999 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data4018 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_set_in_square_chunk_data4021 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data4035 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data4040 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key4059 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_effective_key4061 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key4063 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key4089 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_expires_key4091 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key4093 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key4119 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key4121 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key4123 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key4125 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key4127 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key4153 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_no_loop_key4155 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key4157 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key4183 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_auto_focus_key4185 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key4187 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key4213 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_activation_group_key4215 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key4217 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key4243 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_agenda_group_key4245 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key4247 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key4273 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key4275 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key4277 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_duration_key4302 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_key4324 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_key4346 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dialect_key4368 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_salience_key4390 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enabled_key4412 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_attributes_key4434 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_when_key4456 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_key4478 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_key4500 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_key4522 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_declare_key4544 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_key4566 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_key4588 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_eval_key4610 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_contains_key4632 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_matches_key4654 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_excludes_key4676 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_soundslike_key4698 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_memberof_key4720 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_not_key4742 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_in_key4764 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_or_key4786 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_and_key4808 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_exists_key4830 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_forall_key4852 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_key4874 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4897 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_entry_point_key4899 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4901 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_key4926 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_init_key4948 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_action_key4970 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_reverse_key4992 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_result_key5014 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_collect_key5036 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred11853 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_or_key_in_synpred11855 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_or_key_in_synpred21902 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred21904 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred31955 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_and_key_in_synpred31957 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred42004 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred42006 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMICOLON_in_synpred52116 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred62148 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_or_key_in_synpred62151 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred62153 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred72260 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_or_key_in_synpred72263 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred72265 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred82818 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred92879 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred102901 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

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	2008-08-01 19:10:57 UTC (rev 21324)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2008-08-01 19:27:37 UTC (rev 21325)
@@ -161,6 +161,22 @@
 		}
 	}
 	
+	private boolean validateNotWithBinding(){
+		if (input.LA(1) == ID && input.LA(2) == ID && input.LA(3) == COLON){
+			return true;
+		}
+		return false;
+	}
+
+	private boolean validateWhenWithParenthesis(){
+		if (input.LA(1) == ID && validateIdentifierKey(DroolsSoftKeywords.WHEN) && input.LA(2) == COLON && input.LA(3) == LEFT_PAREN && !(validateLT(4, DroolsSoftKeywords.OR) || validateLT(4, DroolsSoftKeywords.AND))){
+			return true;
+		} else if (input.LA(1) == ID && validateIdentifierKey(DroolsSoftKeywords.WHEN) && input.LA(2) == LEFT_PAREN && !(validateLT(3, DroolsSoftKeywords.OR) || validateLT(3, DroolsSoftKeywords.AND))){
+			return true;
+		}
+		return false;		
+	}
+
 	private boolean validateRestr() {
 		int lookahead = 2;
 		int countParen = 1;
@@ -454,8 +470,10 @@
 	;
 
 when_part
-	:	when_key COLON? normal_lhs_block
+	: {validateWhenWithParenthesis()}?=>	when_key COLON? normal_lhs_block
 	->	when_key normal_lhs_block
+	|	when_key COLON? normal_lhs_block
+	->	when_key normal_lhs_block
 	;
 
 rule_id
@@ -569,6 +587,7 @@
 lhs_unary
 options{backtrack=true;}
 	:	(	lhs_exist
+		|{validateNotWithBinding()}?=>	lhs_not_binding
 		|	lhs_not
 		|	lhs_eval
 		|	lhs_forall
@@ -586,7 +605,12 @@
 	        )
 	        -> ^(exists_key lhs_or? lhs_pattern? RIGHT_PAREN?)
 	;
-	
+
+lhs_not_binding
+	:	not_key fact_binding
+	-> ^(not_key ^(VT_PATTERN fact_binding))
+	;
+
 lhs_not	:	not_key
 		( (LEFT_PAREN (or_key|and_key))=> lhs_or //prevent "((" 
 		|	LEFT_PAREN lhs_or RIGHT_PAREN 




More information about the jboss-svn-commits mailing list