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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jul 23 13:27:03 EDT 2008


Author: porcelli
Date: 2008-07-23 13:27:03 -0400 (Wed, 23 Jul 2008)
New Revision: 21199

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
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
Log:
JBRULES-1692: fix the issue

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-07-23 16:17:30 UTC (rev 21198)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-07-23 17:27:03 UTC (rev 21199)
@@ -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-22 10:02:12
+// $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
 
 	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:1038:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /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:1038: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 )+
             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:1038:19: ' '
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:19: ' '
             	    {
             	    match(' '); if (failed) return ;
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:19: '\\t'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082: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:1040:19: '\\f'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083: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:1041:19: EOL
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084: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:1047:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /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:1048: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' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
@@ -275,13 +275,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1048:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("1091: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:1048:14: ( '\\r\\n' )=> '\\r\\n'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1091: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:1049:25: '\\r'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1092: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:1050:25: '\\n'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093: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:1055:2: ( ( '-' )? ( '0' .. '9' )+ )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:4: ( '-' )? ( '0' .. '9' )+
+            // /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:1055:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098: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:1055:5: '-'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098: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:1055:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098: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:1055:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098: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:1059:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // /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:1059:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102: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:1059:5: '-'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102: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:1059:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102: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:1059:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102: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:1059:26: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102: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:1059:27: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102: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:1063:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106: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("1062:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("1105: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:1063: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:1063:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:9: '\"' ( 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 | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106: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:1063:15: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106: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:1063:32: ~ ( '\\\\' | '\"' )
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106: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:1064: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:1064:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1064:9: '\\'' ( 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 | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1064:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107: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:1064:16: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107: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:1064:33: ~ ( '\\\\' | '\\'' )
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107: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:1068:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1068:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // /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' )
             {
             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:1072: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: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 )
             int alt11=3;
             int LA11_0 = input.LA(1);
 
@@ -728,7 +728,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1070: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("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);
 
                     throw nvae;
                 }
@@ -737,13 +737,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1070: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("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);
 
                 throw nvae;
             }
             switch (alt11) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072: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: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' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
                     {
                     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:1076:9: UnicodeEscape
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1119: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:1077:9: OctalEscape
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1120: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:1082: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:1125: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("1080:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("1123: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("1080:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("1123: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:1082:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125: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:1082:14: ( '0' .. '3' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:15: '0' .. '3'
+                    // /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'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:25: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:26: '0' .. '7'
+                    // /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'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:36: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:37: '0' .. '7'
+                    // /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'
                     {
                     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:1083:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126: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:1083:14: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:15: '0' .. '7'
+                    // /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'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:25: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:26: '0' .. '7'
+                    // /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'
                     {
                     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:1084:9: '\\\\' ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1127:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:14: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:15: '0' .. '7'
+                    // /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'
                     {
                     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:1089:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1089:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // /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
             {
             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:1093:2: ( ( 'true' | 'false' ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:4: ( 'true' | 'false' )
+            // /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:1093:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136: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("1093:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("1136: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:1093:5: 'true'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136: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:1093:12: 'false'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136: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:1096:6: ( 'null' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1096:8: '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'
             {
             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:1099:2: ( 'over' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1099:4: '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'
             {
             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:1103:2: ( 'then' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1103:4: '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'
             {
             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:1106:5: ( 'end' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:7: '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'
             {
             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:1110:2: ( '`' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1110:4: '`'
+            // /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: '`'
             {
             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:1113:4: ( '@' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1113:6: '@'
+            // /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: '@'
             {
             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:1117:2: ( '=' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:4: '='
+            // /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: '='
             {
             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:1121:2: ( ';' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1121:4: ';'
+            // /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: ';'
             {
             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:1125:2: ( '.*' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:4: '.*'
+            // /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: '.*'
             {
             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:1129:2: ( ':' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1129:4: ':'
+            // /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: ':'
             {
             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:1133:2: ( '==' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1133:4: '=='
+            // /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: '=='
             {
             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:1137:2: ( '!=' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1137:4: '!='
+            // /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: '!='
             {
             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:1141:2: ( '>' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141: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 ;
 
@@ -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:1145:2: ( '>=' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1145: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 ;
 
@@ -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:1149:2: ( '<' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149: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 ;
 
@@ -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: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:1196:2: ( '<=' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1196: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:1157:2: ( '->' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1157: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 ;
 
@@ -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:1161: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:1161: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: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' )*
             {
             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:1161: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:1204: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:1165:9: ( '(' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1165:11: '('
+            // /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: '('
             {
             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:1169:9: ( ')' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1169:11: ')'
+            // /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: ')'
             {
             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:1173:9: ( '[' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1173:11: '['
+            // /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: '['
             {
             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:1177:9: ( ']' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1177:11: ']'
+            // /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: ']'
             {
             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:1181:9: ( '{' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1181:11: '{'
+            // /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: '{'
             {
             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:1185:9: ( '}' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1185:11: '}'
+            // /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: '}'
             {
             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:1188:7: ( ',' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:9: ','
+            // /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: ','
             {
             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:1191:5: ( '.' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1191:7: '.'
+            // /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: '.'
             {
             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:1195:2: ( '&&' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1195:4: '&&'
+            // /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: '&&'
             {
             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:1199:2: ( '||' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1199:4: '||'
+            // /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: '||'
             {
             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:1203:2: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1203:4: '#' ( options {greedy=false; } : . )* EOL
+            // /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
             {
             match('#'); if (failed) return ;
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1203:8: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1246: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:1203:35: .
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1246: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:1209:2: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1209:4: '//' ( options {greedy=false; } : . )* EOL
+            // /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
             {
             match("//"); if (failed) return ;
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1209:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252: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:1209:36: .
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1252: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:1214:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1214:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // /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; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1214:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1257: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:1214:35: .
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1257: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:1218:7: ( '!' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // /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:
             {
             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:1048:14: ( '\\r\\n' )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:16: '\\r\\n'
+        // /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'
         {
         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-07-23 16:17:30 UTC (rev 21198)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-07-23 17:27:03 UTC (rev 21199)
@@ -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-22 10:02:11
+// $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
 
 	package org.drools.lang;
 	
@@ -147,7 +147,7 @@
 
         public DRLParser(TokenStream input) {
             super(input);
-            ruleMemo = new HashMap[147+1];
+            ruleMemo = new HashMap[145+1];
          }
         
     protected TreeAdaptor adaptor = new CommonTreeAdaptor();
@@ -167,6 +167,7 @@
     	private List<DroolsParserException> errors = new ArrayList<DroolsParserException>();
     	private DroolsParserExceptionFactory errorMessageFactory = new DroolsParserExceptionFactory(tokenNames, paraphrases);
     	private String source = "unknown";
+    	private boolean lookaheadTest = false;
 
     	private boolean validateLT(int LTNumber, String text) {
     		if (null == input)
@@ -194,6 +195,40 @@
     		}
     	}
     	
+    	private boolean validateRestr() {
+    		int lookahead = 2;
+    		int countParen = 1;
+
+    		while (true) {
+    			if (input.LA(lookahead) == COMMA) {
+    				break;
+    			} else if (input.LA(lookahead) == LEFT_PAREN) {
+    				countParen++;
+    			} else if (input.LA(lookahead) == RIGHT_PAREN) {
+    				countParen--;
+    			}
+    			if (countParen == 0){
+    				break;
+    			}
+    			lookahead++;
+    		}
+    		
+    		boolean returnValue = false;
+    		int activeIndex = input.index();
+    		lookaheadTest = true;
+    		try {
+    			input.seek(input.LT(2).getTokenIndex());
+    			constraint_expression();
+    			returnValue = true;
+    		} catch (RecognitionException e) {
+    		} finally{
+    			input.seek(activeIndex);
+    		}
+    		lookaheadTest = false;
+
+    		return returnValue;
+    	}
+    	
     	private String safeSubstring(String text, int start, int end) {
     		return text.substring(Math.min(start, text.length()), Math.min(Math
     				.max(start, end), text.length()));
@@ -281,7 +316,7 @@
     };
 
     // $ANTLR start compilation_unit
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:244: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:279: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);
@@ -299,17 +334,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:245: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:245:4: ( package_statement )? ( statement )* EOF
+            // /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:245:4: ( package_statement )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:280: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)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(Dr!
 oolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(valid!
 ateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKe
y(DroolsSoftKeywords.PACKAGE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((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, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeyw!
 ords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||((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, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
+            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)))))) {
                 int LA1_1 = input.LA(2);
 
-                if ( (LA1_1==ID) && ((((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, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKey!
 words.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)))||((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, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywo!
 rds.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)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.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)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSof!
 tKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((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, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((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, "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, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))))) {
+                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)))))) {
                     int LA1_4 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.PACKAGE))) ) {
@@ -319,7 +354,7 @@
             }
             switch (alt1) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:245:4: package_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:280:4: package_statement
                     {
                     pushFollow(FOLLOW_package_statement_in_compilation_unit408);
                     package_statement1=package_statement();
@@ -332,20 +367,20 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:246:3: ( statement )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:3: ( statement )*
             loop2:
             do {
                 int alt2=2;
                 int LA2_0 = input.LA(1);
 
-                if ( (LA2_0==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(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))||(valid!
 ateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(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))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
+                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))))) {
                     alt2=1;
                 }
 
 
                 switch (alt2) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:246:3: statement
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:3: statement
             	    {
             	    pushFollow(FOLLOW_statement_in_compilation_unit413);
             	    statement2=statement();
@@ -377,20 +412,20 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 248:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            // 283:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:248:6: ^( 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 )* )
                 {
                 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:248:28: ( package_statement )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283: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:248:47: ( statement )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:47: ( statement )*
                 while ( stream_statement.hasNext() ) {
                     adaptor.addChild(root_1, stream_statement.next());
 
@@ -434,7 +469,7 @@
     };
 
     // $ANTLR start package_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:256: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:291: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);
@@ -453,8 +488,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:259: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:259:4: package_key package_id ( SEMICOLON )?
+            // /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 )?
             {
             pushFollow(FOLLOW_package_key_in_package_statement469);
             package_key4=package_key();
@@ -466,7 +501,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:259:27: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:27: ( SEMICOLON )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -475,7 +510,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:259:27: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:27: SEMICOLON
                     {
                     SEMICOLON6=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement473); if (failed) return retval;
@@ -499,9 +534,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 260:3: -> ^( package_key package_id )
+            // 295:3: -> ^( package_key package_id )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:260:6: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_package_key.nextNode(), root_1);
@@ -543,7 +578,7 @@
     };
 
     // $ANTLR start package_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:263: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:298: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);
@@ -558,8 +593,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:264: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:264:4: id+= ID (id+= DOT id+= ID )*
+            // /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 )*
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_package_id497); if (failed) return retval;
@@ -568,7 +603,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:264:11: (id+= DOT id+= ID )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:11: (id+= DOT id+= ID )*
             loop4:
             do {
                 int alt4=2;
@@ -581,7 +616,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:264:13: id+= DOT id+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
             	    match(input,DOT,FOLLOW_DOT_in_package_id503); if (failed) return retval;
@@ -621,9 +656,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 266:3: -> ^( VT_PACKAGE_ID ( ID )+ )
+            // 301:3: -> ^( VT_PACKAGE_ID ( ID )+ )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:266:6: ^( 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 )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PACKAGE_ID, "VT_PACKAGE_ID"), root_1);
@@ -669,7 +704,7 @@
     };
 
     // $ANTLR start statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:269: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:304: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);
@@ -697,17 +732,17 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272: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:307: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))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((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)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((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)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") !
 && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(val!
 idateIdentifierKey(DroolsSoftKeywords.ENABLED))||((validateLT(1, Drool
sSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && v!
 alidateLT(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, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
+            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)))))) {
                 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)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((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(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywor!
 ds.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((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.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(!
 (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.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((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, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdent!
 ifierKey(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.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.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords!
 .DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((va
lidateLT(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)))))) {
+                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)))))) {
                     int LA5_3 = input.LA(3);
 
                     if ( (((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) ) {
@@ -737,12 +772,12 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("269:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 3, input);
+                            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);
 
                         throw nvae;
                     }
                 }
-                else if ( (LA5_1==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(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)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((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)))))) {
+                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);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {
@@ -760,24 +795,24 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("269:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 4, input);
+                            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);
 
                         throw nvae;
                     }
                 }
-                else if ( (LA5_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {
-                    alt5=1;
-                }
                 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("269:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 1, input);
+                        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);
 
                     throw nvae;
                 }
@@ -785,13 +820,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("269:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 0, input);
+                    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);
 
                 throw nvae;
             }
             switch (alt5) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:5: rule_attribute
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:307:5: rule_attribute
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -804,7 +839,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:273:3: {...}? => function_import_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:3: {...}? => function_import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -821,7 +856,7 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:274:4: import_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:309:4: import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -834,7 +869,7 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:275:4: global
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:4: global
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -847,7 +882,7 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:276:4: function
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311:4: function
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -860,7 +895,7 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:277:4: {...}? => template
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:312:4: {...}? => template
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -877,7 +912,7 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:278:4: {...}? => type_declaration
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:313:4: {...}? => type_declaration
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -894,7 +929,7 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:279:4: rule
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:4: rule
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -907,7 +942,7 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:280:4: query
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:4: query
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -944,7 +979,7 @@
     };
 
     // $ANTLR start import_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283: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:318: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);
@@ -963,8 +998,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:286: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:286:4: import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )?
+            // /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 )?
             {
             pushFollow(FOLLOW_import_key_in_import_statement618);
             import_key16=import_key();
@@ -976,7 +1011,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:286:58: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:58: ( SEMICOLON )?
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -985,7 +1020,7 @@
             }
             switch (alt6) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:286:58: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:58: SEMICOLON
                     {
                     SEMICOLON18=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement623); if (failed) return retval;
@@ -1009,9 +1044,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 287:3: -> ^( import_key import_name )
+            // 322:3: -> ^( import_key import_name )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:287:6: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_import_key.nextNode(), root_1);
@@ -1053,7 +1088,7 @@
     };
 
     // $ANTLR start function_import_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:290: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: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 ) ;
     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);
@@ -1075,8 +1110,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:293: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:293: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: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 )?
             {
             pushFollow(FOLLOW_import_key_in_function_import_statement658);
             imp=import_key();
@@ -1093,7 +1128,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:293:84: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:328:84: ( SEMICOLON )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -1102,7 +1137,7 @@
             }
             switch (alt7) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:84: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:328:84: SEMICOLON
                     {
                     SEMICOLON21=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement665); if (failed) return retval;
@@ -1126,9 +1161,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 294:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+            // 329: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:294: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:329: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);
@@ -1171,7 +1206,7 @@
     };
 
     // $ANTLR start import_name
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:297: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:332: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);
@@ -1187,8 +1222,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:298: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:298: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: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 )?
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_import_name694); if (failed) return retval;
@@ -1197,7 +1232,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:298:11: (id+= DOT id+= ID )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:11: (id+= DOT id+= ID )*
             loop8:
             do {
                 int alt8=2;
@@ -1210,7 +1245,7 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:13: id+= DOT id+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
             	    match(input,DOT,FOLLOW_DOT_in_import_name700); if (failed) return retval;
@@ -1235,7 +1270,7 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:33: (id+= DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:33: (id+= DOT_STAR )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -1244,7 +1279,7 @@
             }
             switch (alt9) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:33: id+= DOT_STAR
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:33: id+= DOT_STAR
                     {
                     id=(Token)input.LT(1);
                     match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name711); if (failed) return retval;
@@ -1274,9 +1309,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 300:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            // 335:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:300:6: ^( 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 )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_IMPORT_ID, "VT_IMPORT_ID"), root_1);
@@ -1289,7 +1324,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:300:25: ( DOT_STAR )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:335:25: ( DOT_STAR )?
                 if ( stream_DOT_STAR.hasNext() ) {
                     adaptor.addChild(root_1, stream_DOT_STAR.next());
 
@@ -1328,7 +1363,7 @@
     };
 
     // $ANTLR start global
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:303: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:338: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);
@@ -1350,8 +1385,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:306: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:306:4: global_key data_type global_id ( SEMICOLON )?
+            // /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 )?
             {
             pushFollow(FOLLOW_global_key_in_global751);
             global_key22=global_key();
@@ -1368,7 +1403,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:306:35: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341:35: ( SEMICOLON )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -1377,7 +1412,7 @@
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:35: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341:35: SEMICOLON
                     {
                     SEMICOLON25=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global757); if (failed) return retval;
@@ -1401,9 +1436,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 307:3: -> ^( global_key data_type global_id )
+            // 342:3: -> ^( global_key data_type global_id )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:307:6: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_global_key.nextNode(), root_1);
@@ -1446,7 +1481,7 @@
     };
 
     // $ANTLR start global_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310: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:345: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);
@@ -1459,8 +1494,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:311:2: (id= ID -> VT_GLOBAL_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311:4: id= ID
+            // /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
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_global_id783); if (failed) return retval;
@@ -1481,7 +1516,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 313:3: -> VT_GLOBAL_ID[$id]
+            // 348:3: -> VT_GLOBAL_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_GLOBAL_ID, id));
 
@@ -1514,7 +1549,7 @@
     };
 
     // $ANTLR start function
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:316: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:351: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);
@@ -1539,15 +1574,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:319: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:319: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: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
             {
             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:319:17: ( data_type )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:17: ( data_type )?
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -1560,7 +1595,7 @@
             }
             switch (alt11) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:17: data_type
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:17: data_type
                     {
                     pushFollow(FOLLOW_data_type_in_function817);
                     data_type27=data_type();
@@ -1600,14 +1635,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 320:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
+            // 355: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:320: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:355: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:320:21: ( data_type )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:21: ( data_type )?
                 if ( stream_data_type.hasNext() ) {
                     adaptor.addChild(root_1, stream_data_type.next());
 
@@ -1652,7 +1687,7 @@
     };
 
     // $ANTLR start function_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:323: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:358: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);
@@ -1665,8 +1700,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:324:2: (id= ID -> VT_FUNCTION_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324:4: id= ID
+            // /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
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_function_id854); if (failed) return retval;
@@ -1687,7 +1722,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 326:3: -> VT_FUNCTION_ID[$id]
+            // 361:3: -> VT_FUNCTION_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_FUNCTION_ID, id));
 
@@ -1720,7 +1755,7 @@
     };
 
     // $ANTLR start query
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329: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:364: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);
@@ -1748,8 +1783,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:332: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:332: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: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 )?
             {
             pushFollow(FOLLOW_query_key_in_query886);
             query_key31=query_key();
@@ -1761,12 +1796,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:332:23: ( parameters )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367: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:332:23: parameters
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:23: parameters
                     {
                     pushFollow(FOLLOW_parameters_in_query890);
                     parameters33=parameters();
@@ -1788,7 +1823,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:332:56: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:56: ( SEMICOLON )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -1797,7 +1832,7 @@
             }
             switch (alt13) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:56: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:56: SEMICOLON
                     {
                     SEMICOLON36=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query897); if (failed) return retval;
@@ -1821,15 +1856,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 333:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
+            // 368: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:333: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:368: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:333:27: ( parameters )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368:27: ( parameters )?
                 if ( stream_parameters.hasNext() ) {
                     adaptor.addChild(root_1, stream_parameters.next());
 
@@ -1873,7 +1908,7 @@
     };
 
     // $ANTLR start query_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:336: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:371: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);
@@ -1887,7 +1922,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:337: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:372:2: (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] )
             int alt14=2;
             int LA14_0 = input.LA(1);
 
@@ -1900,13 +1935,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("336:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );", 14, 0, input);
+                    new NoViableAltException("371: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:337:5: id= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:372:5: id= ID
                     {
                     id=(Token)input.LT(1);
                     match(input,ID,FOLLOW_ID_in_query_id929); if (failed) return retval;
@@ -1927,7 +1962,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 338:67: -> VT_QUERY_ID[$id]
+                    // 373:67: -> VT_QUERY_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, id));
 
@@ -1938,7 +1973,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:5: id= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:374:5: id= STRING
                     {
                     id=(Token)input.LT(1);
                     match(input,STRING,FOLLOW_STRING_in_query_id945); if (failed) return retval;
@@ -1959,7 +1994,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 340:67: -> VT_QUERY_ID[$id]
+                    // 375:67: -> VT_QUERY_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, id));
 
@@ -1994,7 +2029,7 @@
     };
 
     // $ANTLR start parameters
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:343: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:378: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);
@@ -2017,14 +2052,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:344: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:344: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: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
             {
             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:345:4: ( param_definition ( COMMA param_definition )* )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:4: ( param_definition ( COMMA param_definition )* )?
             int alt16=2;
             int LA16_0 = input.LA(1);
 
@@ -2033,14 +2068,14 @@
             }
             switch (alt16) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:6: param_definition ( COMMA param_definition )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380: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:345:23: ( COMMA param_definition )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:23: ( COMMA param_definition )*
                     loop15:
                     do {
                         int alt15=2;
@@ -2053,7 +2088,7 @@
 
                         switch (alt15) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:24: COMMA param_definition
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:24: COMMA param_definition
                     	    {
                     	    COMMA39=(Token)input.LT(1);
                     	    match(input,COMMA,FOLLOW_COMMA_in_parameters974); if (failed) return retval;
@@ -2095,14 +2130,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 347:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+            // 382:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:347:6: ^( 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 )
                 {
                 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:347:22: ( param_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:22: ( param_definition )*
                 while ( stream_param_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_param_definition.next());
 
@@ -2142,7 +2177,7 @@
     };
 
     // $ANTLR start param_definition
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:1: param_definition : ( data_type )? argument ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:385: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);
@@ -2156,17 +2191,17 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:2: ( ( data_type )? argument )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:4: ( data_type )? argument
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:4: ( data_type )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386: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:351:4: data_type
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:4: data_type
                     {
                     pushFollow(FOLLOW_data_type_in_param_definition1009);
                     data_type42=data_type();
@@ -2210,7 +2245,7 @@
     };
 
     // $ANTLR start argument
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:1: argument : ID ( dimension_definition )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:389:1: argument : ID ( dimension_definition )* ;
     public final argument_return argument() throws RecognitionException {
         argument_return retval = new argument_return();
         retval.start = input.LT(1);
@@ -2224,8 +2259,8 @@
         Object ID44_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:2: ( ID ( dimension_definition )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:4: ID ( dimension_definition )*
+            // /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 )*
             {
             root_0 = (Object)adaptor.nil();
 
@@ -2235,7 +2270,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:355:7: ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:7: ( dimension_definition )*
             loop18:
             do {
                 int alt18=2;
@@ -2248,7 +2283,7 @@
 
                 switch (alt18) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:7: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:7: dimension_definition
             	    {
             	    pushFollow(FOLLOW_dimension_definition_in_argument1025);
             	    dimension_definition45=dimension_definition();
@@ -2290,7 +2325,7 @@
     };
 
     // $ANTLR start type_declaration
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:358: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:393: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);
@@ -2315,8 +2350,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:361: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:361: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: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
             {
             pushFollow(FOLLOW_declare_key_in_type_declaration1048);
             declare_key46=declare_key();
@@ -2328,7 +2363,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:362:3: ( decl_metadata )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:397:3: ( decl_metadata )*
             loop19:
             do {
                 int alt19=2;
@@ -2341,7 +2376,7 @@
 
                 switch (alt19) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:362:3: decl_metadata
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:397:3: decl_metadata
             	    {
             	    pushFollow(FOLLOW_decl_metadata_in_type_declaration1055);
             	    decl_metadata48=decl_metadata();
@@ -2357,7 +2392,7 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:363:3: ( decl_field )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:3: ( decl_field )*
             loop20:
             do {
                 int alt20=2;
@@ -2370,7 +2405,7 @@
 
                 switch (alt20) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:363:3: decl_field
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:3: decl_field
             	    {
             	    pushFollow(FOLLOW_decl_field_in_type_declaration1060);
             	    decl_field49=decl_field();
@@ -2402,21 +2437,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 365:3: -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END )
+            // 400: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:365: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:400: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:365:36: ( decl_metadata )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:400: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:365:51: ( decl_field )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:400:51: ( decl_field )*
                 while ( stream_decl_field.hasNext() ) {
                     adaptor.addChild(root_1, stream_decl_field.next());
 
@@ -2459,7 +2494,7 @@
     };
 
     // $ANTLR start type_declare_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368: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:403: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);
@@ -2472,8 +2507,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:369:2: (id= ID -> VT_TYPE_DECLARE_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:369:5: id= ID
+            // /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
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_type_declare_id1097); if (failed) return retval;
@@ -2494,7 +2529,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 370:74: -> VT_TYPE_DECLARE_ID[$id]
+            // 405:74: -> VT_TYPE_DECLARE_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_TYPE_DECLARE_ID, id));
 
@@ -2527,7 +2562,7 @@
     };
 
     // $ANTLR start decl_metadata
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:373: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:408: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);
@@ -2545,8 +2580,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:374: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:374:4: AT ID paren_chunk
+            // /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
             {
             AT51=(Token)input.LT(1);
             match(input,AT,FOLLOW_AT_in_decl_metadata1116); if (failed) return retval;
@@ -2573,9 +2608,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 375:3: -> ^( AT ID paren_chunk )
+            // 410:3: -> ^( AT ID paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:375:6: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_AT.next(), root_1);
@@ -2615,7 +2650,7 @@
     };
 
     // $ANTLR start decl_field
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378: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:413: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);
@@ -2639,14 +2674,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:379: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:379: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: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 )*
             {
             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:379:7: ( decl_field_initialization )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:7: ( decl_field_initialization )?
             int alt21=2;
             int LA21_0 = input.LA(1);
 
@@ -2655,7 +2690,7 @@
             }
             switch (alt21) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379:7: decl_field_initialization
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:7: decl_field_initialization
                     {
                     pushFollow(FOLLOW_decl_field_initialization_in_decl_field1145);
                     decl_field_initialization55=decl_field_initialization();
@@ -2677,7 +2712,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:380:3: ( decl_metadata )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:415:3: ( decl_metadata )*
             loop22:
             do {
                 int alt22=2;
@@ -2690,7 +2725,7 @@
 
                 switch (alt22) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:3: decl_metadata
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:415:3: decl_metadata
             	    {
             	    pushFollow(FOLLOW_decl_metadata_in_decl_field1154);
             	    decl_metadata58=decl_metadata();
@@ -2718,21 +2753,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 381:3: -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
+            // 416: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:381: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:416: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:381:11: ( decl_field_initialization )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416: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:381:48: ( decl_metadata )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:48: ( decl_metadata )*
                 while ( stream_decl_metadata.hasNext() ) {
                     adaptor.addChild(root_1, stream_decl_metadata.next());
 
@@ -2771,7 +2806,7 @@
     };
 
     // $ANTLR start decl_field_initialization
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:384: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:419: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);
@@ -2786,8 +2821,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:385:2: ( EQUALS paren_chunk -> ^( EQUALS paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:385:4: EQUALS paren_chunk
+            // /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
             {
             EQUALS59=(Token)input.LT(1);
             match(input,EQUALS,FOLLOW_EQUALS_in_decl_field_initialization1182); if (failed) return retval;
@@ -2810,9 +2845,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 386:2: -> ^( EQUALS paren_chunk )
+            // 421:2: -> ^( EQUALS paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:5: ^( EQUALS paren_chunk )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:5: ^( EQUALS paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_EQUALS.next(), root_1);
@@ -2851,7 +2886,7 @@
     };
 
     // $ANTLR start template
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:389: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:424: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);
@@ -2878,8 +2913,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:392: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:392: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: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 )?
             {
             pushFollow(FOLLOW_template_key_in_template1215);
             template_key61=template_key();
@@ -2891,7 +2926,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:392:29: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:29: ( SEMICOLON )?
             int alt23=2;
             int LA23_0 = input.LA(1);
 
@@ -2900,7 +2935,7 @@
             }
             switch (alt23) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:29: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:29: SEMICOLON
                     {
                     SEMICOLON63=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1219); if (failed) return retval;
@@ -2912,7 +2947,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:393:3: ( template_slot )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:428:3: ( template_slot )+
             int cnt24=0;
             loop24:
             do {
@@ -2926,7 +2961,7 @@
 
                 switch (alt24) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:393:3: template_slot
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:428:3: template_slot
             	    {
             	    pushFollow(FOLLOW_template_slot_in_template1224);
             	    template_slot64=template_slot();
@@ -2951,7 +2986,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:394:7: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:7: ( SEMICOLON )?
             int alt25=2;
             int LA25_0 = input.LA(1);
 
@@ -2960,7 +2995,7 @@
             }
             switch (alt25) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:394:7: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:7: SEMICOLON
                     {
                     SEMICOLON66=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1231); if (failed) return retval;
@@ -2984,9 +3019,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 395:3: -> ^( template_key template_id ( template_slot )+ END )
+            // 430:3: -> ^( template_key template_id ( template_slot )+ END )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:395:6: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_template_key.nextNode(), root_1);
@@ -3037,7 +3072,7 @@
     };
 
     // $ANTLR start template_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398: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:433: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);
@@ -3051,7 +3086,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:399: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:434:2: (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] )
             int alt26=2;
             int LA26_0 = input.LA(1);
 
@@ -3064,13 +3099,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("398:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );", 26, 0, input);
+                    new NoViableAltException("433: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:399:5: id= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:5: id= ID
                     {
                     id=(Token)input.LT(1);
                     match(input,ID,FOLLOW_ID_in_template_id1261); if (failed) return retval;
@@ -3091,7 +3126,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 400:70: -> VT_TEMPLATE_ID[$id]
+                    // 435:70: -> VT_TEMPLATE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, id));
 
@@ -3102,7 +3137,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:5: id= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:5: id= STRING
                     {
                     id=(Token)input.LT(1);
                     match(input,STRING,FOLLOW_STRING_in_template_id1277); if (failed) return retval;
@@ -3123,7 +3158,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 402:70: -> VT_TEMPLATE_ID[$id]
+                    // 437:70: -> VT_TEMPLATE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, id));
 
@@ -3158,7 +3193,7 @@
     };
 
     // $ANTLR start template_slot
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:405: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:440: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);
@@ -3176,8 +3211,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:406: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:406:5: data_type slot_id ( SEMICOLON )?
+            // /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 )?
             {
             pushFollow(FOLLOW_data_type_in_template_slot1297);
             data_type67=data_type();
@@ -3189,7 +3224,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:406:23: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:23: ( SEMICOLON )?
             int alt27=2;
             int LA27_0 = input.LA(1);
 
@@ -3198,7 +3233,7 @@
             }
             switch (alt27) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:23: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:23: SEMICOLON
                     {
                     SEMICOLON69=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot1301); if (failed) return retval;
@@ -3222,9 +3257,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 407:3: -> ^( VT_SLOT data_type slot_id )
+            // 442:3: -> ^( VT_SLOT data_type slot_id )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:407:6: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_SLOT, "VT_SLOT"), root_1);
@@ -3264,7 +3299,7 @@
     };
 
     // $ANTLR start slot_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:410: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:445: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);
@@ -3277,8 +3312,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:410:9: (id= ID -> VT_SLOT_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:410:11: id= ID
+            // /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
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_slot_id1326); if (failed) return retval;
@@ -3296,7 +3331,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 411:3: -> VT_SLOT_ID[$id]
+            // 446:3: -> VT_SLOT_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SLOT_ID, id));
 
@@ -3329,7 +3364,7 @@
     };
 
     // $ANTLR start rule
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414: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:449: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);
@@ -3354,8 +3389,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:417: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:417: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: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
             {
             pushFollow(FOLLOW_rule_key_in_rule1355);
             rule_key70=rule_key();
@@ -3367,12 +3402,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:417:21: ( rule_attributes )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452: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:417:21: rule_attributes
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:21: rule_attributes
                     {
                     pushFollow(FOLLOW_rule_attributes_in_rule1359);
                     rule_attributes72=rule_attributes();
@@ -3385,7 +3420,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:38: ( when_part )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:38: ( when_part )?
             int alt29=2;
             int LA29_0 = input.LA(1);
 
@@ -3394,7 +3429,7 @@
             }
             switch (alt29) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:38: when_part
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:38: when_part
                     {
                     pushFollow(FOLLOW_when_part_in_rule1362);
                     when_part73=when_part();
@@ -3424,21 +3459,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 418:3: -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+            // 453: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:418: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:453: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:418:25: ( rule_attributes )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:453: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:418:42: ( when_part )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:453:42: ( when_part )?
                 if ( stream_when_part.hasNext() ) {
                     adaptor.addChild(root_1, stream_when_part.next());
 
@@ -3481,7 +3516,7 @@
     };
 
     // $ANTLR start when_part
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421: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:456:1: when_part : 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);
@@ -3499,15 +3534,15 @@
         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:422: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:422:4: when_key ( COLON )? normal_lhs_block
+            // /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:422:13: ( COLON )?
+            // /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);
 
@@ -3516,7 +3551,7 @@
             }
             switch (alt30) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:13: COLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:13: COLON
                     {
                     COLON76=(Token)input.LT(1);
                     match(input,COLON,FOLLOW_COLON_in_when_part1396); if (failed) return retval;
@@ -3545,7 +3580,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 423:2: -> when_key normal_lhs_block
+            // 458:2: -> when_key normal_lhs_block
             {
                 adaptor.addChild(root_0, stream_when_key.next());
                 adaptor.addChild(root_0, stream_normal_lhs_block.next());
@@ -3579,7 +3614,7 @@
     };
 
     // $ANTLR start rule_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:426: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:461: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);
@@ -3593,7 +3628,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:427:2: (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:462:2: (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] )
             int alt31=2;
             int LA31_0 = input.LA(1);
 
@@ -3606,13 +3641,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("426:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );", 31, 0, input);
+                    new NoViableAltException("461:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );", 31, 0, input);
 
                 throw nvae;
             }
             switch (alt31) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:5: id= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:462:5: id= ID
                     {
                     id=(Token)input.LT(1);
                     match(input,ID,FOLLOW_ID_in_rule_id1420); if (failed) return retval;
@@ -3633,7 +3668,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 428:66: -> VT_RULE_ID[$id]
+                    // 463:66: -> VT_RULE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, id));
 
@@ -3644,7 +3679,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:5: id= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:5: id= STRING
                     {
                     id=(Token)input.LT(1);
                     match(input,STRING,FOLLOW_STRING_in_rule_id1436); if (failed) return retval;
@@ -3665,7 +3700,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 430:66: -> VT_RULE_ID[$id]
+                    // 465:66: -> VT_RULE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, id));
 
@@ -3700,7 +3735,7 @@
     };
 
     // $ANTLR start rule_attributes
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:433: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:468: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);
@@ -3723,14 +3758,14 @@
         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:434: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:434: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: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:434:4: ( attributes_key COLON )?
+            // /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);
 
-            if ( (LA32_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(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))))) {
+            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 ( (LA32_1==COLON) && ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES)))) {
@@ -3739,7 +3774,7 @@
             }
             switch (alt32) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:6: attributes_key COLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:6: attributes_key COLON
                     {
                     pushFollow(FOLLOW_attributes_key_in_rule_attributes1457);
                     attributes_key78=attributes_key();
@@ -3761,67 +3796,16 @@
             _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:434:45: ( ( COMMA )? attr= rule_attribute )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:45: ( ( COMMA )? attr= rule_attribute )*
             loop34:
             do {
                 int alt34=2;
-                int LA34_0 = input.LA(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))||(validateIdentifierKey(Drool!
 sSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
-                    int LA34_1 = input.LA(2);
-
-                    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) && validateLT(2,!
  "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
-                        alt34=1;
-                    }
-                    else if ( (LA34_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
-                        alt34=1;
-                    }
-                    else if ( (LA34_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {
-                        int LA34_6 = input.LA(3);
-
-                        if ( (LA34_6==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {
-                            int LA34_10 = input.LA(4);
-
-                            if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {
-                                alt34=1;
-                            }
-
-
-                        }
-                        else if ( (LA34_6==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {
-                            int LA34_11 = input.LA(4);
-
-                            if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {
-                                alt34=1;
-                            }
-
-
-                        }
-                        else if ( ((LA34_6>=VT_COMPILATION_UNIT && LA34_6<=SEMICOLON)||(LA34_6>=DOT && LA34_6<=STRING)||(LA34_6>=COMMA && LA34_6<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
-                            alt34=1;
-                        }
-
-
-                    }
-                    else if ( (LA34_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {
-                        alt34=1;
-                    }
-                    else if ( (LA34_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {
-                        alt34=1;
-                    }
-
-
-                }
-                else if ( (LA34_0==COMMA) ) {
-                    alt34=1;
-                }
-
-
+                alt34 = dfa34.predict(input);
                 switch (alt34) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:47: ( COMMA )? attr= rule_attribute
+            	    // /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:434:47: ( COMMA )?
+            	    // /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);
 
@@ -3830,7 +3814,7 @@
             	    }
             	    switch (alt33) {
             	        case 1 :
-            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:47: COMMA
+            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:47: COMMA
             	            {
             	            COMMA81=(Token)input.LT(1);
             	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1468); if (failed) return retval;
@@ -3868,14 +3852,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 435:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+            // 470:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:435:6: ^( 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 )+ )
                 {
                 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:435:27: ( attributes_key )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:470:27: ( attributes_key )?
                 if ( stream_attributes_key.hasNext() ) {
                     adaptor.addChild(root_1, stream_attributes_key.next());
 
@@ -3922,7 +3906,7 @@
     };
 
     // $ANTLR start rule_attribute
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:438: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: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 );
     public final rule_attribute_return rule_attribute() throws RecognitionException {
         rule_attribute_return retval = new rule_attribute_return();
         retval.start = input.LT(1);
@@ -3957,7 +3941,7 @@
 
          pushParaphrases(DroolsParaphareseTypes.RULE_ATTRIBUTE); 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:2: ( 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: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);
 
@@ -3994,7 +3978,7 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("438: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("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);
 
                                 throw nvae;
                             }
@@ -4008,7 +3992,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("438: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("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);
 
                             throw nvae;
                         }
@@ -4016,13 +4000,16 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("438: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("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);
 
                         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_3 = input.LA(3);
+                    int LA35_4 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {
                         alt35=1;
@@ -4033,24 +4020,21 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("438: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, 3, input);
+                            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);
 
                         throw nvae;
                     }
                 }
-                else if ( (LA35_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
-                    alt35=1;
-                }
-                else if ( (LA35_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {
-                    alt35=12;
-                }
                 else if ( (LA35_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {
                     alt35=9;
                 }
+                else if ( (LA35_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
+                    alt35=1;
+                }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("438: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("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);
 
                     throw nvae;
                 }
@@ -4058,13 +4042,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("438: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("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);
 
                 throw nvae;
             }
             switch (alt35) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:4: salience
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:4: salience
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4077,7 +4061,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:442:4: no_loop
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:477:4: no_loop
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4090,7 +4074,7 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:443:4: agenda_group
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:478:4: agenda_group
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4103,7 +4087,7 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:4: duration
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:4: duration
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4116,7 +4100,7 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:4: activation_group
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:480:4: activation_group
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4129,7 +4113,7 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:446:4: auto_focus
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:481:4: auto_focus
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4142,7 +4126,7 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:447:4: date_effective
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:4: date_effective
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4155,7 +4139,7 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:448:4: date_expires
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:4: date_expires
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4168,7 +4152,7 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:449:4: enabled
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:4: enabled
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4181,7 +4165,7 @@
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:450:4: ruleflow_group
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:4: ruleflow_group
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4194,7 +4178,7 @@
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:4: lock_on_active
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:4: lock_on_active
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4207,7 +4191,7 @@
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:4: dialect
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:4: dialect
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4247,7 +4231,7 @@
     };
 
     // $ANTLR start date_effective
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:455:1: date_effective : date_effective_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:490: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);
@@ -4261,8 +4245,8 @@
         Object STRING95_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:2: ( date_effective_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:4: date_effective_key STRING
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4303,7 +4287,7 @@
     };
 
     // $ANTLR start date_expires
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:459:1: date_expires : date_expires_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494: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);
@@ -4317,8 +4301,8 @@
         Object STRING97_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:2: ( date_expires_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:4: date_expires_key STRING
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4359,7 +4343,7 @@
     };
 
     // $ANTLR start enabled
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:463:1: enabled : enabled_key BOOL ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:498:1: enabled : enabled_key BOOL ;
     public final enabled_return enabled() throws RecognitionException {
         enabled_return retval = new enabled_return();
         retval.start = input.LT(1);
@@ -4373,8 +4357,8 @@
         Object BOOL99_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:2: ( enabled_key BOOL )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:4: enabled_key BOOL
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4415,7 +4399,7 @@
     };
 
     // $ANTLR start salience
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:467:1: salience : salience_key ( INT | paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502: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);
@@ -4431,8 +4415,8 @@
         Object INT101_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:2: ( salience_key ( INT | paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:4: salience_key ( INT | paren_chunk )
+            // /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 )
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4441,7 +4425,7 @@
             _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:469:3: ( INT | paren_chunk )
+            // /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);
 
@@ -4454,13 +4438,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("469:3: ( INT | paren_chunk )", 36, 0, input);
+                    new NoViableAltException("504:3: ( INT | paren_chunk )", 36, 0, input);
 
                 throw nvae;
             }
             switch (alt36) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:5: INT
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:5: INT
                     {
                     INT101=(Token)input.LT(1);
                     match(input,INT,FOLLOW_INT_in_salience1645); if (failed) return retval;
@@ -4472,7 +4456,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:470:5: paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:505:5: paren_chunk
                     {
                     pushFollow(FOLLOW_paren_chunk_in_salience1654);
                     paren_chunk102=paren_chunk();
@@ -4511,7 +4495,7 @@
     };
 
     // $ANTLR start no_loop
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:474:1: no_loop : no_loop_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509: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);
@@ -4525,8 +4509,8 @@
         Object BOOL104_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:2: ( no_loop_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:4: no_loop_key ( BOOL )?
+            // /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 )?
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4535,7 +4519,7 @@
             _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:475:17: ( BOOL )?
+            // /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);
 
@@ -4544,7 +4528,7 @@
             }
             switch (alt37) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:17: BOOL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:510:17: BOOL
                     {
                     BOOL104=(Token)input.LT(1);
                     match(input,BOOL,FOLLOW_BOOL_in_no_loop1673); if (failed) return retval;
@@ -4584,7 +4568,7 @@
     };
 
     // $ANTLR start auto_focus
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:478:1: auto_focus : auto_focus_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513: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);
@@ -4598,8 +4582,8 @@
         Object BOOL106_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:2: ( auto_focus_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:4: auto_focus_key ( BOOL )?
+            // /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 )?
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4608,7 +4592,7 @@
             _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:479:20: ( BOOL )?
+            // /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);
 
@@ -4617,7 +4601,7 @@
             }
             switch (alt38) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:20: BOOL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:20: BOOL
                     {
                     BOOL106=(Token)input.LT(1);
                     match(input,BOOL,FOLLOW_BOOL_in_auto_focus1688); if (failed) return retval;
@@ -4657,7 +4641,7 @@
     };
 
     // $ANTLR start activation_group
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:1: activation_group : activation_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517: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);
@@ -4671,8 +4655,8 @@
         Object STRING108_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:2: ( activation_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:4: activation_group_key STRING
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4713,7 +4697,7 @@
     };
 
     // $ANTLR start ruleflow_group
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:1: ruleflow_group : ruleflow_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521: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);
@@ -4727,8 +4711,8 @@
         Object STRING110_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:2: ( ruleflow_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:4: ruleflow_group_key STRING
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4769,7 +4753,7 @@
     };
 
     // $ANTLR start agenda_group
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:490:1: agenda_group : agenda_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:525: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);
@@ -4783,8 +4767,8 @@
         Object STRING112_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:491:2: ( agenda_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:491:4: agenda_group_key STRING
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4825,7 +4809,7 @@
     };
 
     // $ANTLR start duration
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:1: duration : duration_key INT ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:1: duration : duration_key INT ;
     public final duration_return duration() throws RecognitionException {
         duration_return retval = new duration_return();
         retval.start = input.LT(1);
@@ -4839,8 +4823,8 @@
         Object INT114_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:2: ( duration_key INT )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:4: duration_key INT
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4881,7 +4865,7 @@
     };
 
     // $ANTLR start dialect
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:498:1: dialect : dialect_key STRING ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:533:1: dialect : dialect_key STRING ;
     public final dialect_return dialect() throws RecognitionException {
         dialect_return retval = new dialect_return();
         retval.start = input.LT(1);
@@ -4895,8 +4879,8 @@
         Object STRING116_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:499:2: ( dialect_key STRING )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:499:4: dialect_key STRING
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4937,7 +4921,7 @@
     };
 
     // $ANTLR start lock_on_active
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502: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:537: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);
@@ -4951,8 +4935,8 @@
         Object BOOL118_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:2: ( lock_on_active_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:4: lock_on_active_key ( BOOL )?
+            // /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 )?
             {
             root_0 = (Object)adaptor.nil();
 
@@ -4961,7 +4945,7 @@
             _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:503:24: ( BOOL )?
+            // /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);
 
@@ -4970,7 +4954,7 @@
             }
             switch (alt39) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:24: BOOL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:24: BOOL
                     {
                     BOOL118=(Token)input.LT(1);
                     match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1785); if (failed) return retval;
@@ -5010,7 +4994,7 @@
     };
 
     // $ANTLR start normal_lhs_block
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506: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:541: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);
@@ -5022,10 +5006,10 @@
 
         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:507:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:507:4: ( lhs )*
+            // /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:507:4: ( lhs )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:4: ( lhs )*
             loop40:
             do {
                 int alt40=2;
@@ -5038,7 +5022,7 @@
 
                 switch (alt40) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:507:4: lhs
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:4: lhs
             	    {
             	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1797);
             	    lhs119=lhs();
@@ -5066,14 +5050,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 508:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
+            // 543:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:5: ^( 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 )* )
                 {
                 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:508:23: ( lhs )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:23: ( lhs )*
                 while ( stream_lhs.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs.next());
 
@@ -5112,7 +5096,7 @@
     };
 
     // $ANTLR start lhs
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:511:1: lhs : lhs_or ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546:1: lhs : lhs_or ;
     public final lhs_return lhs() throws RecognitionException {
         lhs_return retval = new lhs_return();
         retval.start = input.LT(1);
@@ -5124,8 +5108,8 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:511:5: ( lhs_or )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:511:7: lhs_or
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
@@ -5160,7 +5144,7 @@
     };
 
     // $ANTLR start lhs_or
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514: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: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 ) )* );
     public final lhs_or_return lhs_or() throws RecognitionException {
         lhs_or_return retval = new lhs_or_return();
         retval.start = input.LT(1);
@@ -5193,7 +5177,7 @@
         	Token orToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517: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 ) )* )
+            // /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);
 
@@ -5209,7 +5193,7 @@
                         alt44=2;
                         }
                         break;
-                    case ID:
+                    case LEFT_PAREN:
                         {
                         int LA44_4 = input.LA(4);
 
@@ -5222,13 +5206,13 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("514: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("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);
 
                             throw nvae;
                         }
                         }
                         break;
-                    case LEFT_PAREN:
+                    case ID:
                         {
                         int LA44_5 = input.LA(4);
 
@@ -5241,7 +5225,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("514: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("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);
 
                             throw nvae;
                         }
@@ -5250,7 +5234,7 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("514: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("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);
 
                         throw nvae;
                     }
@@ -5262,7 +5246,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("514: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("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);
 
                     throw nvae;
                 }
@@ -5273,13 +5257,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("514: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("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);
 
                 throw nvae;
             }
             switch (alt44) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517: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:552: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;
@@ -5290,7 +5274,7 @@
                     _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:517:48: ( lhs_and )+
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:48: ( lhs_and )+
                     int cnt41=0;
                     loop41:
                     do {
@@ -5304,7 +5288,7 @@
 
                         switch (alt41) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:48: lhs_and
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:48: lhs_and
                     	    {
                     	    pushFollow(FOLLOW_lhs_and_in_lhs_or1845);
                     	    lhs_and122=lhs_and();
@@ -5341,9 +5325,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 518:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                    // 553: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:518: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:553: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);
@@ -5368,10 +5352,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:519: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 ) ( ( 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:519:4: ( lhs_and -> lhs_and )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:519:5: 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
                     {
                     pushFollow(FOLLOW_lhs_and_in_lhs_or1869);
                     lhs_and124=lhs_and();
@@ -5390,7 +5374,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 519:13: -> lhs_and
+                    // 554:13: -> lhs_and
                     {
                         adaptor.addChild(root_0, stream_lhs_and.next());
 
@@ -5400,7 +5384,7 @@
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:3: ( ( 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:555:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
                     loop43:
                     do {
                         int alt43=2;
@@ -5428,9 +5412,9 @@
 
                         switch (alt43) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520: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: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:520:28: (value= or_key | pipe= DOUBLE_PIPE )
+                    	    // /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);
 
@@ -5443,13 +5427,13 @@
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("520:28: (value= or_key | pipe= DOUBLE_PIPE )", 42, 0, input);
+                    	            new NoViableAltException("555:28: (value= or_key | pipe= DOUBLE_PIPE )", 42, 0, input);
 
                     	        throw nvae;
                     	    }
                     	    switch (alt42) {
                     	        case 1 :
-                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:29: value= or_key
+                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:29: value= or_key
                     	            {
                     	            pushFollow(FOLLOW_or_key_in_lhs_or1891);
                     	            value=or_key();
@@ -5463,7 +5447,7 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:69: pipe= DOUBLE_PIPE
+                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:69: pipe= DOUBLE_PIPE
                     	            {
                     	            pipe=(Token)input.LT(1);
                     	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1898); if (failed) return retval;
@@ -5495,9 +5479,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 521:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	    // 556: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:521: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:556: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);
@@ -5548,7 +5532,7 @@
     };
 
     // $ANTLR start lhs_and
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524: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: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 ) )* );
     public final lhs_and_return lhs_and() throws RecognitionException {
         lhs_and_return retval = new lhs_and_return();
         retval.start = input.LT(1);
@@ -5581,14 +5565,17 @@
         	Token andToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527: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 ) )* )
+            // /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);
 
             if ( (LA48_0==LEFT_PAREN) ) {
                 int LA48_1 = input.LA(2);
 
-                if ( (LA48_1==ID) ) {
+                if ( (LA48_1==LEFT_PAREN) ) {
+                    alt48=2;
+                }
+                else if ( (LA48_1==ID) ) {
                     switch ( input.LA(3) ) {
                     case DOT:
                     case COLON:
@@ -5600,7 +5587,7 @@
                     case LEFT_PAREN:
                         {
                         switch ( input.LA(4) ) {
-                        case LEFT_PAREN:
+                        case ID:
                             {
                             int LA48_6 = input.LA(5);
 
@@ -5613,13 +5600,13 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("524: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("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);
 
                                 throw nvae;
                             }
                             }
                             break;
-                        case ID:
+                        case LEFT_PAREN:
                             {
                             int LA48_7 = input.LA(5);
 
@@ -5632,7 +5619,7 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("524: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("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);
 
                                 throw nvae;
                             }
@@ -5768,7 +5755,7 @@
                         default:
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("524: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("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);
 
                             throw nvae;
                         }
@@ -5788,7 +5775,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("524: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("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);
 
                             throw nvae;
                         }
@@ -5797,19 +5784,16 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("524: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("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);
 
                         throw nvae;
                     }
 
                 }
-                else if ( (LA48_1==LEFT_PAREN) ) {
-                    alt48=2;
-                }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("524: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("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);
 
                     throw nvae;
                 }
@@ -5820,13 +5804,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("524: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("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);
 
                 throw nvae;
             }
             switch (alt48) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527: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:562: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;
@@ -5837,7 +5821,7 @@
                     _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:527:51: ( lhs_unary )+
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:51: ( lhs_unary )+
                     int cnt45=0;
                     loop45:
                     do {
@@ -5851,7 +5835,7 @@
 
                         switch (alt45) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:51: lhs_unary
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:51: lhs_unary
                     	    {
                     	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1947);
                     	    lhs_unary127=lhs_unary();
@@ -5888,9 +5872,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 528:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                    // 563: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:528: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:563: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);
@@ -5915,10 +5899,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529: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 ) ( ( 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:529:4: ( lhs_unary -> lhs_unary )
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:5: 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
                     {
                     pushFollow(FOLLOW_lhs_unary_in_lhs_and1971);
                     lhs_unary129=lhs_unary();
@@ -5937,7 +5921,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 529:15: -> lhs_unary
+                    // 564:15: -> lhs_unary
                     {
                         adaptor.addChild(root_0, stream_lhs_unary.next());
 
@@ -5947,7 +5931,7 @@
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:3: ( ( 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:565:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
                     loop47:
                     do {
                         int alt47=2;
@@ -5975,9 +5959,9 @@
 
                         switch (alt47) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530: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: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:530:30: (value= and_key | amper= DOUBLE_AMPER )
+                    	    // /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);
 
@@ -5990,13 +5974,13 @@
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("530:30: (value= and_key | amper= DOUBLE_AMPER )", 46, 0, input);
+                    	            new NoViableAltException("565:30: (value= and_key | amper= DOUBLE_AMPER )", 46, 0, input);
 
                     	        throw nvae;
                     	    }
                     	    switch (alt46) {
                     	        case 1 :
-                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:31: value= and_key
+                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:31: value= and_key
                     	            {
                     	            pushFollow(FOLLOW_and_key_in_lhs_and1993);
                     	            value=and_key();
@@ -6010,7 +5994,7 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:73: amper= DOUBLE_AMPER
+                    	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:73: amper= DOUBLE_AMPER
                     	            {
                     	            amper=(Token)input.LT(1);
                     	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and2000); if (failed) return retval;
@@ -6042,9 +6026,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 531:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	    // 566: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:531: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:566: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);
@@ -6095,7 +6079,7 @@
     };
 
     // $ANTLR start lhs_unary
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534: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: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 )? ;
     public final lhs_unary_return lhs_unary() throws RecognitionException {
         lhs_unary_return retval = new lhs_unary_return();
         retval.start = input.LT(1);
@@ -6123,12 +6107,12 @@
         Object SEMICOLON139_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536: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:536: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: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 )?
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
+            // /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);
 
@@ -6153,7 +6137,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("536:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 49, 1, input);
+                        new NoViableAltException("571:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 49, 1, input);
 
                     throw nvae;
                 }
@@ -6164,13 +6148,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("536:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 49, 0, input);
+                    new NoViableAltException("571:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 49, 0, input);
 
                 throw nvae;
             }
             switch (alt49) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:6: lhs_exist
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:6: lhs_exist
                     {
                     pushFollow(FOLLOW_lhs_exist_in_lhs_unary2043);
                     lhs_exist131=lhs_exist();
@@ -6181,7 +6165,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:537:5: lhs_not
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:5: lhs_not
                     {
                     pushFollow(FOLLOW_lhs_not_in_lhs_unary2049);
                     lhs_not132=lhs_not();
@@ -6192,7 +6176,7 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:5: lhs_eval
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:5: lhs_eval
                     {
                     pushFollow(FOLLOW_lhs_eval_in_lhs_unary2055);
                     lhs_eval133=lhs_eval();
@@ -6203,7 +6187,7 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:539:5: lhs_forall
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:574:5: lhs_forall
                     {
                     pushFollow(FOLLOW_lhs_forall_in_lhs_unary2061);
                     lhs_forall134=lhs_forall();
@@ -6214,7 +6198,7 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:540:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:575:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
                     LEFT_PAREN135=(Token)input.LT(1);
                     match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary2067); if (failed) return retval;
@@ -6233,7 +6217,7 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:541:5: pattern_source
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:5: pattern_source
                     {
                     pushFollow(FOLLOW_pattern_source_in_lhs_unary2078);
                     pattern_source138=pattern_source();
@@ -6246,7 +6230,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:3: ( ( SEMICOLON )=> SEMICOLON )?
+            // /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);
 
@@ -6259,7 +6243,7 @@
             }
             switch (alt50) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:4: ( SEMICOLON )=> SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:4: ( SEMICOLON )=> SEMICOLON
                     {
                     SEMICOLON139=(Token)input.LT(1);
                     match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary2092); if (failed) return retval;
@@ -6295,7 +6279,7 @@
     };
 
     // $ANTLR start lhs_exist
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546: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: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 )? ) ;
     public final lhs_exist_return lhs_exist() throws RecognitionException {
         lhs_exist_return retval = new lhs_exist_return();
         retval.start = input.LT(1);
@@ -6321,20 +6305,20 @@
         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:547: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:547: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: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 )
             {
             pushFollow(FOLLOW_exists_key_in_lhs_exist2106);
             exists_key140=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:548:10: ( ( 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: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) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548: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:583:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
                     pushFollow(FOLLOW_lhs_or_in_lhs_exist2130);
                     lhs_or141=lhs_or();
@@ -6345,7 +6329,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:549:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:584: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;
@@ -6364,7 +6348,7 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:550:12: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:585:12: lhs_pattern
                     {
                     pushFollow(FOLLOW_lhs_pattern_in_lhs_exist2154);
                     lhs_pattern145=lhs_pattern();
@@ -6389,26 +6373,26 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 552:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            // 587: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:552: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:587: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:552:26: ( lhs_or )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587: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:552:34: ( lhs_pattern )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587: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:552:47: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587:47: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -6447,7 +6431,7 @@
     };
 
     // $ANTLR start lhs_not
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555: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: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 )? ) ;
     public final lhs_not_return lhs_not() throws RecognitionException {
         lhs_not_return retval = new lhs_not_return();
         retval.start = input.LT(1);
@@ -6473,20 +6457,20 @@
         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:555: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:555: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: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 )
             {
             pushFollow(FOLLOW_not_key_in_lhs_not2200);
             not_key146=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:556:3: ( ( 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: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) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556: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:591:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
                     pushFollow(FOLLOW_lhs_or_in_lhs_not2217);
                     lhs_or147=lhs_or();
@@ -6497,7 +6481,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:557:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:592: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;
@@ -6516,7 +6500,7 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:558:6: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:6: lhs_pattern
                     {
                     pushFollow(FOLLOW_lhs_pattern_in_lhs_not2236);
                     lhs_pattern151=lhs_pattern();
@@ -6541,26 +6525,26 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 559:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            // 594: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:559: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:594: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:559:23: ( lhs_or )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594: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:559:31: ( lhs_pattern )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594: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:559:44: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:44: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -6599,7 +6583,7 @@
     };
 
     // $ANTLR start lhs_eval
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562: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:597: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);
@@ -6614,8 +6598,8 @@
         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:563: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:563:4: ev= eval_key pc= paren_chunk
+            // /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
             {
             pushFollow(FOLLOW_eval_key_in_lhs_eval2275);
             ev=eval_key();
@@ -6643,9 +6627,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 566:3: -> ^( eval_key paren_chunk )
+            // 601:3: -> ^( eval_key paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:6: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
@@ -6684,7 +6668,7 @@
     };
 
     // $ANTLR start lhs_forall
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569: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:604: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);
@@ -6705,8 +6689,8 @@
         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:570: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:570: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: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
             {
             pushFollow(FOLLOW_forall_key_in_lhs_forall2303);
             forall_key152=forall_key();
@@ -6717,7 +6701,7 @@
             match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2305); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN153);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:26: ( lhs_pattern )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:26: ( lhs_pattern )+
             int cnt53=0;
             loop53:
             do {
@@ -6731,7 +6715,7 @@
 
                 switch (alt53) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:26: lhs_pattern
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:26: lhs_pattern
             	    {
             	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2307);
             	    lhs_pattern154=lhs_pattern();
@@ -6768,9 +6752,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 571:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+            // 606:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:6: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_forall_key.nextNode(), root_1);
@@ -6817,7 +6801,7 @@
     };
 
     // $ANTLR start pattern_source
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:574: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:609: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);
@@ -6841,8 +6825,8 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576: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:576: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: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 ) )?
             {
             root_0 = (Object)adaptor.nil();
 
@@ -6851,7 +6835,7 @@
             _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:577:3: ( over_clause )?
+            // /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);
 
@@ -6860,7 +6844,7 @@
             }
             switch (alt54) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:3: over_clause
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:3: over_clause
                     {
                     pushFollow(FOLLOW_over_clause_in_pattern_source2346);
                     over_clause157=over_clause();
@@ -6873,43 +6857,29 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:3: ( 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:613:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
             int alt56=2;
             int LA56_0 = input.LA(1);
 
             if ( (LA56_0==ID) ) {
                 int LA56_1 = input.LA(2);
 
-                if ( (LA56_1==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                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 ( (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;
                     }
-                    else if ( (LA56_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                    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);
 
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                            alt56=1;
-                        }
-                    }
-                    else if ( (LA56_3==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                        int LA56_7 = input.LA(4);
-
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                            alt56=1;
-                        }
-                    }
-                    else if ( (LA56_3==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                        int LA56_8 = input.LA(4);
-
-                        if ( (LA56_8==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
+                        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 ( (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 ( (LA56_11==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
+                                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 ( (LA56_14==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
@@ -6950,18 +6920,32 @@
                             }
                         }
                     }
+                    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);
+
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
+                            alt56=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);
+
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
+                            alt56=1;
+                        }
+                    }
                 }
             }
             switch (alt56) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:579: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:614:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
                     {
                     pushFollow(FOLLOW_from_key_in_pattern_source2356);
                     from_key158=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:580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    // /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);
 
@@ -6986,7 +6970,7 @@
                                 else {
                                     if (backtracking>0) {failed=true; return retval;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 5, input);
+                                        new NoViableAltException("615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 5, input);
 
                                     throw nvae;
                                 }
@@ -7008,7 +6992,7 @@
                                 else {
                                     if (backtracking>0) {failed=true; return retval;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 6, input);
+                                        new NoViableAltException("615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 6, input);
 
                                     throw nvae;
                                 }
@@ -7144,7 +7128,7 @@
                             default:
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 3, input);
+                                    new NoViableAltException("615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 3, input);
 
                                 throw nvae;
                             }
@@ -7156,7 +7140,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 1, input);
+                                new NoViableAltException("615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 1, input);
 
                             throw nvae;
                         }
@@ -7164,13 +7148,13 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 0, input);
+                            new NoViableAltException("615:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 0, input);
 
                         throw nvae;
                     }
                     switch (alt55) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:14: accumulate_statement
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:615:14: accumulate_statement
                             {
                             pushFollow(FOLLOW_accumulate_statement_in_pattern_source2372);
                             accumulate_statement159=accumulate_statement();
@@ -7181,7 +7165,7 @@
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:581:15: collect_statement
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:616:15: collect_statement
                             {
                             pushFollow(FOLLOW_collect_statement_in_pattern_source2388);
                             collect_statement160=collect_statement();
@@ -7192,7 +7176,7 @@
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:582:15: entrypoint_statement
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:15: entrypoint_statement
                             {
                             pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2405);
                             entrypoint_statement161=entrypoint_statement();
@@ -7203,7 +7187,7 @@
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:15: from_source
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:15: from_source
                             {
                             pushFollow(FOLLOW_from_source_in_pattern_source2421);
                             from_source162=from_source();
@@ -7248,7 +7232,7 @@
     };
 
     // $ANTLR start over_clause
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588: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:623: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);
@@ -7266,8 +7250,8 @@
         Object COMMA165_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:2: ( OVER over_elements ( COMMA over_elements )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:4: OVER over_elements ( COMMA over_elements )*
+            // /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 )*
             {
             root_0 = (Object)adaptor.nil();
 
@@ -7282,7 +7266,7 @@
             _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:589:24: ( COMMA over_elements )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624:24: ( COMMA over_elements )*
             loop57:
             do {
                 int alt57=2;
@@ -7307,7 +7291,7 @@
 
                 switch (alt57) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:25: COMMA over_elements
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624:25: COMMA over_elements
             	    {
             	    COMMA165=(Token)input.LT(1);
             	    match(input,COMMA,FOLLOW_COMMA_in_over_clause2455); if (failed) return retval;
@@ -7351,7 +7335,7 @@
     };
 
     // $ANTLR start over_elements
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:592: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:627: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);
@@ -7371,8 +7355,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:593: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:593:4: ID COLON ID paren_chunk
+            // /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
             {
             ID167=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_over_elements2471); if (failed) return retval;
@@ -7403,9 +7387,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 594:2: -> ^( VT_BEHAVIOR ID ID paren_chunk )
+            // 629:2: -> ^( VT_BEHAVIOR ID ID paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:5: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BEHAVIOR, "VT_BEHAVIOR"), root_1);
@@ -7446,7 +7430,7 @@
     };
 
     // $ANTLR start accumulate_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597: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: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 ) ;
     public final accumulate_statement_return accumulate_statement() throws RecognitionException {
         accumulate_statement_return retval = new accumulate_statement_return();
         retval.start = input.LT(1);
@@ -7476,8 +7460,8 @@
         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:598: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:598: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: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
             {
             pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2501);
             accumulate_key171=accumulate_key();
@@ -7493,7 +7477,7 @@
             _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:599:21: ( COMMA )?
+            // /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);
 
@@ -7502,7 +7486,7 @@
             }
             switch (alt58) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:599:21: COMMA
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:21: COMMA
                     {
                     COMMA174=(Token)input.LT(1);
                     match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2509); if (failed) return retval;
@@ -7514,12 +7498,12 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600:3: ( accumulate_init_clause | accumulate_id_clause )
+            // /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) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600:5: accumulate_init_clause
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:5: accumulate_init_clause
                     {
                     pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2517);
                     accumulate_init_clause175=accumulate_init_clause();
@@ -7530,7 +7514,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:601:5: accumulate_id_clause
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:636:5: accumulate_id_clause
                     {
                     pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2523);
                     accumulate_id_clause176=accumulate_id_clause();
@@ -7559,21 +7543,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 604:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+            // 639: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:604: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:639: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:604:30: ( accumulate_init_clause )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639: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:604:54: ( accumulate_id_clause )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:54: ( accumulate_id_clause )?
                 if ( stream_accumulate_id_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_id_clause.next());
 
@@ -7613,7 +7597,7 @@
     };
 
     // $ANTLR start accumulate_init_clause
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:607: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: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) ) ;
     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);
@@ -7650,8 +7634,8 @@
         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:608: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:608: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: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
             {
             pushFollow(FOLLOW_init_key_in_accumulate_init_clause2560);
             init_key178=init_key();
@@ -7663,7 +7647,7 @@
             _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:609:18: ( COMMA )?
+            // /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);
 
@@ -7672,7 +7656,7 @@
             }
             switch (alt60) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609:18: COMMA
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:644:18: COMMA
                     {
                     COMMA179=(Token)input.LT(1);
                     match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2567); if (failed) return retval;
@@ -7694,7 +7678,7 @@
             _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:610:29: ( COMMA )?
+            // /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);
 
@@ -7703,7 +7687,7 @@
             }
             switch (alt61) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:610:29: COMMA
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:29: COMMA
                     {
                     COMMA181=(Token)input.LT(1);
                     match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2577); if (failed) return retval;
@@ -7715,12 +7699,12 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
+            // /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) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:4: reverse_key pc3= paren_chunk ( COMMA )?
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:4: reverse_key pc3= paren_chunk ( COMMA )?
                     {
                     pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2583);
                     reverse_key182=reverse_key();
@@ -7732,7 +7716,7 @@
                     _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:611:32: ( COMMA )?
+                    // /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);
 
@@ -7741,7 +7725,7 @@
                     }
                     switch (alt62) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:32: COMMA
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:32: COMMA
                             {
                             COMMA183=(Token)input.LT(1);
                             match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2589); if (failed) return retval;
@@ -7785,14 +7769,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 613:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+            // 648: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:613: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:648: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:613:33: ^( init_key $pc1)
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:33: ^( init_key $pc1)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_init_key.nextNode(), root_2);
@@ -7801,7 +7785,7 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:50: ^( action_key $pc2)
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:50: ^( action_key $pc2)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_action_key.nextNode(), root_2);
@@ -7810,9 +7794,9 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:69: ( ^( reverse_key $pc3) )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648: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:613:69: ^( reverse_key $pc3)
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:69: ^( reverse_key $pc3)
                     {
                     Object root_2 = (Object)adaptor.nil();
                     root_2 = (Object)adaptor.becomeRoot(stream_reverse_key.nextNode(), root_2);
@@ -7825,7 +7809,7 @@
                 }
                 stream_pc3.reset();
                 stream_reverse_key.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:90: ^( result_key $pc4)
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:90: ^( result_key $pc4)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_result_key.nextNode(), root_2);
@@ -7867,7 +7851,7 @@
     };
 
     // $ANTLR start accumulate_id_clause
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:616: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:651: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);
@@ -7882,8 +7866,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:617: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:617:4: id= ID text= paren_chunk
+            // /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
             {
             id=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_accumulate_id_clause2648); if (failed) return retval;
@@ -7906,9 +7890,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 618:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+            // 653:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:5: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCUMULATE_ID_CLAUSE, "VT_ACCUMULATE_ID_CLAUSE"), root_1);
@@ -7948,7 +7932,7 @@
     };
 
     // $ANTLR start collect_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621: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:656: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);
@@ -7969,8 +7953,8 @@
         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:622: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:622: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: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
             {
             pushFollow(FOLLOW_collect_key_in_collect_statement2674);
             collect_key185=collect_key();
@@ -8002,9 +7986,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 624:2: -> ^( collect_key pattern_source RIGHT_PAREN )
+            // 659:2: -> ^( collect_key pattern_source RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624:5: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_collect_key.nextNode(), root_1);
@@ -8044,7 +8028,7 @@
     };
 
     // $ANTLR start entrypoint_statement
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627: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:662: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);
@@ -8059,8 +8043,8 @@
         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:628: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:628:4: entry_point_key entrypoint_id
+            // /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
             {
             pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2704);
             entry_point_key189=entry_point_key();
@@ -8084,9 +8068,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 629:2: -> ^( entry_point_key entrypoint_id )
+            // 664:2: -> ^( entry_point_key entrypoint_id )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:629:5: ^( 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 )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_entry_point_key.nextNode(), root_1);
@@ -8125,7 +8109,7 @@
     };
 
     // $ANTLR start entrypoint_id
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632: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:667: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);
@@ -8139,7 +8123,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:633:2: (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:668:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
             int alt64=2;
             int LA64_0 = input.LA(1);
 
@@ -8152,13 +8136,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("632:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 64, 0, input);
+                    new NoViableAltException("667:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 64, 0, input);
 
                 throw nvae;
             }
             switch (alt64) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:5: value= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:668:5: value= ID
                     {
                     value=(Token)input.LT(1);
                     match(input,ID,FOLLOW_ID_in_entrypoint_id2729); if (failed) return retval;
@@ -8176,7 +8160,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 633:14: -> VT_ENTRYPOINT_ID[$value]
+                    // 668:14: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -8187,7 +8171,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:5: value= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:5: value= STRING
                     {
                     value=(Token)input.LT(1);
                     match(input,STRING,FOLLOW_STRING_in_entrypoint_id2742); if (failed) return retval;
@@ -8205,7 +8189,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 634:18: -> VT_ENTRYPOINT_ID[$value]
+                    // 669:18: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -8240,7 +8224,7 @@
     };
 
     // $ANTLR start from_source
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637: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:672: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);
@@ -8258,19 +8242,19 @@
         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:638: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:638: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: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 )?
             {
             ID191=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_from_source2758); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID191);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
+            // /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) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:5: ( LEFT_PAREN )=>args= paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:5: ( LEFT_PAREN )=>args= paren_chunk
                     {
                     pushFollow(FOLLOW_paren_chunk_in_from_source2771);
                     args=paren_chunk();
@@ -8283,7 +8267,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:640:3: ( expression_chain )?
+            // /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);
 
@@ -8292,7 +8276,7 @@
             }
             switch (alt66) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:640:3: expression_chain
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:3: expression_chain
                     {
                     pushFollow(FOLLOW_expression_chain_in_from_source2778);
                     expression_chain192=expression_chain();
@@ -8317,21 +8301,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 641:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+            // 676: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:641: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:676: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:641:25: ( paren_chunk )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676: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:641:38: ( expression_chain )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:38: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -8370,7 +8354,7 @@
     };
 
     // $ANTLR start expression_chain
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:644: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: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 )? ) ;
     public final expression_chain_return expression_chain() throws RecognitionException {
         expression_chain_return retval = new expression_chain_return();
         retval.start = input.LT(1);
@@ -8394,8 +8378,8 @@
         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:645: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:646: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: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 )?
             {
             startToken=(Token)input.LT(1);
             match(input,DOT,FOLLOW_DOT_in_expression_chain2810); if (failed) return retval;
@@ -8405,12 +8389,40 @@
             match(input,ID,FOLLOW_ID_in_expression_chain2812); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID193);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
+            // /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;
-            alt67 = dfa67.predict(input);
+            int LA67_0 = input.LA(1);
+
+            if ( (LA67_0==LEFT_SQUARE) && (synpred9())) {
+                alt67=1;
+            }
+            else if ( (LA67_0==LEFT_PAREN) ) {
+                int LA67_2 = input.LA(2);
+
+                if ( (LA67_2==LEFT_PAREN) ) {
+                    int LA67_4 = input.LA(3);
+
+                    if ( (synpred10()) ) {
+                        alt67=2;
+                    }
+                }
+                else if ( (LA67_2==ID) ) {
+                    int LA67_5 = input.LA(3);
+
+                    if ( (synpred10()) ) {
+                        alt67=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 ( (LA67_2==RIGHT_PAREN) && (synpred10())) {
+                    alt67=2;
+                }
+            }
             switch (alt67) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:6: ( LEFT_SQUARE )=> square_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:6: ( LEFT_SQUARE )=> square_chunk
                     {
                     pushFollow(FOLLOW_square_chunk_in_expression_chain2832);
                     square_chunk194=square_chunk();
@@ -8421,7 +8433,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:6: ( LEFT_PAREN )=> paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:6: ( LEFT_PAREN )=> paren_chunk
                     {
                     pushFollow(FOLLOW_paren_chunk_in_expression_chain2854);
                     paren_chunk195=paren_chunk();
@@ -8434,7 +8446,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:652:4: ( expression_chain )?
+            // /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);
 
@@ -8443,7 +8455,7 @@
             }
             switch (alt68) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:652:4: expression_chain
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:687:4: expression_chain
                     {
                     pushFollow(FOLLOW_expression_chain_in_expression_chain2865);
                     expression_chain196=expression_chain();
@@ -8468,27 +8480,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 653:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+            // 688: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:653: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:688: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:653:45: ( square_chunk )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688: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:653:59: ( paren_chunk )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688: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:653:72: ( expression_chain )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:72: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -8527,7 +8539,7 @@
     };
 
     // $ANTLR start lhs_pattern
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656: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:691: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);
@@ -8542,7 +8554,7 @@
         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:657:2: ( 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:692:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
             int alt69=2;
             int LA69_0 = input.LA(1);
 
@@ -8558,7 +8570,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("656:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 69, 1, input);
+                        new NoViableAltException("691:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 69, 1, input);
 
                     throw nvae;
                 }
@@ -8566,13 +8578,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("656:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 69, 0, input);
+                    new NoViableAltException("691:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 69, 0, input);
 
                 throw nvae;
             }
             switch (alt69) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:4: fact_binding
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: fact_binding
                     {
                     pushFollow(FOLLOW_fact_binding_in_lhs_pattern2898);
                     fact_binding197=fact_binding();
@@ -8591,9 +8603,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 657:17: -> ^( VT_PATTERN fact_binding )
+                    // 692:17: -> ^( VT_PATTERN fact_binding )
                     {
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:20: ^( 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 )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -8610,7 +8622,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:658:4: fact
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:4: fact
                     {
                     pushFollow(FOLLOW_fact_in_lhs_pattern2911);
                     fact198=fact();
@@ -8629,9 +8641,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 658:9: -> ^( VT_PATTERN fact )
+                    // 693:9: -> ^( VT_PATTERN fact )
                     {
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:658:12: ^( VT_PATTERN fact )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:12: ^( VT_PATTERN fact )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -8672,7 +8684,7 @@
     };
 
     // $ANTLR start fact_binding
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:661: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:696: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);
@@ -8696,15 +8708,15 @@
         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:662: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:662: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: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 )
             {
             pushFollow(FOLLOW_label_in_fact_binding2931);
             label199=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:663:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            // /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);
 
@@ -8717,13 +8729,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("663:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 70, 0, input);
+                    new NoViableAltException("698:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 70, 0, input);
 
                 throw nvae;
             }
             switch (alt70) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:5: fact
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:5: fact
                     {
                     pushFollow(FOLLOW_fact_in_fact_binding2937);
                     fact200=fact();
@@ -8734,7 +8746,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
+                    // /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
                     {
                     LEFT_PAREN201=(Token)input.LT(1);
                     match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2944); if (failed) return retval;
@@ -8767,27 +8779,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 666:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+            // 701: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:666: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:701: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:666:30: ( fact )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701: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:666:36: ( fact_binding_expression )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701: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:666:61: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:61: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -8826,7 +8838,7 @@
     };
 
     // $ANTLR start fact_binding_expression
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669: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:704: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);
@@ -8849,11 +8861,11 @@
         	Token orToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672: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:672: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: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:672:5: ( fact -> fact )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:6: 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
             {
             pushFollow(FOLLOW_fact_in_fact_binding_expression2987);
             fact204=fact();
@@ -8872,7 +8884,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 672:11: -> fact
+            // 707:11: -> fact
             {
                 adaptor.addChild(root_0, stream_fact.next());
 
@@ -8882,7 +8894,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:20: ( (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:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
             loop72:
             do {
                 int alt72=2;
@@ -8898,9 +8910,9 @@
 
                 switch (alt72) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672: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 ) fact
             	    {
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:22: (value= or_key | pipe= DOUBLE_PIPE )
+            	    // /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);
 
@@ -8913,13 +8925,13 @@
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        NoViableAltException nvae =
-            	            new NoViableAltException("672:22: (value= or_key | pipe= DOUBLE_PIPE )", 71, 0, input);
+            	            new NoViableAltException("707:22: (value= or_key | pipe= DOUBLE_PIPE )", 71, 0, input);
 
             	        throw nvae;
             	    }
             	    switch (alt71) {
             	        case 1 :
-            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:23: value= or_key
+            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:23: value= or_key
             	            {
             	            pushFollow(FOLLOW_or_key_in_fact_binding_expression2999);
             	            value=or_key();
@@ -8933,7 +8945,7 @@
             	            }
             	            break;
             	        case 2 :
-            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:62: pipe= DOUBLE_PIPE
+            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:62: pipe= DOUBLE_PIPE
             	            {
             	            pipe=(Token)input.LT(1);
             	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3005); if (failed) return retval;
@@ -8965,9 +8977,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 673:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	    // 708: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:673: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:708: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);
@@ -9016,7 +9028,7 @@
     };
 
     // $ANTLR start fact
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676: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:711: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);
@@ -9038,8 +9050,8 @@
         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:679: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:679:4: pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN
+            // /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
             {
             pushFollow(FOLLOW_pattern_type_in_fact3050);
             pattern_type206=pattern_type();
@@ -9050,7 +9062,7 @@
             match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact3052); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN207);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:28: ( constraints )?
+            // /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);
 
@@ -9059,7 +9071,7 @@
             }
             switch (alt73) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:28: constraints
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:28: constraints
                     {
                     pushFollow(FOLLOW_constraints_in_fact3054);
                     constraints208=constraints();
@@ -9088,15 +9100,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 680:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
+            // 715:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:5: ^( 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 )
                 {
                 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:680:28: ( constraints )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:715:28: ( constraints )?
                 if ( stream_constraints.hasNext() ) {
                     adaptor.addChild(root_1, stream_constraints.next());
 
@@ -9139,7 +9151,7 @@
     };
 
     // $ANTLR start constraints
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:1: constraints : constraint ( COMMA constraint )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:718:1: constraints : constraint ( COMMA constraint )* ;
     public final constraints_return constraints() throws RecognitionException {
         constraints_return retval = new constraints_return();
         retval.start = input.LT(1);
@@ -9155,8 +9167,8 @@
         Object COMMA211_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:2: ( constraint ( COMMA constraint )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:4: constraint ( COMMA constraint )*
+            // /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 )*
             {
             root_0 = (Object)adaptor.nil();
 
@@ -9165,7 +9177,7 @@
             _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:684:15: ( COMMA constraint )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:15: ( COMMA constraint )*
             loop74:
             do {
                 int alt74=2;
@@ -9178,7 +9190,7 @@
 
                 switch (alt74) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:17: COMMA constraint
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:17: COMMA constraint
             	    {
             	    COMMA211=(Token)input.LT(1);
             	    match(input,COMMA,FOLLOW_COMMA_in_constraints3086); if (failed) return retval;
@@ -9222,7 +9234,7 @@
     };
 
     // $ANTLR start constraint
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:687:1: constraint : or_constr ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:722:1: constraint : or_constr ;
     public final constraint_return constraint() throws RecognitionException {
         constraint_return retval = new constraint_return();
         retval.start = input.LT(1);
@@ -9234,8 +9246,8 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:2: ( or_constr )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:4: or_constr
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
@@ -9270,7 +9282,7 @@
     };
 
     // $ANTLR start or_constr
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691: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:726: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);
@@ -9286,8 +9298,8 @@
         Object DOUBLE_PIPE215_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: and_constr ( DOUBLE_PIPE and_constr )*
+            // /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 )*
             {
             root_0 = (Object)adaptor.nil();
 
@@ -9296,7 +9308,7 @@
             _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:692:15: ( DOUBLE_PIPE and_constr )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:15: ( DOUBLE_PIPE and_constr )*
             loop75:
             do {
                 int alt75=2;
@@ -9309,7 +9321,7 @@
 
                 switch (alt75) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:17: DOUBLE_PIPE and_constr
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727: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;
@@ -9357,7 +9369,7 @@
     };
 
     // $ANTLR start and_constr
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695: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:730: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);
@@ -9373,8 +9385,8 @@
         Object DOUBLE_AMPER218_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:4: unary_constr ( DOUBLE_AMPER unary_constr )*
+            // /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 )*
             {
             root_0 = (Object)adaptor.nil();
 
@@ -9383,7 +9395,7 @@
             _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:696:17: ( DOUBLE_AMPER unary_constr )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:17: ( DOUBLE_AMPER unary_constr )*
             loop76:
             do {
                 int alt76=2;
@@ -9396,7 +9408,7 @@
 
                 switch (alt76) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:19: DOUBLE_AMPER unary_constr
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731: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;
@@ -9444,7 +9456,7 @@
     };
 
     // $ANTLR start unary_constr
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699: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:734: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);
@@ -9466,7 +9478,7 @@
         Object RIGHT_PAREN225_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701: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:736:2: ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN )
             int alt77=3;
             int LA77_0 = input.LA(1);
 
@@ -9477,7 +9489,7 @@
                     alt77=2;
                 }
                 else if ( (LA77_1==LEFT_PAREN) ) {
-                    int LA77_14 = input.LA(3);
+                    int LA77_4 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.EVAL))) ) {
                         alt77=1;
@@ -9488,7 +9500,7 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("699:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 14, input);
+                            new NoViableAltException("734:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 4, input);
 
                         throw nvae;
                     }
@@ -9496,7 +9508,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("699:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 1, input);
+                        new NoViableAltException("734:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 1, input);
 
                     throw nvae;
                 }
@@ -9507,13 +9519,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("699:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 0, input);
+                    new NoViableAltException("734:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 0, input);
 
                 throw nvae;
             }
             switch (alt77) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:4: eval_key paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:4: eval_key paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -9531,7 +9543,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:702:4: field_constraint
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:737:4: field_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -9544,7 +9556,7 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:703:4: LEFT_PAREN or_constr RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:4: LEFT_PAREN or_constr RIGHT_PAREN
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -9589,7 +9601,7 @@
     };
 
     // $ANTLR start field_constraint
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706: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: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 ) );
     public final field_constraint_return field_constraint() throws RecognitionException {
         field_constraint_return retval = new field_constraint_return();
         retval.start = input.LT(1);
@@ -9620,7 +9632,7 @@
         	boolean isArrow = false;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709: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 ) )
+            // /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);
 
@@ -9636,7 +9648,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("706: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("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);
 
                     throw nvae;
                 }
@@ -9644,13 +9656,13 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("706: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("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);
 
                 throw nvae;
             }
             switch (alt79) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709: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:744:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
                     {
                     pushFollow(FOLLOW_label_in_field_constraint3196);
                     label226=label();
@@ -9662,7 +9674,7 @@
                     _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:709:25: ( or_restr_connective | arw= ARROW paren_chunk )?
+                    // /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);
 
@@ -9674,7 +9686,7 @@
                     }
                     switch (alt78) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:27: or_restr_connective
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:27: or_restr_connective
                             {
                             pushFollow(FOLLOW_or_restr_connective_in_field_constraint3202);
                             or_restr_connective228=or_restr_connective();
@@ -9685,7 +9697,7 @@
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:49: arw= ARROW paren_chunk
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:49: arw= ARROW paren_chunk
                             {
                             arw=(Token)input.LT(1);
                             match(input,ARROW,FOLLOW_ARROW_in_field_constraint3208); if (failed) return retval;
@@ -9717,15 +9729,15 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 710:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                    // 745: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:710: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:745: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:710:39: ^( VT_FIELD accessor_path )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:39: ^( VT_FIELD accessor_path )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
@@ -9737,9 +9749,9 @@
 
                         adaptor.addChild(root_0, root_1);
                         }
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745: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:710:66: ^( VK_EVAL[$arw] paren_chunk )
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:66: ^( VK_EVAL[$arw] paren_chunk )
                             {
                             Object root_1 = (Object)adaptor.nil();
                             root_1 = (Object)adaptor.becomeRoot(adaptor.create(VK_EVAL, arw), root_1);
@@ -9753,21 +9765,21 @@
                         stream_paren_chunk.reset();
 
                     }
-                    else // 711:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                    else // 746: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:711: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:746: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:711:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
+                        // /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 )? )
                         {
                         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:711:53: ( or_restr_connective )?
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:53: ( or_restr_connective )?
                         if ( stream_or_restr_connective.hasNext() ) {
                             adaptor.addChild(root_2, stream_or_restr_connective.next());
 
@@ -9787,7 +9799,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:4: accessor_path or_restr_connective
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:747:4: accessor_path or_restr_connective
                     {
                     pushFollow(FOLLOW_accessor_path_in_field_constraint3264);
                     accessor_path230=accessor_path();
@@ -9811,9 +9823,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 713:3: -> ^( VT_FIELD accessor_path or_restr_connective )
+                    // 748:3: -> ^( VT_FIELD accessor_path or_restr_connective )
                     {
-                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:6: ^( 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 )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_1);
@@ -9855,7 +9867,7 @@
     };
 
     // $ANTLR start label
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:1: label : value= ID COLON -> VT_LABEL[$value] ;
+    // /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] ;
     public final label_return label() throws RecognitionException {
         label_return retval = new label_return();
         retval.start = input.LT(1);
@@ -9871,8 +9883,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:716:7: (value= ID COLON -> VT_LABEL[$value] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:9: value= ID COLON
+            // /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
             {
             value=(Token)input.LT(1);
             match(input,ID,FOLLOW_ID_in_label3290); if (failed) return retval;
@@ -9894,7 +9906,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 716:24: -> VT_LABEL[$value]
+            // 751:24: -> VT_LABEL[$value]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_LABEL, value));
 
@@ -9927,7 +9939,7 @@
     };
 
     // $ANTLR start or_restr_connective
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:1: or_restr_connective : and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_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 )* ;
     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);
@@ -9943,8 +9955,8 @@
         Object DOUBLE_PIPE234_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:2: ( and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:4: and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*
+            // /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 )*
             {
             root_0 = (Object)adaptor.nil();
 
@@ -9953,22 +9965,26 @@
             _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:720:25: ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:25: ({...}? => DOUBLE_PIPE and_restr_connective )*
             loop80:
             do {
                 int alt80=2;
                 alt80 = dfa80.predict(input);
                 switch (alt80) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:26: ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755: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_connective3316); if (failed) return retval;
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective3314); 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);
             	    }
-            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3319);
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3317);
             	    and_restr_connective235=and_restr_connective();
             	    _fsp--;
             	    if (failed) return retval;
@@ -10008,7 +10024,7 @@
     };
 
     // $ANTLR start and_restr_connective
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:723:1: and_restr_connective : constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )* ;
+    // /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 )* ;
     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);
@@ -10024,32 +10040,36 @@
         Object DOUBLE_AMPER237_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:2: ( constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )* )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:4: constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*
+            // /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 )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3334);
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3332);
             constraint_expression236=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:724:26: ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:26: ({...}? => DOUBLE_AMPER constraint_expression )*
             loop81:
             do {
                 int alt81=2;
                 alt81 = dfa81.predict(input);
                 switch (alt81) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:27: ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759: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_connective3342); if (failed) return retval;
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective3338); 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);
             	    }
-            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3345);
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3341);
             	    constraint_expression238=constraint_expression();
             	    _fsp--;
             	    if (failed) return retval;
@@ -10089,7 +10109,7 @@
     };
 
     // $ANTLR start constraint_expression
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727: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:762: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);
@@ -10109,58 +10129,18 @@
         Object RIGHT_PAREN243_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730: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:765:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN )
             int alt82=3;
             switch ( input.LA(1) ) {
             case ID:
                 {
                 int LA82_1 = input.LA(2);
 
-                if ( (LA82_1==ID) ) {
-                    int LA82_10 = input.LA(3);
-
-                    if ( (LA82_10==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                        int LA82_14 = 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("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 14, input);
-
-                            throw nvae;
-                        }
-                    }
-                    else if ( (LA82_10==ID||LA82_10==STRING||(LA82_10>=BOOL && LA82_10<=INT)||(LA82_10>=FLOAT && LA82_10<=NULL)) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                        alt82=2;
-                    }
-                    else if ( (LA82_10==DOT||(LA82_10>=COMMA && LA82_10<=RIGHT_PAREN)||(LA82_10>=DOUBLE_PIPE && LA82_10<=DOUBLE_AMPER)||LA82_10==LEFT_SQUARE) ) {
-                        alt82=2;
-                    }
-                    else {
-                        if (backtracking>0) {failed=true; return retval;}
-                        NoViableAltException nvae =
-                            new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 10, input);
-
-                        throw nvae;
-                    }
-                }
-                else if ( (LA82_1==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                    alt82=2;
-                }
-                else if ( (LA82_1==STRING||(LA82_1>=BOOL && LA82_1<=INT)||(LA82_1>=FLOAT && LA82_1<=NULL)) ) {
-                    alt82=2;
-                }
-                else if ( (LA82_1==LEFT_PAREN) ) {
+                if ( (LA82_1==LEFT_PAREN) ) {
                     switch ( input.LA(3) ) {
                     case ID:
                         {
-                        int LA82_23 = input.LA(4);
+                        int LA82_14 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
                             alt82=1;
@@ -10171,38 +10151,15 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 23, input);
+                                new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 14, input);
 
                             throw nvae;
                         }
                         }
                         break;
-                    case STRING:
-                    case BOOL:
-                    case INT:
-                    case FLOAT:
-                    case NULL:
-                        {
-                        int LA82_24 = input.LA(4);
-
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt82=1;
-                        }
-                        else if ( (true) ) {
-                            alt82=2;
-                        }
-                        else {
-                            if (backtracking>0) {failed=true; return retval;}
-                            NoViableAltException nvae =
-                                new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 24, input);
-
-                            throw nvae;
-                        }
-                        }
-                        break;
                     case LEFT_PAREN:
                         {
-                        int LA82_25 = input.LA(4);
+                        int LA82_15 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
                             alt82=1;
@@ -10213,7 +10170,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 25, input);
+                                new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 15, input);
 
                             throw nvae;
                         }
@@ -10341,19 +10298,82 @@
                         alt82=2;
                         }
                         break;
+                    case STRING:
+                    case BOOL:
+                    case INT:
+                    case FLOAT:
+                    case NULL:
+                        {
+                        int LA82_17 = input.LA(4);
+
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
+                            alt82=1;
+                        }
+                        else if ( (true) ) {
+                            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, 17, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 13, input);
+                            new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 10, 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("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 1, input);
+                        new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 1, input);
 
                     throw nvae;
                 }
@@ -10378,18 +10398,18 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 0, input);
+                    new NoViableAltException("762:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 0, input);
 
                 throw nvae;
             }
 
             switch (alt82) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:5: compound_operator
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:765:5: compound_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression3367);
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression3363);
                     compound_operator239=compound_operator();
                     _fsp--;
                     if (failed) return retval;
@@ -10398,11 +10418,11 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:4: simple_operator
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:766:4: simple_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression3372);
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression3368);
                     simple_operator240=simple_operator();
                     _fsp--;
                     if (failed) return retval;
@@ -10411,19 +10431,19 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
+                    // /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
                     {
                     root_0 = (Object)adaptor.nil();
 
                     LEFT_PAREN241=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression3377); if (failed) return retval;
-                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression3380);
+                    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();
                     _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_expression3382); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression3378); if (failed) return retval;
                     if ( backtracking==0 ) {
                     RIGHT_PAREN243_tree = (Object)adaptor.create(RIGHT_PAREN243);
                     adaptor.addChild(root_0, RIGHT_PAREN243_tree);
@@ -10440,9 +10460,15 @@
                 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
             }
         }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
+        catch ( RecognitionException re ) {
+
+            		if (!lookaheadTest){
+            			reportError(re);
+            			recover(input, re);
+            		} else {
+            			throw re;
+            		}
+            	
         }
         finally {
         }
@@ -10456,7 +10482,7 @@
     };
 
     // $ANTLR start simple_operator
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735: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: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 ;
     public final simple_operator_return simple_operator() throws RecognitionException {
         simple_operator_return retval = new simple_operator_return();
         retval.start = input.LT(1);
@@ -10516,12 +10542,12 @@
         Object ID266_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736: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:736: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: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
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736: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 )
+            // /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;
             switch ( input.LA(1) ) {
             case EQUAL:
@@ -10582,7 +10608,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("736: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("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);
 
                     throw nvae;
                 }
@@ -10596,17 +10622,17 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("736: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("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);
 
                 throw nvae;
             }
 
             switch (alt84) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:5: EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:5: EQUAL
                     {
                     EQUAL244=(Token)input.LT(1);
-                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator3394); if (failed) return retval;
+                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator3397); if (failed) return retval;
                     if ( backtracking==0 ) {
                     EQUAL244_tree = (Object)adaptor.create(EQUAL244);
                     root_0 = (Object)adaptor.becomeRoot(EQUAL244_tree, root_0);
@@ -10615,10 +10641,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:737:4: GREATER
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:4: GREATER
                     {
                     GREATER245=(Token)input.LT(1);
-                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator3400); if (failed) return retval;
+                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator3403); if (failed) return retval;
                     if ( backtracking==0 ) {
                     GREATER245_tree = (Object)adaptor.create(GREATER245);
                     root_0 = (Object)adaptor.becomeRoot(GREATER245_tree, root_0);
@@ -10627,10 +10653,10 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:4: GREATER_EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:4: GREATER_EQUAL
                     {
                     GREATER_EQUAL246=(Token)input.LT(1);
-                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator3406); if (failed) return retval;
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator3409); 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);
@@ -10639,10 +10665,10 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:4: LESS
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:4: LESS
                     {
                     LESS247=(Token)input.LT(1);
-                    match(input,LESS,FOLLOW_LESS_in_simple_operator3412); if (failed) return retval;
+                    match(input,LESS,FOLLOW_LESS_in_simple_operator3415); if (failed) return retval;
                     if ( backtracking==0 ) {
                     LESS247_tree = (Object)adaptor.create(LESS247);
                     root_0 = (Object)adaptor.becomeRoot(LESS247_tree, root_0);
@@ -10651,10 +10677,10 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:4: LESS_EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:4: LESS_EQUAL
                     {
                     LESS_EQUAL248=(Token)input.LT(1);
-                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3418); if (failed) return retval;
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3421); 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);
@@ -10663,10 +10689,10 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:741:4: NOT_EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:4: NOT_EQUAL
                     {
                     NOT_EQUAL249=(Token)input.LT(1);
-                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3424); if (failed) return retval;
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3427); 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);
@@ -10675,14 +10701,14 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742: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:785:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
                     {
-                    pushFollow(FOLLOW_not_key_in_simple_operator3430);
+                    pushFollow(FOLLOW_not_key_in_simple_operator3433);
                     not_key250=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:742:12: ( 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: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);
 
@@ -10707,7 +10733,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("742:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 83, 1, input);
+                                new NoViableAltException("785:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 83, 1, input);
 
                             throw nvae;
                         }
@@ -10718,15 +10744,15 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("742:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 83, 0, input);
+                            new NoViableAltException("785:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 83, 0, input);
 
                         throw nvae;
                     }
                     switch (alt83) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:13: contains_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:13: contains_key
                             {
-                            pushFollow(FOLLOW_contains_key_in_simple_operator3433);
+                            pushFollow(FOLLOW_contains_key_in_simple_operator3436);
                             contains_key251=contains_key();
                             _fsp--;
                             if (failed) return retval;
@@ -10735,9 +10761,9 @@
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:27: soundslike_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:27: soundslike_key
                             {
-                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3436);
+                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3439);
                             soundslike_key252=soundslike_key();
                             _fsp--;
                             if (failed) return retval;
@@ -10746,9 +10772,9 @@
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:43: matches_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:43: matches_key
                             {
-                            pushFollow(FOLLOW_matches_key_in_simple_operator3439);
+                            pushFollow(FOLLOW_matches_key_in_simple_operator3442);
                             matches_key253=matches_key();
                             _fsp--;
                             if (failed) return retval;
@@ -10757,9 +10783,9 @@
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:56: memberof_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:56: memberof_key
                             {
-                            pushFollow(FOLLOW_memberof_key_in_simple_operator3442);
+                            pushFollow(FOLLOW_memberof_key_in_simple_operator3445);
                             memberof_key254=memberof_key();
                             _fsp--;
                             if (failed) return retval;
@@ -10768,10 +10794,10 @@
                             }
                             break;
                         case 5 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:71: ID
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:71: ID
                             {
                             ID255=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator3446); if (failed) return retval;
+                            match(input,ID,FOLLOW_ID_in_simple_operator3449); if (failed) return retval;
                             if ( backtracking==0 ) {
                             ID255_tree = (Object)adaptor.create(ID255);
                             root_0 = (Object)adaptor.becomeRoot(ID255_tree, root_0);
@@ -10780,17 +10806,17 @@
                             }
                             break;
                         case 6 :
-                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:77: GRAVE_ACCENT ID square_chunk
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:77: GRAVE_ACCENT ID square_chunk
                             {
                             GRAVE_ACCENT256=(Token)input.LT(1);
-                            match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3451); if (failed) return retval;
+                            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_operator3454); if (failed) return retval;
+                            match(input,ID,FOLLOW_ID_in_simple_operator3457); if (failed) return retval;
                             if ( backtracking==0 ) {
                             ID257_tree = (Object)adaptor.create(ID257);
                             root_0 = (Object)adaptor.becomeRoot(ID257_tree, root_0);
                             }
-                            pushFollow(FOLLOW_square_chunk_in_simple_operator3457);
+                            pushFollow(FOLLOW_square_chunk_in_simple_operator3460);
                             square_chunk258=square_chunk();
                             _fsp--;
                             if (failed) return retval;
@@ -10805,9 +10831,9 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:4: contains_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:4: contains_key
                     {
-                    pushFollow(FOLLOW_contains_key_in_simple_operator3463);
+                    pushFollow(FOLLOW_contains_key_in_simple_operator3466);
                     contains_key259=contains_key();
                     _fsp--;
                     if (failed) return retval;
@@ -10816,9 +10842,9 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:4: excludes_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:787:4: excludes_key
                     {
-                    pushFollow(FOLLOW_excludes_key_in_simple_operator3469);
+                    pushFollow(FOLLOW_excludes_key_in_simple_operator3472);
                     excludes_key260=excludes_key();
                     _fsp--;
                     if (failed) return retval;
@@ -10827,9 +10853,9 @@
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:4: matches_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:788:4: matches_key
                     {
-                    pushFollow(FOLLOW_matches_key_in_simple_operator3475);
+                    pushFollow(FOLLOW_matches_key_in_simple_operator3478);
                     matches_key261=matches_key();
                     _fsp--;
                     if (failed) return retval;
@@ -10838,9 +10864,9 @@
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:4: soundslike_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:4: soundslike_key
                     {
-                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3481);
+                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3484);
                     soundslike_key262=soundslike_key();
                     _fsp--;
                     if (failed) return retval;
@@ -10849,9 +10875,9 @@
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:747:4: memberof_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:4: memberof_key
                     {
-                    pushFollow(FOLLOW_memberof_key_in_simple_operator3487);
+                    pushFollow(FOLLOW_memberof_key_in_simple_operator3490);
                     memberof_key263=memberof_key();
                     _fsp--;
                     if (failed) return retval;
@@ -10860,10 +10886,10 @@
                     }
                     break;
                 case 13 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:748:4: ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:4: ID
                     {
                     ID264=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator3493); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_simple_operator3496); if (failed) return retval;
                     if ( backtracking==0 ) {
                     ID264_tree = (Object)adaptor.create(ID264);
                     root_0 = (Object)adaptor.becomeRoot(ID264_tree, root_0);
@@ -10872,17 +10898,17 @@
                     }
                     break;
                 case 14 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:4: GRAVE_ACCENT ID square_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:792:4: GRAVE_ACCENT ID square_chunk
                     {
                     GRAVE_ACCENT265=(Token)input.LT(1);
-                    match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3499); if (failed) return retval;
+                    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_operator3502); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_simple_operator3505); if (failed) return retval;
                     if ( backtracking==0 ) {
                     ID266_tree = (Object)adaptor.create(ID266);
                     root_0 = (Object)adaptor.becomeRoot(ID266_tree, root_0);
                     }
-                    pushFollow(FOLLOW_square_chunk_in_simple_operator3505);
+                    pushFollow(FOLLOW_square_chunk_in_simple_operator3508);
                     square_chunk267=square_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -10893,7 +10919,7 @@
 
             }
 
-            pushFollow(FOLLOW_expression_value_in_simple_operator3509);
+            pushFollow(FOLLOW_expression_value_in_simple_operator3512);
             expression_value268=expression_value();
             _fsp--;
             if (failed) return retval;
@@ -10924,7 +10950,7 @@
     };
 
     // $ANTLR start compound_operator
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:754: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:797: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);
@@ -10950,28 +10976,28 @@
         Object RIGHT_PAREN276_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755: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:755: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: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
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:4: ( in_key | not_key in_key )
+            // /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);
 
             if ( (LA85_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IN))||(validateIdentifierKey(DroolsSoftKeywords.NOT))))) {
                 int LA85_1 = input.LA(2);
 
-                if ( (LA85_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.IN)))) {
-                    alt85=1;
-                }
-                else if ( (LA85_1==ID) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                if ( (LA85_1==ID) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
                     alt85=2;
                 }
+                else if ( (LA85_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.IN)))) {
+                    alt85=1;
+                }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("755:4: ( in_key | not_key in_key )", 85, 1, input);
+                        new NoViableAltException("798:4: ( in_key | not_key in_key )", 85, 1, input);
 
                     throw nvae;
                 }
@@ -10979,15 +11005,15 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("755:4: ( in_key | not_key in_key )", 85, 0, input);
+                    new NoViableAltException("798:4: ( in_key | not_key in_key )", 85, 0, input);
 
                 throw nvae;
             }
             switch (alt85) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:6: in_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:6: in_key
                     {
-                    pushFollow(FOLLOW_in_key_in_compound_operator3524);
+                    pushFollow(FOLLOW_in_key_in_compound_operator3527);
                     in_key269=in_key();
                     _fsp--;
                     if (failed) return retval;
@@ -10996,14 +11022,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:16: not_key in_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:16: not_key in_key
                     {
-                    pushFollow(FOLLOW_not_key_in_compound_operator3529);
+                    pushFollow(FOLLOW_not_key_in_compound_operator3532);
                     not_key270=not_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) adaptor.addChild(root_0, not_key270.getTree());
-                    pushFollow(FOLLOW_in_key_in_compound_operator3531);
+                    pushFollow(FOLLOW_in_key_in_compound_operator3534);
                     in_key271=in_key();
                     _fsp--;
                     if (failed) return retval;
@@ -11015,13 +11041,13 @@
             }
 
             LEFT_PAREN272=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3536); if (failed) return retval;
-            pushFollow(FOLLOW_expression_value_in_compound_operator3539);
+            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();
             _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:755:63: ( COMMA expression_value )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:63: ( COMMA expression_value )*
             loop86:
             do {
                 int alt86=2;
@@ -11034,11 +11060,11 @@
 
                 switch (alt86) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:65: COMMA expression_value
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:65: COMMA expression_value
             	    {
             	    COMMA274=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3543); if (failed) return retval;
-            	    pushFollow(FOLLOW_expression_value_in_compound_operator3546);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3546); if (failed) return retval;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator3549);
             	    expression_value275=expression_value();
             	    _fsp--;
             	    if (failed) return retval;
@@ -11053,7 +11079,7 @@
             } while (true);
 
             RIGHT_PAREN276=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3551); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3554); if (failed) return retval;
             if ( backtracking==0 ) {
             RIGHT_PAREN276_tree = (Object)adaptor.create(RIGHT_PAREN276);
             adaptor.addChild(root_0, RIGHT_PAREN276_tree);
@@ -11084,7 +11110,7 @@
     };
 
     // $ANTLR start expression_value
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758: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:801: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);
@@ -11100,7 +11126,7 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:2: ( accessor_path | literal_constraint | paren_chunk )
+            // /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;
             switch ( input.LA(1) ) {
             case ID:
@@ -11125,18 +11151,18 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("758:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 87, 0, input);
+                    new NoViableAltException("801:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 87, 0, input);
 
                 throw nvae;
             }
 
             switch (alt87) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:4: accessor_path
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:802:4: accessor_path
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_accessor_path_in_expression_value3562);
+                    pushFollow(FOLLOW_accessor_path_in_expression_value3565);
                     accessor_path277=accessor_path();
                     _fsp--;
                     if (failed) return retval;
@@ -11145,11 +11171,11 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:760:4: literal_constraint
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:803:4: literal_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value3567);
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value3570);
                     literal_constraint278=literal_constraint();
                     _fsp--;
                     if (failed) return retval;
@@ -11158,11 +11184,11 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:4: paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:804:4: paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_paren_chunk_in_expression_value3573);
+                    pushFollow(FOLLOW_paren_chunk_in_expression_value3576);
                     paren_chunk279=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -11195,7 +11221,7 @@
     };
 
     // $ANTLR start literal_constraint
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
+    // /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 );
     public final literal_constraint_return literal_constraint() throws RecognitionException {
         literal_constraint_return retval = new literal_constraint_return();
         retval.start = input.LT(1);
@@ -11207,7 +11233,7 @@
         Object set280_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:765:2: ( STRING | INT | FLOAT | BOOL | NULL )
+            // /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:
             {
             root_0 = (Object)adaptor.nil();
@@ -11251,7 +11277,7 @@
     };
 
     // $ANTLR start pattern_type
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772: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:815: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);
@@ -11268,17 +11294,17 @@
         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:773: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:773: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: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 )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_pattern_type3617); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_pattern_type3620); 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:773:11: (id+= DOT id+= ID )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:11: (id+= DOT id+= ID )*
             loop88:
             do {
                 int alt88=2;
@@ -11291,17 +11317,17 @@
 
                 switch (alt88) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:13: id+= DOT id+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_pattern_type3623); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_pattern_type3626); 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_type3627); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_pattern_type3630); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
@@ -11319,7 +11345,7 @@
             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:775:6: ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:818:6: ( dimension_definition )*
             loop89:
             do {
                 int alt89=2;
@@ -11332,9 +11358,9 @@
 
                 switch (alt89) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:6: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:818:6: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type3642);
+            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type3645);
             	    dimension_definition281=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
@@ -11360,9 +11386,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 776:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
+            // 819:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:6: ^( 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 )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN_TYPE, "VT_PATTERN_TYPE"), root_1);
@@ -11375,7 +11401,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:28: ( dimension_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:28: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -11414,7 +11440,7 @@
     };
 
     // $ANTLR start data_type
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779: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:822: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);
@@ -11434,14 +11460,14 @@
         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:780: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:780:4: ID ( DOT ID )* ( dimension_definition )*
+            // /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 )*
             {
             ID282=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_data_type3668); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_data_type3671); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID282);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:7: ( DOT ID )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:7: ( DOT ID )*
             loop90:
             do {
                 int alt90=2;
@@ -11454,14 +11480,14 @@
 
                 switch (alt90) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:9: DOT ID
             	    {
             	    DOT283=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_data_type3672); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_data_type3675); if (failed) return retval;
             	    if ( backtracking==0 ) stream_DOT.add(DOT283);
 
             	    ID284=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_data_type3674); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_data_type3677); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(ID284);
 
 
@@ -11473,7 +11499,7 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:19: ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:19: ( dimension_definition )*
             loop91:
             do {
                 int alt91=2;
@@ -11486,9 +11512,9 @@
 
                 switch (alt91) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:19: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:19: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_data_type3679);
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type3682);
             	    dimension_definition285=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
@@ -11514,9 +11540,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 781:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            // 824:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:6: ^( 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 )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_DATA_TYPE, "VT_DATA_TYPE"), root_1);
@@ -11529,7 +11555,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:25: ( dimension_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:824:25: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -11568,7 +11594,7 @@
     };
 
     // $ANTLR start dimension_definition
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827: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);
@@ -11582,19 +11608,19 @@
         Object RIGHT_SQUARE287_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:2: ( LEFT_SQUARE RIGHT_SQUARE )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:4: LEFT_SQUARE RIGHT_SQUARE
+            // /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
             {
             root_0 = (Object)adaptor.nil();
 
             LEFT_SQUARE286=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3705); if (failed) return retval;
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3708); if (failed) return retval;
             if ( backtracking==0 ) {
             LEFT_SQUARE286_tree = (Object)adaptor.create(LEFT_SQUARE286);
             adaptor.addChild(root_0, LEFT_SQUARE286_tree);
             }
             RIGHT_SQUARE287=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3707); if (failed) return retval;
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3710); if (failed) return retval;
             if ( backtracking==0 ) {
             RIGHT_SQUARE287_tree = (Object)adaptor.create(RIGHT_SQUARE287);
             adaptor.addChild(root_0, RIGHT_SQUARE287_tree);
@@ -11625,7 +11651,7 @@
     };
 
     // $ANTLR start accessor_path
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:788: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:831: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);
@@ -11642,15 +11668,15 @@
         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:789: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:789:4: accessor_element ( DOT accessor_element )*
+            // /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 )*
             {
-            pushFollow(FOLLOW_accessor_element_in_accessor_path3718);
+            pushFollow(FOLLOW_accessor_element_in_accessor_path3721);
             accessor_element288=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:789:21: ( DOT accessor_element )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:832:21: ( DOT accessor_element )*
             loop92:
             do {
                 int alt92=2;
@@ -11663,13 +11689,13 @@
 
                 switch (alt92) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:23: DOT accessor_element
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:832:23: DOT accessor_element
             	    {
             	    DOT289=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3722); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3725); if (failed) return retval;
             	    if ( backtracking==0 ) stream_DOT.add(DOT289);
 
-            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3724);
+            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3727);
             	    accessor_element290=accessor_element();
             	    _fsp--;
             	    if (failed) return retval;
@@ -11695,9 +11721,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 790:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+            // 833:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:5: ^( 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 )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCESSOR_PATH, "VT_ACCESSOR_PATH"), root_1);
@@ -11743,7 +11769,7 @@
     };
 
     // $ANTLR start accessor_element
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:793: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:836: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);
@@ -11758,14 +11784,14 @@
         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:794: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:794:4: ID ( square_chunk )*
+            // /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 )*
             {
             ID291=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accessor_element3748); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accessor_element3751); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID291);
 
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:7: ( square_chunk )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:837:7: ( square_chunk )*
             loop93:
             do {
                 int alt93=2;
@@ -11778,9 +11804,9 @@
 
                 switch (alt93) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:7: square_chunk
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:837:7: square_chunk
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3750);
+            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3753);
             	    square_chunk292=square_chunk();
             	    _fsp--;
             	    if (failed) return retval;
@@ -11806,15 +11832,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 795:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+            // 838:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
             {
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:795:5: ^( 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 )* )
                 {
                 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:795:30: ( square_chunk )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:838:30: ( square_chunk )*
                 while ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
@@ -11853,7 +11879,7 @@
     };
 
     // $ANTLR start rhs_chunk
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798: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:841: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);
@@ -11868,10 +11894,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:801: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:801:5: rc= rhs_chunk_data
+            // /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
             {
-            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3779);
+            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3782);
             rc=rhs_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -11891,7 +11917,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 802:2: -> VT_RHS_CHUNK[$rc.start,text]
+            // 845:2: -> VT_RHS_CHUNK[$rc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_RHS_CHUNK, ((Token)rc.start), text));
 
@@ -11924,7 +11950,7 @@
     };
 
     // $ANTLR start rhs_chunk_data
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
+    // /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 )? ;
     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);
@@ -11942,18 +11968,18 @@
         Object SEMICOLON296_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:2: ( THEN (~ END )* END ( SEMICOLON )? )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:4: THEN (~ END )* END ( SEMICOLON )?
+            // /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 )?
             {
             root_0 = (Object)adaptor.nil();
 
             THEN293=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3798); if (failed) return retval;
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3801); if (failed) return retval;
             if ( backtracking==0 ) {
             THEN293_tree = (Object)adaptor.create(THEN293);
             adaptor.addChild(root_0, THEN293_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:9: (~ END )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:9: (~ END )*
             loop94:
             do {
                 int alt94=2;
@@ -11966,7 +11992,7 @@
 
                 switch (alt94) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:11: ~ END
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:11: ~ END
             	    {
             	    set294=(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) ) {
@@ -11978,7 +12004,7 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3802);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3805);    throw mse;
             	    }
 
 
@@ -11991,12 +12017,12 @@
             } while (true);
 
             END295=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk_data3808); if (failed) return retval;
+            match(input,END,FOLLOW_END_in_rhs_chunk_data3811); if (failed) return retval;
             if ( backtracking==0 ) {
             END295_tree = (Object)adaptor.create(END295);
             adaptor.addChild(root_0, END295_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:23: ( SEMICOLON )?
+            // /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);
 
@@ -12005,10 +12031,10 @@
             }
             switch (alt95) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:23: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:23: SEMICOLON
                     {
                     SEMICOLON296=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3810); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3813); if (failed) return retval;
                     if ( backtracking==0 ) {
                     SEMICOLON296_tree = (Object)adaptor.create(SEMICOLON296);
                     adaptor.addChild(root_0, SEMICOLON296_tree);
@@ -12045,7 +12071,7 @@
     };
 
     // $ANTLR start curly_chunk
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809: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:852: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);
@@ -12060,10 +12086,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812: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:812:5: cc= curly_chunk_data
+            // /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
             {
-            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3827);
+            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3830);
             cc=curly_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -12083,7 +12109,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 813:2: -> VT_CURLY_CHUNK[$cc.start,text]
+            // 856:2: -> VT_CURLY_CHUNK[$cc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_CURLY_CHUNK, ((Token)cc.start), text));
 
@@ -12116,7 +12142,7 @@
     };
 
     // $ANTLR start curly_chunk_data
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816: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:859: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);
@@ -12134,18 +12160,18 @@
         Object RIGHT_CURLY300_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:817: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:817: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: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
             {
             root_0 = (Object)adaptor.nil();
 
             LEFT_CURLY297=(Token)input.LT(1);
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3846); if (failed) return retval;
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3849); if (failed) return retval;
             if ( backtracking==0 ) {
             LEFT_CURLY297_tree = (Object)adaptor.create(LEFT_CURLY297);
             adaptor.addChild(root_0, LEFT_CURLY297_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:817:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
+            // /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:
             do {
                 int alt96=3;
@@ -12161,7 +12187,7 @@
 
                 switch (alt96) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:817:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
             	    set298=(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) ) {
@@ -12173,16 +12199,16 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3849);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3852);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:817:49: curly_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:49: curly_chunk_data
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3863);
+            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3866);
             	    curly_chunk_data299=curly_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
@@ -12197,7 +12223,7 @@
             } while (true);
 
             RIGHT_CURLY300=(Token)input.LT(1);
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3868); if (failed) return retval;
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3871); if (failed) return retval;
             if ( backtracking==0 ) {
             RIGHT_CURLY300_tree = (Object)adaptor.create(RIGHT_CURLY300);
             adaptor.addChild(root_0, RIGHT_CURLY300_tree);
@@ -12228,7 +12254,7 @@
     };
 
     // $ANTLR start paren_chunk
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:820: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:863: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);
@@ -12243,10 +12269,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823: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:823:5: pc= paren_chunk_data
+            // /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
             {
-            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3884);
+            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3887);
             pc=paren_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -12266,7 +12292,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 824:2: -> VT_PAREN_CHUNK[$pc.start,text]
+            // 867:2: -> VT_PAREN_CHUNK[$pc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_PAREN_CHUNK, ((Token)pc.start), text));
 
@@ -12299,7 +12325,7 @@
     };
 
     // $ANTLR start paren_chunk_data
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827: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:870: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);
@@ -12317,18 +12343,18 @@
         Object RIGHT_PAREN304_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828: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:828: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: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
             {
             root_0 = (Object)adaptor.nil();
 
             LEFT_PAREN301=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3904); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3907); if (failed) return retval;
             if ( backtracking==0 ) {
             LEFT_PAREN301_tree = (Object)adaptor.create(LEFT_PAREN301);
             adaptor.addChild(root_0, LEFT_PAREN301_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
+            // /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:
             do {
                 int alt97=3;
@@ -12344,7 +12370,7 @@
 
                 switch (alt97) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
             	    set302=(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) ) {
@@ -12356,16 +12382,16 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3907);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3910);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:49: paren_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:49: paren_chunk_data
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3921);
+            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3924);
             	    paren_chunk_data303=paren_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
@@ -12380,7 +12406,7 @@
             } while (true);
 
             RIGHT_PAREN304=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3926); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3929); if (failed) return retval;
             if ( backtracking==0 ) {
             RIGHT_PAREN304_tree = (Object)adaptor.create(RIGHT_PAREN304);
             adaptor.addChild(root_0, RIGHT_PAREN304_tree);
@@ -12411,7 +12437,7 @@
     };
 
     // $ANTLR start square_chunk
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:831: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:874: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);
@@ -12426,10 +12452,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:834: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:834:5: sc= square_chunk_data
+            // /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
             {
-            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3943);
+            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3946);
             sc=square_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -12449,7 +12475,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 835:2: -> VT_SQUARE_CHUNK[$sc.start,text]
+            // 878:2: -> VT_SQUARE_CHUNK[$sc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SQUARE_CHUNK, ((Token)sc.start), text));
 
@@ -12482,7 +12508,7 @@
     };
 
     // $ANTLR start square_chunk_data
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:838: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:881: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);
@@ -12500,18 +12526,18 @@
         Object RIGHT_SQUARE308_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839: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:839: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: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
             {
             root_0 = (Object)adaptor.nil();
 
             LEFT_SQUARE305=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3962); if (failed) return retval;
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3965); if (failed) return retval;
             if ( backtracking==0 ) {
             LEFT_SQUARE305_tree = (Object)adaptor.create(LEFT_SQUARE305);
             adaptor.addChild(root_0, LEFT_SQUARE305_tree);
             }
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
+            // /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:
             do {
                 int alt98=3;
@@ -12527,7 +12553,7 @@
 
                 switch (alt98) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:882:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
             	    set306=(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) ) {
@@ -12539,16 +12565,16 @@
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data3965);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data3968);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:52: square_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:882:52: square_chunk_data
             	    {
-            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3979);
+            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3982);
             	    square_chunk_data307=square_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
@@ -12563,7 +12589,7 @@
             } while (true);
 
             RIGHT_SQUARE308=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3984); if (failed) return retval;
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3987); if (failed) return retval;
             if ( backtracking==0 ) {
             RIGHT_SQUARE308_tree = (Object)adaptor.create(RIGHT_SQUARE308);
             adaptor.addChild(root_0, RIGHT_SQUARE308_tree);
@@ -12594,7 +12620,7 @@
     };
 
     // $ANTLR start date_effective_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:843: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:886: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);
@@ -12615,23 +12641,23 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846: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:846:5: {...}? => ID MISC ID
+            // /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
             {
             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_key4003); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_date_effective_key4006); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID309);
 
             MISC310=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_effective_key4005); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_date_effective_key4008); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(MISC310);
 
             ID311=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key4007); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_date_effective_key4010); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID311);
 
             if ( backtracking==0 ) {
@@ -12649,7 +12675,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 847:2: -> VK_DATE_EFFECTIVE[$start, text]
+            // 890:2: -> VK_DATE_EFFECTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EFFECTIVE, ((Token)retval.start),  text));
 
@@ -12682,7 +12708,7 @@
     };
 
     // $ANTLR start date_expires_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:850: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:893: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);
@@ -12703,23 +12729,23 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:853: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:853:5: {...}? => ID MISC ID
+            // /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
             {
             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_key4033); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_date_expires_key4036); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID312);
 
             MISC313=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_expires_key4035); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_date_expires_key4038); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(MISC313);
 
             ID314=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key4037); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_date_expires_key4040); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID314);
 
             if ( backtracking==0 ) {
@@ -12737,7 +12763,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 854:2: -> VK_DATE_EXPIRES[$start, text]
+            // 897:2: -> VK_DATE_EXPIRES[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EXPIRES, ((Token)retval.start),  text));
 
@@ -12770,7 +12796,7 @@
     };
 
     // $ANTLR start lock_on_active_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:857: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:900: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);
@@ -12795,31 +12821,31 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860: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:860:5: {...}? => ID MISC ID MISC ID
+            // /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
             {
             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_key4063); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key4066); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID315);
 
             MISC316=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key4065); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key4068); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(MISC316);
 
             ID317=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key4067); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key4070); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID317);
 
             MISC318=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key4069); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key4072); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(MISC318);
 
             ID319=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key4071); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key4074); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID319);
 
             if ( backtracking==0 ) {
@@ -12837,7 +12863,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 861:2: -> VK_LOCK_ON_ACTIVE[$start, text]
+            // 904:2: -> VK_LOCK_ON_ACTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_LOCK_ON_ACTIVE, ((Token)retval.start),  text));
 
@@ -12870,7 +12896,7 @@
     };
 
     // $ANTLR start no_loop_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:864: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:907: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);
@@ -12891,23 +12917,23 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867: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:867:5: {...}? => ID MISC ID
+            // /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
             {
             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_key4097); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_no_loop_key4100); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID320);
 
             MISC321=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_no_loop_key4099); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_no_loop_key4102); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(MISC321);
 
             ID322=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key4101); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_no_loop_key4104); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID322);
 
             if ( backtracking==0 ) {
@@ -12925,7 +12951,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 868:2: -> VK_NO_LOOP[$start, text]
+            // 911:2: -> VK_NO_LOOP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NO_LOOP, ((Token)retval.start),  text));
 
@@ -12958,7 +12984,7 @@
     };
 
     // $ANTLR start auto_focus_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871: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:914: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);
@@ -12979,23 +13005,23 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874: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:874:5: {...}? => ID MISC ID
+            // /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
             {
             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_key4127); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_auto_focus_key4130); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID323);
 
             MISC324=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_auto_focus_key4129); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_auto_focus_key4132); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(MISC324);
 
             ID325=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key4131); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_auto_focus_key4134); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID325);
 
             if ( backtracking==0 ) {
@@ -13013,7 +13039,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 875:2: -> VK_AUTO_FOCUS[$start, text]
+            // 918:2: -> VK_AUTO_FOCUS[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AUTO_FOCUS, ((Token)retval.start),  text));
 
@@ -13046,7 +13072,7 @@
     };
 
     // $ANTLR start activation_group_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878: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:921: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);
@@ -13067,23 +13093,23 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:881: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:881:5: {...}? => ID MISC ID
+            // /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
             {
             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_key4157); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_activation_group_key4160); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID326);
 
             MISC327=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_activation_group_key4159); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_activation_group_key4162); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(MISC327);
 
             ID328=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key4161); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_activation_group_key4164); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID328);
 
             if ( backtracking==0 ) {
@@ -13101,7 +13127,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 882:2: -> VK_ACTIVATION_GROUP[$start, text]
+            // 925:2: -> VK_ACTIVATION_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTIVATION_GROUP, ((Token)retval.start),  text));
 
@@ -13134,7 +13160,7 @@
     };
 
     // $ANTLR start agenda_group_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:885: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:928: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);
@@ -13155,23 +13181,23 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:888: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:888:5: {...}? => ID MISC ID
+            // /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
             {
             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_key4187); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_agenda_group_key4190); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID329);
 
             MISC330=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_agenda_group_key4189); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_agenda_group_key4192); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(MISC330);
 
             ID331=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key4191); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_agenda_group_key4194); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID331);
 
             if ( backtracking==0 ) {
@@ -13189,7 +13215,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 889:2: -> VK_AGENDA_GROUP[$start, text]
+            // 932:2: -> VK_AGENDA_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AGENDA_GROUP, ((Token)retval.start),  text));
 
@@ -13222,7 +13248,7 @@
     };
 
     // $ANTLR start ruleflow_group_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892: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:935: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);
@@ -13243,23 +13269,23 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895: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:895:5: {...}? => ID MISC ID
+            // /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
             {
             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_key4217); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key4220); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID332);
 
             MISC333=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key4219); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key4222); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(MISC333);
 
             ID334=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key4221); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key4224); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID334);
 
             if ( backtracking==0 ) {
@@ -13277,7 +13303,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 896:2: -> VK_RULEFLOW_GROUP[$start, text]
+            // 939:2: -> VK_RULEFLOW_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULEFLOW_GROUP, ((Token)retval.start),  text));
 
@@ -13310,7 +13336,7 @@
     };
 
     // $ANTLR start duration_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:1: duration_key : {...}? =>id= ID -> VK_DURATION[$id] ;
+    // /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] ;
     public final duration_key_return duration_key() throws RecognitionException {
         duration_key_return retval = new duration_key_return();
         retval.start = input.LT(1);
@@ -13323,15 +13349,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:900:2: ({...}? =>id= ID -> VK_DURATION[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:4: {...}? =>id= ID
+            // /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
             {
             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_key4246); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_duration_key4249); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13346,7 +13372,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 900:69: -> VK_DURATION[$id]
+            // 943:69: -> VK_DURATION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DURATION, id));
 
@@ -13379,7 +13405,7 @@
     };
 
     // $ANTLR start package_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:903:1: package_key : {...}? =>id= ID -> VK_PACKAGE[$id] ;
+    // /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] ;
     public final package_key_return package_key() throws RecognitionException {
         package_key_return retval = new package_key_return();
         retval.start = input.LT(1);
@@ -13392,15 +13418,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:904:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:904:4: {...}? =>id= ID
+            // /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
             {
             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_key4268); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_package_key4271); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13415,7 +13441,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 904:68: -> VK_PACKAGE[$id]
+            // 947:68: -> VK_PACKAGE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_PACKAGE, id));
 
@@ -13448,7 +13474,7 @@
     };
 
     // $ANTLR start import_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:907:1: import_key : {...}? =>id= ID -> VK_IMPORT[$id] ;
+    // /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] ;
     public final import_key_return import_key() throws RecognitionException {
         import_key_return retval = new import_key_return();
         retval.start = input.LT(1);
@@ -13461,15 +13487,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:908:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:908:4: {...}? =>id= ID
+            // /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
             {
             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_key4290); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_import_key4293); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13484,7 +13510,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 908:67: -> VK_IMPORT[$id]
+            // 951:67: -> VK_IMPORT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IMPORT, id));
 
@@ -13517,7 +13543,7 @@
     };
 
     // $ANTLR start dialect_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:911:1: dialect_key : {...}? =>id= ID -> VK_DIALECT[$id] ;
+    // /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] ;
     public final dialect_key_return dialect_key() throws RecognitionException {
         dialect_key_return retval = new dialect_key_return();
         retval.start = input.LT(1);
@@ -13530,15 +13556,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:912:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:912:4: {...}? =>id= ID
+            // /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
             {
             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_key4312); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_dialect_key4315); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13553,7 +13579,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 912:68: -> VK_DIALECT[$id]
+            // 955:68: -> VK_DIALECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DIALECT, id));
 
@@ -13586,7 +13612,7 @@
     };
 
     // $ANTLR start salience_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:915:1: salience_key : {...}? =>id= ID -> VK_SALIENCE[$id] ;
+    // /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] ;
     public final salience_key_return salience_key() throws RecognitionException {
         salience_key_return retval = new salience_key_return();
         retval.start = input.LT(1);
@@ -13599,15 +13625,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:916:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:916:4: {...}? =>id= ID
+            // /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
             {
             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_key4334); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_salience_key4337); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13622,7 +13648,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 916:69: -> VK_SALIENCE[$id]
+            // 959:69: -> VK_SALIENCE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SALIENCE, id));
 
@@ -13655,7 +13681,7 @@
     };
 
     // $ANTLR start enabled_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:919:1: enabled_key : {...}? =>id= ID -> VK_ENABLED[$id] ;
+    // /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] ;
     public final enabled_key_return enabled_key() throws RecognitionException {
         enabled_key_return retval = new enabled_key_return();
         retval.start = input.LT(1);
@@ -13668,15 +13694,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:920:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:4: {...}? =>id= ID
+            // /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
             {
             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_key4356); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_enabled_key4359); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13691,7 +13717,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 920:68: -> VK_ENABLED[$id]
+            // 963:68: -> VK_ENABLED[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENABLED, id));
 
@@ -13724,7 +13750,7 @@
     };
 
     // $ANTLR start attributes_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:1: attributes_key : {...}? =>id= ID -> VK_ATTRIBUTES[$id] ;
+    // /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] ;
     public final attributes_key_return attributes_key() throws RecognitionException {
         attributes_key_return retval = new attributes_key_return();
         retval.start = input.LT(1);
@@ -13737,15 +13763,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:924:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:4: {...}? =>id= ID
+            // /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
             {
             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_key4378); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_attributes_key4381); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13760,7 +13786,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 924:71: -> VK_ATTRIBUTES[$id]
+            // 967:71: -> VK_ATTRIBUTES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ATTRIBUTES, id));
 
@@ -13793,7 +13819,7 @@
     };
 
     // $ANTLR start when_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:1: when_key : {...}? =>id= ID -> VK_WHEN[$id] ;
+    // /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] ;
     public final when_key_return when_key() throws RecognitionException {
         when_key_return retval = new when_key_return();
         retval.start = input.LT(1);
@@ -13806,15 +13832,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:928:2: ({...}? =>id= ID -> VK_WHEN[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:928:4: {...}? =>id= ID
+            // /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
             {
             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_key4400); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_when_key4403); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13829,7 +13855,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 928:65: -> VK_WHEN[$id]
+            // 971:65: -> VK_WHEN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_WHEN, id));
 
@@ -13862,7 +13888,7 @@
     };
 
     // $ANTLR start rule_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:1: rule_key : {...}? =>id= ID -> VK_RULE[$id] ;
+    // /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] ;
     public final rule_key_return rule_key() throws RecognitionException {
         rule_key_return retval = new rule_key_return();
         retval.start = input.LT(1);
@@ -13875,15 +13901,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:932:2: ({...}? =>id= ID -> VK_RULE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:4: {...}? =>id= ID
+            // /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
             {
             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_key4422); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_rule_key4425); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13898,7 +13924,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 932:65: -> VK_RULE[$id]
+            // 975:65: -> VK_RULE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULE, id));
 
@@ -13931,7 +13957,7 @@
     };
 
     // $ANTLR start template_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:1: template_key : {...}? =>id= ID -> VK_TEMPLATE[$id] ;
+    // /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] ;
     public final template_key_return template_key() throws RecognitionException {
         template_key_return retval = new template_key_return();
         retval.start = input.LT(1);
@@ -13944,15 +13970,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:936:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:936:4: {...}? =>id= ID
+            // /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
             {
             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_key4444); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_template_key4447); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13967,7 +13993,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 936:69: -> VK_TEMPLATE[$id]
+            // 979:69: -> VK_TEMPLATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_TEMPLATE, id));
 
@@ -14000,7 +14026,7 @@
     };
 
     // $ANTLR start query_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:939:1: query_key : {...}? =>id= ID -> VK_QUERY[$id] ;
+    // /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] ;
     public final query_key_return query_key() throws RecognitionException {
         query_key_return retval = new query_key_return();
         retval.start = input.LT(1);
@@ -14013,15 +14039,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:940:2: ({...}? =>id= ID -> VK_QUERY[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:940:4: {...}? =>id= ID
+            // /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
             {
             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_key4466); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_query_key4469); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14036,7 +14062,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 940:66: -> VK_QUERY[$id]
+            // 983:66: -> VK_QUERY[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_QUERY, id));
 
@@ -14069,7 +14095,7 @@
     };
 
     // $ANTLR start declare_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:943:1: declare_key : {...}? =>id= ID -> VK_DECLARE[$id] ;
+    // /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] ;
     public final declare_key_return declare_key() throws RecognitionException {
         declare_key_return retval = new declare_key_return();
         retval.start = input.LT(1);
@@ -14082,15 +14108,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:944:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:944:4: {...}? =>id= ID
+            // /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
             {
             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_key4488); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_declare_key4491); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14105,7 +14131,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 944:68: -> VK_DECLARE[$id]
+            // 987:68: -> VK_DECLARE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DECLARE, id));
 
@@ -14138,7 +14164,7 @@
     };
 
     // $ANTLR start function_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:947:1: function_key : {...}? =>id= ID -> VK_FUNCTION[$id] ;
+    // /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] ;
     public final function_key_return function_key() throws RecognitionException {
         function_key_return retval = new function_key_return();
         retval.start = input.LT(1);
@@ -14151,15 +14177,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:948:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:948:4: {...}? =>id= ID
+            // /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
             {
             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_key4510); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_function_key4513); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14174,7 +14200,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 948:69: -> VK_FUNCTION[$id]
+            // 991:69: -> VK_FUNCTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FUNCTION, id));
 
@@ -14207,7 +14233,7 @@
     };
 
     // $ANTLR start global_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:1: global_key : {...}? =>id= ID -> VK_GLOBAL[$id] ;
+    // /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] ;
     public final global_key_return global_key() throws RecognitionException {
         global_key_return retval = new global_key_return();
         retval.start = input.LT(1);
@@ -14220,15 +14246,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:952:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:952:4: {...}? =>id= ID
+            // /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
             {
             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_key4532); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_global_key4535); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14243,7 +14269,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 952:67: -> VK_GLOBAL[$id]
+            // 995:67: -> VK_GLOBAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_GLOBAL, id));
 
@@ -14276,7 +14302,7 @@
     };
 
     // $ANTLR start eval_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
+    // /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] ;
     public final eval_key_return eval_key() throws RecognitionException {
         eval_key_return retval = new eval_key_return();
         retval.start = input.LT(1);
@@ -14289,15 +14315,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:956:2: ({...}? =>id= ID -> VK_EVAL[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:956:4: {...}? =>id= ID
+            // /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
             {
             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_key4554); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_eval_key4557); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14312,7 +14338,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 956:65: -> VK_EVAL[$id]
+            // 999:65: -> VK_EVAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EVAL, id));
 
@@ -14345,7 +14371,7 @@
     };
 
     // $ANTLR start contains_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
+    // /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] ;
     public final contains_key_return contains_key() throws RecognitionException {
         contains_key_return retval = new contains_key_return();
         retval.start = input.LT(1);
@@ -14358,15 +14384,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:960:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:960:4: {...}? =>id= ID
+            // /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
             {
             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_key4576); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_contains_key4579); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14381,7 +14407,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 960:69: -> VK_CONTAINS[$id]
+            // 1003:69: -> VK_CONTAINS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_CONTAINS, id));
 
@@ -14414,7 +14440,7 @@
     };
 
     // $ANTLR start matches_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:963:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
+    // /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] ;
     public final matches_key_return matches_key() throws RecognitionException {
         matches_key_return retval = new matches_key_return();
         retval.start = input.LT(1);
@@ -14427,15 +14453,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:964:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:964:4: {...}? =>id= ID
+            // /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
             {
             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_key4598); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_matches_key4601); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14450,7 +14476,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 964:68: -> VK_MATCHES[$id]
+            // 1007:68: -> VK_MATCHES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MATCHES, id));
 
@@ -14483,7 +14509,7 @@
     };
 
     // $ANTLR start excludes_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:967:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
+    // /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] ;
     public final excludes_key_return excludes_key() throws RecognitionException {
         excludes_key_return retval = new excludes_key_return();
         retval.start = input.LT(1);
@@ -14496,15 +14522,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:968:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:968:4: {...}? =>id= ID
+            // /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
             {
             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_key4620); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_excludes_key4623); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14519,7 +14545,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 968:69: -> VK_EXCLUDES[$id]
+            // 1011:69: -> VK_EXCLUDES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXCLUDES, id));
 
@@ -14552,7 +14578,7 @@
     };
 
     // $ANTLR start soundslike_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
+    // /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] ;
     public final soundslike_key_return soundslike_key() throws RecognitionException {
         soundslike_key_return retval = new soundslike_key_return();
         retval.start = input.LT(1);
@@ -14565,15 +14591,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:972:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:972:4: {...}? =>id= ID
+            // /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
             {
             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_key4642); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_soundslike_key4645); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14588,7 +14614,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 972:71: -> VK_SOUNDSLIKE[$id]
+            // 1015:71: -> VK_SOUNDSLIKE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SOUNDSLIKE, id));
 
@@ -14621,7 +14647,7 @@
     };
 
     // $ANTLR start memberof_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
+    // /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] ;
     public final memberof_key_return memberof_key() throws RecognitionException {
         memberof_key_return retval = new memberof_key_return();
         retval.start = input.LT(1);
@@ -14634,15 +14660,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:976:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:976:4: {...}? =>id= ID
+            // /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
             {
             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_key4664); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_memberof_key4667); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14657,7 +14683,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 976:69: -> VK_MEMBEROF[$id]
+            // 1019:69: -> VK_MEMBEROF[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MEMBEROF, id));
 
@@ -14690,7 +14716,7 @@
     };
 
     // $ANTLR start not_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
+    // /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] ;
     public final not_key_return not_key() throws RecognitionException {
         not_key_return retval = new not_key_return();
         retval.start = input.LT(1);
@@ -14703,15 +14729,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:980:2: ({...}? =>id= ID -> VK_NOT[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:980:4: {...}? =>id= ID
+            // /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
             {
             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_key4686); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_not_key4689); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14726,7 +14752,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 980:64: -> VK_NOT[$id]
+            // 1023:64: -> VK_NOT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NOT, id));
 
@@ -14759,7 +14785,7 @@
     };
 
     // $ANTLR start in_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
+    // /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] ;
     public final in_key_return in_key() throws RecognitionException {
         in_key_return retval = new in_key_return();
         retval.start = input.LT(1);
@@ -14772,15 +14798,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:984:2: ({...}? =>id= ID -> VK_IN[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:984:4: {...}? =>id= ID
+            // /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
             {
             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_key4708); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_in_key4711); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14795,7 +14821,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 984:63: -> VK_IN[$id]
+            // 1027:63: -> VK_IN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IN, id));
 
@@ -14828,7 +14854,7 @@
     };
 
     // $ANTLR start or_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
+    // /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] ;
     public final or_key_return or_key() throws RecognitionException {
         or_key_return retval = new or_key_return();
         retval.start = input.LT(1);
@@ -14841,15 +14867,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:988:2: ({...}? =>id= ID -> VK_OR[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:988:4: {...}? =>id= ID
+            // /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
             {
             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_key4730); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_or_key4733); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14864,7 +14890,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 988:63: -> VK_OR[$id]
+            // 1031:63: -> VK_OR[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_OR, id));
 
@@ -14897,7 +14923,7 @@
     };
 
     // $ANTLR start and_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
+    // /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] ;
     public final and_key_return and_key() throws RecognitionException {
         and_key_return retval = new and_key_return();
         retval.start = input.LT(1);
@@ -14910,15 +14936,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:992:2: ({...}? =>id= ID -> VK_AND[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:992:4: {...}? =>id= ID
+            // /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
             {
             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_key4752); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_and_key4755); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14933,7 +14959,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 992:64: -> VK_AND[$id]
+            // 1035:64: -> VK_AND[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AND, id));
 
@@ -14966,7 +14992,7 @@
     };
 
     // $ANTLR start exists_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:995:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
+    // /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] ;
     public final exists_key_return exists_key() throws RecognitionException {
         exists_key_return retval = new exists_key_return();
         retval.start = input.LT(1);
@@ -14979,15 +15005,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:996:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:996:4: {...}? =>id= ID
+            // /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
             {
             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_key4774); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_exists_key4777); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15002,7 +15028,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 996:67: -> VK_EXISTS[$id]
+            // 1039:67: -> VK_EXISTS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXISTS, id));
 
@@ -15035,7 +15061,7 @@
     };
 
     // $ANTLR start forall_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
+    // /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] ;
     public final forall_key_return forall_key() throws RecognitionException {
         forall_key_return retval = new forall_key_return();
         retval.start = input.LT(1);
@@ -15048,15 +15074,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:1000:2: ({...}? =>id= ID -> VK_FORALL[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:4: {...}? =>id= ID
+            // /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
             {
             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_key4796); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_forall_key4799); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15071,7 +15097,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1000:67: -> VK_FORALL[$id]
+            // 1043:67: -> VK_FORALL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FORALL, id));
 
@@ -15104,7 +15130,7 @@
     };
 
     // $ANTLR start from_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
+    // /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] ;
     public final from_key_return from_key() throws RecognitionException {
         from_key_return retval = new from_key_return();
         retval.start = input.LT(1);
@@ -15117,15 +15143,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:1004:2: ({...}? =>id= ID -> VK_FROM[$id] )
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:4: {...}? =>id= ID
+            // /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
             {
             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_key4818); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_from_key4821); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15140,7 +15166,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1004:65: -> VK_FROM[$id]
+            // 1047:65: -> VK_FROM[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FROM, id));
 
@@ -15173,7 +15199,7 @@
     };
 
     // $ANTLR start entry_point_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007: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:1050: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);
@@ -15194,23 +15220,23 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010: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:1010:5: {...}? => ID MISC ID
+            // /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
             {
             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_key4841); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_entry_point_key4844); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID335);
 
             MISC336=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_entry_point_key4843); if (failed) return retval;
+            match(input,MISC,FOLLOW_MISC_in_entry_point_key4846); if (failed) return retval;
             if ( backtracking==0 ) stream_MISC.add(MISC336);
 
             ID337=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key4845); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_entry_point_key4848); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID337);
 
             if ( backtracking==0 ) {
@@ -15228,7 +15254,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1011:2: -> VK_ENTRY_POINT[$start, text]
+            // 1054:2: -> VK_ENTRY_POINT[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENTRY_POINT, ((Token)retval.start),  text));
 
@@ -15261,7 +15287,7 @@
     };
 
     // $ANTLR start accumulate_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
+    // /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] ;
     public final accumulate_key_return accumulate_key() throws RecognitionException {
         accumulate_key_return retval = new accumulate_key_return();
         retval.start = input.LT(1);
@@ -15274,15 +15300,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_ACCUMULATE[$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: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
             {
             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_key4870); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_key4873); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15297,7 +15323,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1015:71: -> VK_ACCUMULATE[$id]
+            // 1058:71: -> VK_ACCUMULATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACCUMULATE, id));
 
@@ -15330,7 +15356,7 @@
     };
 
     // $ANTLR start init_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
+    // /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] ;
     public final init_key_return init_key() throws RecognitionException {
         init_key_return retval = new init_key_return();
         retval.start = input.LT(1);
@@ -15343,15 +15369,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_INIT[$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: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
             {
             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_key4892); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_init_key4895); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15366,7 +15392,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1019:65: -> VK_INIT[$id]
+            // 1062:65: -> VK_INIT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_INIT, id));
 
@@ -15399,7 +15425,7 @@
     };
 
     // $ANTLR start action_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
+    // /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] ;
     public final action_key_return action_key() throws RecognitionException {
         action_key_return retval = new action_key_return();
         retval.start = input.LT(1);
@@ -15412,15 +15438,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_ACTION[$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: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
             {
             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_key4914); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_action_key4917); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15435,7 +15461,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1023:67: -> VK_ACTION[$id]
+            // 1066:67: -> VK_ACTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTION, id));
 
@@ -15468,7 +15494,7 @@
     };
 
     // $ANTLR start reverse_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1026:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
+    // /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] ;
     public final reverse_key_return reverse_key() throws RecognitionException {
         reverse_key_return retval = new reverse_key_return();
         retval.start = input.LT(1);
@@ -15481,15 +15507,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_REVERSE[$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: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
             {
             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_key4936); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_reverse_key4939); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15504,7 +15530,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1027:68: -> VK_REVERSE[$id]
+            // 1070:68: -> VK_REVERSE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_REVERSE, id));
 
@@ -15537,7 +15563,7 @@
     };
 
     // $ANTLR start result_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1030:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
+    // /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] ;
     public final result_key_return result_key() throws RecognitionException {
         result_key_return retval = new result_key_return();
         retval.start = input.LT(1);
@@ -15550,15 +15576,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_RESULT[$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: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
             {
             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_key4958); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_result_key4961); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15573,7 +15599,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1031:67: -> VK_RESULT[$id]
+            // 1074:67: -> VK_RESULT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RESULT, id));
 
@@ -15606,7 +15632,7 @@
     };
 
     // $ANTLR start collect_key
-    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
+    // /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] ;
     public final collect_key_return collect_key() throws RecognitionException {
         collect_key_return retval = new collect_key_return();
         retval.start = input.LT(1);
@@ -15619,15 +15645,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_COLLECT[$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: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
             {
             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_key4980); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_collect_key4983); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -15642,7 +15668,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1035:68: -> VK_COLLECT[$id]
+            // 1078:68: -> VK_COLLECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_COLLECT, id));
 
@@ -15671,8 +15697,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:517:5: ( LEFT_PAREN or_key )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:6: LEFT_PAREN or_key
+        // /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
         {
         match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11833); if (failed) return ;
         pushFollow(FOLLOW_or_key_in_synpred11835);
@@ -15686,7 +15712,7 @@
 
     // $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:520:5: ( or_key | DOUBLE_PIPE )
+        // /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);
 
@@ -15699,13 +15725,13 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("520:5: synpred2 : ( or_key | DOUBLE_PIPE );", 99, 0, input);
+                new NoViableAltException("555:5: synpred2 : ( or_key | DOUBLE_PIPE );", 99, 0, input);
 
             throw nvae;
         }
         switch (alt99) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:6: or_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:6: or_key
                 {
                 pushFollow(FOLLOW_or_key_in_synpred21882);
                 or_key();
@@ -15715,7 +15741,7 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:13: DOUBLE_PIPE
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:13: DOUBLE_PIPE
                 {
                 match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21884); if (failed) return ;
 
@@ -15727,8 +15753,8 @@
 
     // $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:527:5: ( LEFT_PAREN and_key )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:6: LEFT_PAREN and_key
+        // /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
         {
         match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31935); if (failed) return ;
         pushFollow(FOLLOW_and_key_in_synpred31937);
@@ -15742,7 +15768,7 @@
 
     // $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:530:5: ( and_key | DOUBLE_AMPER )
+        // /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);
 
@@ -15755,13 +15781,13 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("530:5: synpred4 : ( and_key | DOUBLE_AMPER );", 100, 0, input);
+                new NoViableAltException("565:5: synpred4 : ( and_key | DOUBLE_AMPER );", 100, 0, input);
 
             throw nvae;
         }
         switch (alt100) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:6: and_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:6: and_key
                 {
                 pushFollow(FOLLOW_and_key_in_synpred41984);
                 and_key();
@@ -15771,7 +15797,7 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:14: DOUBLE_AMPER
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:14: DOUBLE_AMPER
                 {
                 match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred41986); if (failed) return ;
 
@@ -15783,8 +15809,8 @@
 
     // $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:543:4: ( SEMICOLON )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:5: SEMICOLON
+        // /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
         {
         match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred52088); if (failed) return ;
 
@@ -15794,11 +15820,11 @@
 
     // $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:548:12: ( LEFT_PAREN ( or_key | and_key ) )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:13: LEFT_PAREN ( or_key | and_key )
+        // /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 )
         {
         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:548:24: ( or_key | and_key )
+        // /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);
 
@@ -15814,7 +15840,7 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("548:24: ( or_key | and_key )", 101, 1, input);
+                    new NoViableAltException("583:24: ( or_key | and_key )", 101, 1, input);
 
                 throw nvae;
             }
@@ -15822,13 +15848,13 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("548:24: ( or_key | and_key )", 101, 0, input);
+                new NoViableAltException("583:24: ( or_key | and_key )", 101, 0, input);
 
             throw nvae;
         }
         switch (alt101) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:25: or_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:25: or_key
                 {
                 pushFollow(FOLLOW_or_key_in_synpred62123);
                 or_key();
@@ -15838,7 +15864,7 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:32: and_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:32: and_key
                 {
                 pushFollow(FOLLOW_and_key_in_synpred62125);
                 and_key();
@@ -15857,11 +15883,11 @@
 
     // $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:556:5: ( LEFT_PAREN ( or_key | and_key ) )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:6: LEFT_PAREN ( or_key | and_key )
+        // /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 )
         {
         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:556:17: ( or_key | and_key )
+        // /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);
 
@@ -15877,7 +15903,7 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("556:17: ( or_key | and_key )", 102, 1, input);
+                    new NoViableAltException("591:17: ( or_key | and_key )", 102, 1, input);
 
                 throw nvae;
             }
@@ -15885,13 +15911,13 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("556:17: ( or_key | and_key )", 102, 0, input);
+                new NoViableAltException("591:17: ( or_key | and_key )", 102, 0, input);
 
             throw nvae;
         }
         switch (alt102) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:18: or_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:591:18: or_key
                 {
                 pushFollow(FOLLOW_or_key_in_synpred72210);
                 or_key();
@@ -15901,7 +15927,7 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:25: and_key
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:591:25: and_key
                 {
                 pushFollow(FOLLOW_and_key_in_synpred72212);
                 and_key();
@@ -15920,8 +15946,8 @@
 
     // $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:639:5: ( LEFT_PAREN )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:6: LEFT_PAREN
+        // /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
         {
         match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82765); if (failed) return ;
 
@@ -15931,8 +15957,8 @@
 
     // $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:648:6: ( LEFT_SQUARE )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:8: LEFT_SQUARE
+        // /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
         {
         match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92826); if (failed) return ;
 
@@ -15942,8 +15968,8 @@
 
     // $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:650:6: ( LEFT_PAREN )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:8: LEFT_PAREN
+        // /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
         {
         match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102848); if (failed) return ;
 
@@ -15951,42 +15977,6 @@
     }
     // $ANTLR end synpred10
 
-    // $ANTLR start synpred11
-    public final void synpred11_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:26: ( DOUBLE_PIPE )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:27: DOUBLE_PIPE
-        {
-        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred113312); if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred11
-
-    // $ANTLR start synpred12
-    public final void synpred12_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:27: ( DOUBLE_AMPER )
-        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:28: DOUBLE_AMPER
-        {
-        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred123338); if (failed) return ;
-
-        }
-    }
-    // $ANTLR end synpred12
-
-    public final boolean synpred12() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred12_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
     public final boolean synpred4() {
         backtracking++;
         int start = input.mark();
@@ -16071,20 +16061,6 @@
         failed=false;
         return success;
     }
-    public final boolean synpred11() {
-        backtracking++;
-        int start = input.mark();
-        try {
-            synpred11_fragment(); // can never throw exception
-        } catch (RecognitionException re) {
-            System.err.println("impossible: "+re);
-        }
-        boolean success = !failed;
-        input.rewind(start);
-        backtracking--;
-        failed=false;
-        return success;
-    }
     public final boolean synpred5() {
         backtracking++;
         int start = input.mark();
@@ -16146,12 +16122,12 @@
     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 DFA65 dfa65 = new DFA65(this);
-    protected DFA67 dfa67 = new DFA67(this);
     protected DFA80 dfa80 = new DFA80(this);
     protected DFA81 dfa81 = new DFA81(this);
     static final String DFA12_eotS =
@@ -16213,7 +16189,7 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "332:23: ( parameters )?";
+            return "367:23: ( parameters )?";
         }
     }
     static final String DFA17_eotS =
@@ -16267,7 +16243,7 @@
             this.transition = DFA17_transition;
         }
         public String getDescription() {
-            return "351:4: ( data_type )?";
+            return "386:4: ( data_type )?";
         }
     }
     static final String DFA28_eotS =
@@ -16275,41 +16251,41 @@
     static final String DFA28_eofS =
         "\33\uffff";
     static final String DFA28_minS =
-        "\2\130\3\uffff\1\4\1\130\3\uffff\1\4\1\0\1\uffff\1\0\3\4\2\0\1\4"+
+        "\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";
     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\3\u0080\2\0\1\u0080\1\0\2\u0080\4\0";
+        "\0\1\u0080\2\0\3\u0080\1\0\2\u0080\4\0";
     static final String DFA28_acceptS =
-        "\2\uffff\1\2\2\1\2\uffff\1\2\2\1\2\uffff\1\1\16\uffff";
+        "\2\uffff\1\2\2\1\2\uffff\2\1\1\2\2\uffff\1\1\16\uffff";
     static final String DFA28_specialS =
-        "\1\13\1\1\3\uffff\1\12\1\5\3\uffff\1\2\1\4\1\uffff\1\7\1\16\1\11"+
-        "\1\3\1\6\1\14\1\17\1\0\1\15\1\10\4\uffff}>";
+        "\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}>";
     static final String[] DFA28_transitionS = {
             "\1\1\33\uffff\1\2",
-            "\1\7\3\uffff\1\11\1\5\3\uffff\1\6\1\uffff\1\10\1\4\17\uffff"+
-            "\1\7\2\uffff\1\3",
+            "\1\11\3\uffff\1\7\1\5\3\uffff\1\6\1\uffff\1\10\1\4\17\uffff"+
+            "\1\11\2\uffff\1\3",
             "",
             "",
             "",
             "\124\14\1\12\4\14\1\13\43\14",
-            "\1\15\4\uffff\1\7\26\uffff\1\7",
+            "\1\15\4\uffff\1\11\26\uffff\1\11",
             "",
             "",
             "",
-            "\124\14\1\22\1\17\3\14\1\21\3\14\1\16\20\14\1\20\16\14",
+            "\124\14\1\20\1\21\3\14\1\17\3\14\1\16\20\14\1\22\16\14",
             "\1\uffff",
             "",
             "\1\uffff",
             "\124\14\1\23\4\14\1\24\43\14",
-            "\124\14\1\25\50\14",
-            "\157\14\1\26\15\14",
             "\1\uffff",
             "\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",
             "\1\uffff",
-            "\125\14\1\17\3\14\1\32\24\14\1\20\16\14",
-            "\131\14\1\32\24\14\1\20\16\14",
+            "\125\14\1\21\3\14\1\32\24\14\1\22\16\14",
+            "\131\14\1\32\24\14\1\22\16\14",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -16346,27 +16322,159 @@
             this.transition = DFA28_transition;
         }
         public String getDescription() {
-            return "417:21: ( rule_attributes )?";
+            return "452:21: ( rule_attributes )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA28_20 = input.LA(1);
+                        int LA28_16 = input.LA(1);
 
                          
-                        int index28_20 = input.index();
+                        int index28_16 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
 
                          
-                        input.seek(index28_20);
+                        input.seek(index28_16);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
+                        int LA28_5 = input.LA(1);
+
+                         
+                        int index28_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA28_5==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 10;}
+
+                        else if ( (LA28_5==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 11;}
+
+                        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;}
+
+                         
+                        input.seek(index28_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA28_19 = input.LA(1);
+
+                         
+                        int index28_19 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA28_19==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 23;}
+
+                        else if ( (LA28_19==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 24;}
+
+                        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);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA28_22 = input.LA(1);
+
+                         
+                        int index28_22 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA28_22==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 26;}
+
+                        else if ( (LA28_22==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+
+                        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;}
+
+                         
+                        input.seek(index28_22);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA28_15 = input.LA(1);
+
+                         
+                        int index28_15 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+
+                         
+                        input.seek(index28_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA28_21 = input.LA(1);
+
+                         
+                        int index28_21 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA28_21==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+
+                        else if ( (LA28_21==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 26;}
+
+                        else if ( (LA28_21==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+
+                        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;}
+
+                         
+                        input.seek(index28_21);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA28_0 = input.LA(1);
+
+                         
+                        int index28_0 = 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;}
+
+                        else if ( (LA28_0==THEN) ) {s = 2;}
+
+                         
+                        input.seek(index28_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA28_6 = input.LA(1);
+
+                         
+                        int index28_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA28_6==LEFT_PAREN||LA28_6==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 9;}
+
+                        else if ( (LA28_6==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))))) {s = 13;}
+
+                         
+                        input.seek(index28_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA28_11 = input.LA(1);
+
+                         
+                        int index28_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+
+                         
+                        input.seek(index28_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
                         int LA28_1 = input.LA(1);
 
                          
@@ -16381,17 +16489,49 @@
 
                         else if ( (LA28_1==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))))) {s = 6;}
 
-                        else if ( (LA28_1==ID||LA28_1==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 7;}
+                        else if ( (LA28_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 7;}
 
                         else if ( (LA28_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 8;}
 
-                        else if ( (LA28_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 9;}
+                        else if ( (LA28_1==ID||LA28_1==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 9;}
 
                          
                         input.seek(index28_1);
                         if ( s>=0 ) return s;
                         break;
-                    case 2 : 
+                    case 10 : 
+                        int LA28_14 = input.LA(1);
+
+                         
+                        int index28_14 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA28_14==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
+
+                        else if ( (LA28_14==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 20;}
+
+                        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);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        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;}
+
+                        else if ( ((LA28_17>=VT_COMPILATION_UNIT && LA28_17<=SEMICOLON)||(LA28_17>=DOT && LA28_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+
+                         
+                        input.seek(index28_17);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
                         int LA28_10 = input.LA(1);
 
                          
@@ -16400,233 +16540,399 @@
                         s = -1;
                         if ( (LA28_10==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 14;}
 
-                        else if ( (LA28_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 15;}
+                        else if ( (LA28_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 15;}
 
-                        else if ( (LA28_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
+                        else if ( (LA28_10==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
 
-                        else if ( (LA28_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+                        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;}
 
-                        else if ( (LA28_10==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+                        else if ( (LA28_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
 
-                        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;}
+                        else if ( (LA28_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
 
                          
                         input.seek(index28_10);
                         if ( s>=0 ) return s;
                         break;
-                    case 3 : 
-                        int LA28_16 = input.LA(1);
+                    case 13 : 
+                        int LA28_18 = input.LA(1);
 
                          
-                        int index28_16 = input.index();
+                        int index28_18 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_16==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 22;}
+                        if ( (LA28_18==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 22;}
 
-                        else if ( ((LA28_16>=VT_COMPILATION_UNIT && LA28_16<=LEFT_SQUARE)||(LA28_16>=THEN && LA28_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( ((LA28_18>=VT_COMPILATION_UNIT && LA28_18<=LEFT_SQUARE)||(LA28_18>=THEN && LA28_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
 
                          
-                        input.seek(index28_16);
+                        input.seek(index28_18);
                         if ( s>=0 ) return s;
                         break;
-                    case 4 : 
-                        int LA28_11 = input.LA(1);
+                    case 14 : 
+                        int LA28_13 = input.LA(1);
 
                          
-                        int index28_11 = input.index();
+                        int index28_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))) ) {s = 12;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
 
                          
-                        input.seek(index28_11);
+                        input.seek(index28_13);
                         if ( s>=0 ) return s;
                         break;
-                    case 5 : 
-                        int LA28_6 = input.LA(1);
+                    case 15 : 
+                        int LA28_20 = input.LA(1);
 
                          
-                        int index28_6 = input.index();
+                        int index28_20 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_6==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))))) {s = 13;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
 
-                        else if ( (LA28_6==LEFT_PAREN||LA28_6==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 7;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
 
                          
-                        input.seek(index28_6);
+                        input.seek(index28_20);
                         if ( s>=0 ) return s;
                         break;
-                    case 6 : 
-                        int LA28_17 = input.LA(1);
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 28, _s, input);
+            error(nvae);
+            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 = {
+            "\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",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\124\14\1\12\4\14\1\13\43\14",
+            "",
+            "",
+            "\124\14\1\17\1\20\3\14\1\16\3\14\1\15\20\14\1\21\16\14",
+            "\1\uffff",
+            "",
+            "\124\14\1\22\4\14\1\23\43\14",
+            "\1\uffff",
+            "\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",
+            "\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",
+            "\1\uffff",
+            "\1\uffff",
+            "\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 {
+        int numStates = DFA34_transitionS.length;
+        DFA34_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA34_transition[i] = DFA.unpackEncodedString(DFA34_transitionS[i]);
+        }
+    }
+
+    class DFA34 extends DFA {
+
+        public DFA34(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;
+        }
+        public String getDescription() {
+            return "()* loopback of 469: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 index28_17 = input.index();
+                        int index34_15 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
 
                          
-                        input.seek(index28_17);
+                        input.seek(index34_15);
                         if ( s>=0 ) return s;
                         break;
-                    case 7 : 
-                        int LA28_13 = input.LA(1);
+                    case 1 : 
+                        int LA34_7 = input.LA(1);
 
                          
-                        int index28_13 = input.index();
+                        int index34_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))) ) {s = 12;}
+                        if ( (LA34_7==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 10;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
+                        else if ( (LA34_7==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 11;}
 
+                        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(index28_13);
+                        input.seek(index34_7);
                         if ( s>=0 ) return s;
                         break;
-                    case 8 : 
-                        int LA28_22 = input.LA(1);
+                    case 2 : 
+                        int LA34_1 = input.LA(1);
 
                          
-                        int index28_22 = input.index();
+                        int index34_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_22==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 26;}
+                        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;}
 
-                        else if ( (LA28_22==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
+                        else if ( (LA34_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 5;}
 
-                        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 ( (LA34_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 6;}
 
+                        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(index28_22);
+                        input.seek(index34_1);
                         if ( s>=0 ) return s;
                         break;
-                    case 9 : 
-                        int LA28_15 = input.LA(1);
+                    case 3 : 
+                        int LA34_18 = input.LA(1);
 
                          
-                        int index28_15 = input.index();
+                        int index34_18 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_15==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 21;}
+                        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;}
 
-                        else if ( ((LA28_15>=VT_COMPILATION_UNIT && LA28_15<=SEMICOLON)||(LA28_15>=DOT && LA28_15<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( (LA34_18==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 22;}
 
+                        else if ( (LA34_18==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 23;}
+
+                        else if ( (LA34_18==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 24;}
+
                          
-                        input.seek(index28_15);
+                        input.seek(index34_18);
                         if ( s>=0 ) return s;
                         break;
-                    case 10 : 
-                        int LA28_5 = input.LA(1);
+                    case 4 : 
+                        int LA34_21 = input.LA(1);
 
                          
-                        int index28_5 = input.index();
+                        int index34_21 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_5==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 10;}
+                        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;}
 
-                        else if ( (LA28_5==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 11;}
+                        else if ( (LA34_21==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
 
-                        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 ( (LA34_21==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
 
                          
-                        input.seek(index28_5);
+                        input.seek(index34_21);
                         if ( s>=0 ) return s;
                         break;
-                    case 11 : 
-                        int LA28_0 = input.LA(1);
+                    case 5 : 
+                        int LA34_0 = input.LA(1);
 
                          
-                        int index28_0 = input.index();
+                        int index34_0 = 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.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {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;}
 
-                        else if ( (LA28_0==THEN) ) {s = 2;}
+                        else if ( (LA34_0==THEN) ) {s = 2;}
 
+                        else if ( (LA34_0==COMMA) ) {s = 3;}
+
                          
-                        input.seek(index28_0);
+                        input.seek(index34_0);
                         if ( s>=0 ) return s;
                         break;
-                    case 12 : 
-                        int LA28_18 = input.LA(1);
+                    case 6 : 
+                        int LA34_14 = input.LA(1);
 
                          
-                        int index28_18 = input.index();
+                        int index34_14 = input.index();
                         input.rewind();
                         s = -1;
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
 
                          
-                        input.seek(index28_18);
+                        input.seek(index34_14);
                         if ( s>=0 ) return s;
                         break;
-                    case 13 : 
-                        int LA28_21 = input.LA(1);
+                    case 7 : 
+                        int LA34_20 = input.LA(1);
 
                          
-                        int index28_21 = input.index();
+                        int index34_20 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_21==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
+                        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;}
 
-                        else if ( (LA28_21==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 26;}
+                        else if ( (LA34_20==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
 
-                        else if ( (LA28_21==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 15;}
+                        else if ( (LA34_20==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
 
-                        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 ( (LA34_20==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
 
                          
-                        input.seek(index28_21);
+                        input.seek(index34_20);
                         if ( s>=0 ) return s;
                         break;
-                    case 14 : 
-                        int LA28_14 = input.LA(1);
+                    case 8 : 
+                        int LA34_11 = input.LA(1);
 
                          
-                        int index28_14 = input.index();
+                        int index34_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_14==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
 
-                        else if ( (LA28_14==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 20;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
 
-                        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(index34_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA34_13 = input.LA(1);
 
                          
-                        input.seek(index28_14);
+                        int index34_13 = 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;}
+
+                        else if ( (LA34_13==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+
+                        else if ( (LA34_13==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
+
+                         
+                        input.seek(index34_13);
                         if ( s>=0 ) return s;
                         break;
-                    case 15 : 
-                        int LA28_19 = input.LA(1);
+                    case 10 : 
+                        int LA34_16 = input.LA(1);
 
                          
-                        int index28_19 = input.index();
+                        int index34_16 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA28_19==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 23;}
+                        if ( (LA34_16==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 20;}
 
-                        else if ( (LA28_19==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 24;}
+                        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 ( (LA28_19==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
+                         
+                        input.seek(index34_16);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA34_10 = input.LA(1);
 
-                        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;}
+                         
+                        int index34_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA34_10==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 13;}
 
+                        else if ( (LA34_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 14;}
+
+                        else if ( (LA34_10==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 15;}
+
+                        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;}
+
+                        else if ( (LA34_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
+
+                        else if ( (LA34_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+
                          
-                        input.seek(index28_19);
+                        input.seek(index34_10);
                         if ( s>=0 ) return s;
                         break;
+                    case 12 : 
+                        int LA34_17 = input.LA(1);
+
+                         
+                        int index34_17 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA34_17==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 21;}
+
+                        else if ( ((LA34_17>=VT_COMPILATION_UNIT && LA34_17<=LEFT_SQUARE)||(LA34_17>=THEN && LA34_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+
+                         
+                        input.seek(index34_17);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 13 : 
+                        int LA34_19 = input.LA(1);
+
+                         
+                        int index34_19 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+
+                         
+                        input.seek(index34_19);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 28, _s, input);
+                new NoViableAltException(getDescription(), 34, _s, input);
             error(nvae);
             throw nvae;
         }
@@ -16636,41 +16942,41 @@
     static final String DFA51_eofS =
         "\172\uffff";
     static final String DFA51_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\4\11\130\1\0\2\uffff\1\131\1\135"+
-        "\1\130\1\0\2\130\1\4\11\130\1\0\1\uffff\1\130\1\4\12\0\1\uffff\14"+
-        "\0\1\uffff\17\0\1\uffff\17\0";
+        "\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\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\u0080\1\130\7\161\1\130\1\0\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\u0080"+
-        "\12\0\1\uffff\14\0\1\uffff\17\0\1\uffff\17\0";
+        "\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 =
-        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\36\uffff\2\3\21\uffff\1\3\14"+
-        "\uffff\1\3\14\uffff\1\3\17\uffff\1\3\17\uffff";
+        "\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\4\1\1\1\2\1\uffff\1\7\22\uffff\1\11\1\0\4\uffff\1\10"+
-        "\1\5\13\uffff\1\6\5\uffff\1\12\14\uffff\1\3\72\uffff}>";
+        "\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 = {
             "\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",
+            "\1\11\1\6\3\uffff\1\10\3\uffff\1\5\20\uffff\1\7",
             "\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",
@@ -16685,8 +16991,8 @@
             "\1\57",
             "\1\60",
             "\1\61\4\uffff\1\62\1\uffff\1\63",
-            "\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\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\uffff",
             "\1\uffff",
             "\1\101",
@@ -16705,22 +17011,22 @@
             "",
             "\1\33\3\uffff\1\35\24\uffff\1\34",
             "\1\35\24\uffff\1\34",
-            "\1\122\1\121\3\uffff\1\117\3\uffff\1\116\7\uffff\1\123\1\124"+
-            "\1\125\1\126\1\127\1\130\1\131\2\uffff\1\120",
+            "\1\121\1\120\3\uffff\1\131\3\uffff\1\116\7\uffff\1\122\1\123"+
+            "\1\124\1\125\1\126\1\127\1\130\2\uffff\1\117",
             "\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\143\3\uffff\1\146\1\145\5\uffff\2\146\12\uffff\1\144\2\146",
-            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
-            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
-            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
-            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
-            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
-            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
-            "\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"+
@@ -16754,6 +17060,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -16765,7 +17072,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -16813,145 +17119,130 @@
             this.transition = DFA51_transition;
         }
         public String getDescription() {
-            return "548:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "583: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_26 = input.LA(1);
+                        int LA51_44 = input.LA(1);
 
                          
-                        int index51_26 = input.index();
+                        int index51_44 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 77;}
 
                          
-                        input.seek(index51_26);
+                        input.seek(index51_44);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA51_3 = input.LA(1);
+                        int LA51_53 = input.LA(1);
 
                          
-                        int index51_3 = input.index();
+                        int index51_53 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (true) ) {s = 95;}
 
                          
-                        input.seek(index51_3);
+                        input.seek(index51_53);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA51_4 = input.LA(1);
+                        int LA51_2 = input.LA(1);
 
                          
-                        int index51_4 = input.index();
+                        int index51_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (LA51_2==COLON) ) {s = 5;}
 
-                        else if ( (true) ) {s = 11;}
+                        else if ( (LA51_2==DOT) ) {s = 6;}
 
+                        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_4);
+                        input.seek(index51_2);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA51_63 = input.LA(1);
+                        int LA51_4 = input.LA(1);
 
                          
-                        int index51_63 = input.index();
+                        int index51_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 106;}
+                        else if ( (true) ) {s = 11;}
 
                          
-                        input.seek(index51_63);
+                        input.seek(index51_4);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA51_2 = input.LA(1);
+                        int LA51_8 = input.LA(1);
 
                          
-                        int index51_2 = input.index();
+                        int index51_8 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA51_2==COLON) ) {s = 5;}
+                        if ( ((synpred6()||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL))))) ) {s = 9;}
 
-                        else if ( (LA51_2==LEFT_PAREN) ) {s = 6;}
+                        else if ( (true) ) {s = 16;}
 
-                        else if ( (LA51_2==ID) && (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierK!
 ey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 7;}
-
-                        else if ( (LA51_2==DOT) ) {s = 8;}
-
-                        else if ( (LA51_2==LEFT_SQUARE) ) {s = 9;}
-
                          
-                        input.seek(index51_2);
+                        input.seek(index51_8);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA51_32 = input.LA(1);
+                        int LA51_26 = input.LA(1);
 
                          
-                        int index51_32 = input.index();
+                        int index51_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
                         else if ( (true) ) {s = 46;}
 
                          
-                        input.seek(index51_32);
+                        input.seek(index51_26);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA51_44 = input.LA(1);
+                        int LA51_3 = input.LA(1);
 
                          
-                        int index51_44 = input.index();
+                        int index51_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 77;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index51_44);
+                        input.seek(index51_3);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA51_6 = input.LA(1);
-
-                         
-                        int index51_6 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||synpred6()||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL))))) ) {s = 7;}
-
-                        else if ( (true) ) {s = 14;}
-
-                         
-                        input.seek(index51_6);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 8 : 
                         int LA51_31 = input.LA(1);
 
                          
                         int index51_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
                         else if ( (true) ) {s = 64;}
 
@@ -16959,14 +17250,14 @@
                         input.seek(index51_31);
                         if ( s>=0 ) return s;
                         break;
-                    case 9 : 
+                    case 8 : 
                         int LA51_25 = input.LA(1);
 
                          
                         int index51_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
                         else if ( (true) ) {s = 45;}
 
@@ -16974,14 +17265,14 @@
                         input.seek(index51_25);
                         if ( s>=0 ) return s;
                         break;
-                    case 10 : 
+                    case 9 : 
                         int LA51_50 = input.LA(1);
 
                          
                         int index51_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
                         else if ( (true) ) {s = 90;}
 
@@ -16989,6 +17280,21 @@
                         input.seek(index51_50);
                         if ( s>=0 ) return s;
                         break;
+                    case 10 : 
+                        int LA51_32 = input.LA(1);
+
+                         
+                        int index51_32 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred6()) ) {s = 9;}
+
+                        else if ( (true) ) {s = 46;}
+
+                         
+                        input.seek(index51_32);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
@@ -17002,41 +17308,41 @@
     static final String DFA52_eofS =
         "\172\uffff";
     static final String DFA52_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\4\11\130\1\0\1\uffff\1\130\1\4\12\0\1\uffff\14\0\1\uffff"+
-        "\17\0\1\uffff\17\0";
+        "\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 =
-        "\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\u0080\1\130\7\161\1\130\1\0\1\uffff\1\162\1\u0080"+
-        "\12\0\1\uffff\14\0\1\uffff\17\0\1\uffff\17\0";
+        "\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 =
-        "\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\17\uffff\1\3\17\uffff";
+        "\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\2\1\0\1\1\3\uffff\1\3\20\uffff\1\10\1\4\4\uffff\1\7\1"+
-        "\6\13\uffff\1\5\5\uffff\1\11\14\uffff\1\12\72\uffff}>";
+        "\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 = {
             "\1\2\4\uffff\1\1",
-            "\1\3\4\uffff\1\4",
-            "\1\11\1\6\3\uffff\1\10\3\uffff\1\5\20\uffff\1\7",
+            "\1\4\4\uffff\1\3",
+            "\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",
@@ -17044,29 +17350,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\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\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\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",
@@ -17076,22 +17382,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\143\3\uffff\1\144\1\145\5\uffff\2\144\12\uffff\1\146\2\144",
-            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
-            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
-            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
-            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
-            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
-            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
-            "\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"+
             "\1\153",
-            "\156\102\1\103\1\104\15\102",
+            "",
+            "\156\103\1\104\1\105\15\103",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17102,7 +17409,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17120,6 +17426,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17131,7 +17438,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17179,19 +17485,34 @@
             this.transition = DFA52_transition;
         }
         public String getDescription() {
-            return "556:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "591: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 index52_34 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred7()) ) {s = 7;}
+
+                        else if ( (true) ) {s = 66;}
+
+                         
+                        input.seek(index52_34);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
                         int LA52_3 = input.LA(1);
 
                          
                         int index52_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 9;}
+                        if ( (synpred7()) ) {s = 7;}
 
                         else if ( (true) ) {s = 10;}
 
@@ -17199,14 +17520,14 @@
                         input.seek(index52_3);
                         if ( s>=0 ) return s;
                         break;
-                    case 1 : 
+                    case 2 : 
                         int LA52_4 = input.LA(1);
 
                          
                         int index52_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 9;}
+                        if ( (synpred7()) ) {s = 7;}
 
                         else if ( (true) ) {s = 11;}
 
@@ -17214,7 +17535,7 @@
                         input.seek(index52_4);
                         if ( s>=0 ) return s;
                         break;
-                    case 2 : 
+                    case 3 : 
                         int LA52_2 = input.LA(1);
 
                          
@@ -17223,41 +17544,41 @@
                         s = -1;
                         if ( (LA52_2==COLON) ) {s = 5;}
 
-                        else if ( (LA52_2==DOT) ) {s = 6;}
+                        else if ( (LA52_2==LEFT_PAREN) ) {s = 6;}
 
-                        else if ( (LA52_2==LEFT_SQUARE) ) {s = 7;}
+                        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==LEFT_PAREN) ) {s = 8;}
+                        else if ( (LA52_2==DOT) ) {s = 8;}
 
-                        else if ( (LA52_2==ID) && (((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()&&(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.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifi!
 erKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 9;}
+                        else if ( (LA52_2==LEFT_SQUARE) ) {s = 9;}
 
                          
                         input.seek(index52_2);
                         if ( s>=0 ) return s;
                         break;
-                    case 3 : 
-                        int LA52_8 = input.LA(1);
+                    case 4 : 
+                        int LA52_53 = input.LA(1);
 
                          
-                        int index52_8 = input.index();
+                        int index52_53 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||synpred7()||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT))))) ) {s = 9;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 16;}
+                        else if ( (true) ) {s = 95;}
 
                          
-                        input.seek(index52_8);
+                        input.seek(index52_53);
                         if ( s>=0 ) return s;
                         break;
-                    case 4 : 
+                    case 5 : 
                         int LA52_26 = input.LA(1);
 
                          
                         int index52_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 9;}
+                        if ( (synpred7()) ) {s = 7;}
 
                         else if ( (true) ) {s = 46;}
 
@@ -17265,49 +17586,34 @@
                         input.seek(index52_26);
                         if ( s>=0 ) return s;
                         break;
-                    case 5 : 
-                        int LA52_44 = input.LA(1);
-
-                         
-                        int index52_44 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred7()) ) {s = 9;}
-
-                        else if ( (true) ) {s = 77;}
-
-                         
-                        input.seek(index52_44);
-                        if ( s>=0 ) return s;
-                        break;
                     case 6 : 
-                        int LA52_32 = input.LA(1);
+                        int LA52_31 = input.LA(1);
 
                          
-                        int index52_32 = input.index();
+                        int index52_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 9;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 64;}
 
                          
-                        input.seek(index52_32);
+                        input.seek(index52_31);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA52_31 = input.LA(1);
+                        int LA52_50 = input.LA(1);
 
                          
-                        int index52_31 = input.index();
+                        int index52_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 9;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 64;}
+                        else if ( (true) ) {s = 90;}
 
                          
-                        input.seek(index52_31);
+                        input.seek(index52_50);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
@@ -17317,7 +17623,7 @@
                         int index52_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 9;}
+                        if ( (synpred7()) ) {s = 7;}
 
                         else if ( (true) ) {s = 45;}
 
@@ -17326,33 +17632,33 @@
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA52_50 = input.LA(1);
+                        int LA52_32 = input.LA(1);
 
                          
-                        int index52_50 = input.index();
+                        int index52_32 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 9;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 90;}
+                        else if ( (true) ) {s = 46;}
 
                          
-                        input.seek(index52_50);
+                        input.seek(index52_32);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA52_63 = input.LA(1);
+                        int LA52_6 = input.LA(1);
 
                          
-                        int index52_63 = input.index();
+                        int index52_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 9;}
+                        if ( (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||synpred7()||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL))))) ) {s = 7;}
 
-                        else if ( (true) ) {s = 106;}
+                        else if ( (true) ) {s = 14;}
 
                          
-                        input.seek(index52_63);
+                        input.seek(index52_6);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -17374,7 +17680,7 @@
     static final String DFA59_acceptS =
         "\7\uffff\1\1\2\2\1\1";
     static final String DFA59_specialS =
-        "\4\uffff\1\2\1\1\1\0\4\uffff}>";
+        "\4\uffff\1\0\1\1\1\2\4\uffff}>";
     static final String[] DFA59_transitionS = {
             "\1\1",
             "\1\2",
@@ -17419,24 +17725,24 @@
             this.transition = DFA59_transition;
         }
         public String getDescription() {
-            return "600:3: ( accumulate_init_clause | accumulate_id_clause )";
+            return "635: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_6 = input.LA(1);
+                        int LA59_4 = input.LA(1);
 
                          
-                        int index59_6 = input.index();
+                        int index59_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(index59_4);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
@@ -17455,18 +17761,18 @@
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA59_4 = input.LA(1);
+                        int LA59_6 = input.LA(1);
 
                          
-                        int index59_4 = input.index();
+                        int index59_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {s = 7;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {s = 10;}
 
-                        else if ( (true) ) {s = 8;}
+                        else if ( (true) ) {s = 9;}
 
                          
-                        input.seek(index59_4);
+                        input.seek(index59_6);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -17486,16 +17792,16 @@
     static final String DFA63_maxS =
         "\1\130\1\135\2\u0080\1\0\1\137\1\0\4\uffff";
     static final String DFA63_acceptS =
-        "\7\uffff\1\1\2\2\1\1";
+        "\7\uffff\1\1\1\2\1\1\1\2";
     static final String DFA63_specialS =
-        "\1\5\1\0\1\6\1\4\1\3\1\2\1\1\4\uffff}>";
+        "\1\5\1\3\1\2\1\4\1\0\1\1\1\6\4\uffff}>";
     static final String[] DFA63_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\12\5\uffff\1\12\1\11",
+            "\1\11\5\uffff\1\11\1\12",
             "\1\uffff",
             "",
             "",
@@ -17533,67 +17839,69 @@
             this.transition = DFA63_transition;
         }
         public String getDescription() {
-            return "611:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
+            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_1 = input.LA(1);
+                        int LA63_4 = input.LA(1);
 
                          
-                        int index63_1 = input.index();
+                        int index63_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA63_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 2;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 7;}
 
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 8;}
+
                          
-                        input.seek(index63_1);
+                        input.seek(index63_4);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA63_6 = input.LA(1);
+                        int LA63_5 = input.LA(1);
 
                          
-                        int index63_6 = input.index();
+                        int index63_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 10;}
+                        if ( (LA63_5==ID||LA63_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.REVERSE)))) {s = 9;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 9;}
+                        else if ( (LA63_5==RIGHT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.RESULT)))) {s = 10;}
 
                          
-                        input.seek(index63_6);
+                        input.seek(index63_5);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA63_5 = input.LA(1);
+                        int LA63_2 = input.LA(1);
 
                          
-                        int index63_5 = input.index();
+                        int index63_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA63_5==RIGHT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.RESULT)))) {s = 9;}
+                        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_5==ID||LA63_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.REVERSE)))) {s = 10;}
+                        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_5);
+                        input.seek(index63_2);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA63_4 = input.LA(1);
+                        int LA63_1 = input.LA(1);
 
                          
-                        int index63_4 = input.index();
+                        int index63_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 7;}
+                        if ( (LA63_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 2;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 8;}
-
                          
-                        input.seek(index63_4);
+                        input.seek(index63_1);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
@@ -17627,20 +17935,18 @@
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA63_2 = input.LA(1);
+                        int LA63_6 = input.LA(1);
 
                          
-                        int index63_2 = input.index();
+                        int index63_6 = 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;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 9;}
 
-                        else if ( (LA63_2==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 4;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 10;}
 
-                        else if ( (LA63_2==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 5;}
-
                          
-                        input.seek(index63_2);
+                        input.seek(index63_6);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -17664,8 +17970,8 @@
     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\0\1\uffff\1\4\1\12\2\uffff\1\6\1\13\1\10\1\5\1\7\1\11"+
-        "\1\1\1\3\1\uffff\1\2\4\uffff}>";
+        "\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",
@@ -17679,7 +17985,7 @@
             "\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\23\1\5\1\6\22\5\1\22\16\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",
             "",
@@ -17720,31 +18026,12 @@
             this.transition = DFA65_transition;
         }
         public String getDescription() {
-            return "639:3: ( ( LEFT_PAREN )=>args= paren_chunk )?";
+            return "674:3: ( ( LEFT_PAREN )=>args= paren_chunk )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA65_1 = input.LA(1);
-
-                         
-                        int index65_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA65_1==ID) ) {s = 3;}
-
-                        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 1 : 
                         int LA65_13 = input.LA(1);
 
                          
@@ -17759,110 +18046,37 @@
                         input.seek(index65_13);
                         if ( s>=0 ) return s;
                         break;
-                    case 2 : 
-                        int LA65_16 = input.LA(1);
+                    case 1 : 
+                        int LA65_4 = input.LA(1);
 
                          
-                        int index65_16 = input.index();
+                        int index65_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA65_16==LEFT_PAREN) ) {s = 20;}
+                        if ( (synpred8()) ) {s = 6;}
 
-                        else if ( (LA65_16==LEFT_SQUARE) ) {s = 11;}
+                        else if ( (true) ) {s = 2;}
 
-                        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);
+                        input.seek(index65_4);
                         if ( s>=0 ) return s;
                         break;
-                    case 3 : 
-                        int LA65_14 = input.LA(1);
+                    case 2 : 
+                        int LA65_9 = input.LA(1);
 
                          
-                        int index65_14 = input.index();
+                        int index65_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA65_14==LEFT_SQUARE) ) {s = 11;}
+                        if ( (synpred8()) ) {s = 6;}
 
-                        else if ( (LA65_14==LEFT_PAREN) ) {s = 20;}
+                        else if ( (true) ) {s = 2;}
 
-                        else if ( (LA65_14==DOT) ) {s = 10;}
-
-                        else if ( (LA65_14==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        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);
+                        input.seek(index65_9);
                         if ( s>=0 ) return s;
                         break;
-                    case 4 : 
-                        int LA65_3 = input.LA(1);
-
-                         
-                        int index65_3 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA65_3==COLON) ) {s = 7;}
-
-                        else if ( (LA65_3==LEFT_PAREN) ) {s = 8;}
-
-                        else if ( (LA65_3==ID) ) {s = 9;}
-
-                        else if ( (LA65_3==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( (LA65_3==DOT) ) {s = 10;}
-
-                        else if ( (LA65_3==LEFT_SQUARE) ) {s = 11;}
-
-                        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 5 : 
-                        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;
-                    case 6 : 
-                        int LA65_7 = input.LA(1);
-
-                         
-                        int index65_7 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA65_7==ID) ) {s = 12;}
-
-                        else if ( (LA65_7==LEFT_PAREN) ) {s = 13;}
-
-                        else if ( (LA65_7==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        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 7 : 
+                    case 3 : 
                         int LA65_11 = input.LA(1);
 
                          
@@ -17881,452 +18095,207 @@
                         input.seek(index65_11);
                         if ( s>=0 ) return s;
                         break;
-                    case 8 : 
-                        int LA65_9 = input.LA(1);
+                    case 4 : 
+                        int LA65_16 = input.LA(1);
 
                          
-                        int index65_9 = input.index();
+                        int index65_16 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred8()) ) {s = 6;}
+                        if ( (LA65_16==LEFT_PAREN) ) {s = 20;}
 
-                        else if ( (true) ) {s = 2;}
+                        else if ( (LA65_16==LEFT_SQUARE) ) {s = 11;}
 
-                         
-                        input.seek(index65_9);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 9 : 
-                        int LA65_12 = input.LA(1);
+                        else if ( (LA65_16==RIGHT_PAREN) && (synpred8())) {s = 6;}
 
-                         
-                        int index65_12 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA65_12==DOT) ) {s = 17;}
+                        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;}
 
-                        else if ( (LA65_12==LEFT_SQUARE) ) {s = 18;}
-
-                        else if ( (LA65_12==LEFT_PAREN) ) {s = 19;}
-
-                        else if ( (LA65_12==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        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_16);
                         if ( s>=0 ) return s;
                         break;
-                    case 10 : 
-                        int LA65_4 = input.LA(1);
-
-                         
-                        int index65_4 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 6;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index65_4);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 11 : 
-                        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;
-            }
-            if (backtracking>0) {failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 65, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA67_eotS =
-        "\26\uffff";
-    static final String DFA67_eofS =
-        "\26\uffff";
-    static final String DFA67_minS =
-        "\1\127\1\uffff\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 DFA67_maxS =
-        "\1\164\1\uffff\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 DFA67_acceptS =
-        "\1\uffff\1\1\1\uffff\1\3\2\uffff\2\2\10\uffff\1\2\5\uffff";
-    static final String DFA67_specialS =
-        "\1\10\1\uffff\1\7\1\uffff\1\14\1\4\2\uffff\1\12\1\3\1\11\1\13\1"+
-        "\5\1\6\1\2\1\0\1\uffff\1\1\4\uffff}>";
-    static final String[] DFA67_transitionS = {
-            "\3\3\1\uffff\1\3\1\uffff\1\2\2\3\5\uffff\2\3\13\uffff\1\1\1"+
-            "\uffff\1\3",
-            "",
-            "\124\6\1\4\4\6\1\5\1\6\1\7\41\6",
-            "",
-            "\124\6\1\11\1\13\3\6\1\12\1\6\1\7\1\6\1\10\20\6\1\14\16\6",
-            "\1\uffff",
-            "",
-            "",
-            "\124\6\1\15\4\6\1\16\1\6\1\7\41\6",
-            "\1\uffff",
-            "\1\uffff",
-            "\124\6\1\17\4\6\1\20\1\6\1\7\41\6",
-            "\131\6\1\20\1\6\1\7\23\6\1\21\15\6",
-            "\125\6\1\22\3\6\1\24\1\6\1\7\22\6\1\23\16\6",
-            "\1\uffff",
-            "\125\6\1\13\3\6\1\25\1\6\1\7\22\6\1\14\16\6",
-            "",
-            "\131\6\1\25\1\6\1\7\22\6\1\14\16\6",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff"
-    };
-
-    static final short[] DFA67_eot = DFA.unpackEncodedString(DFA67_eotS);
-    static final short[] DFA67_eof = DFA.unpackEncodedString(DFA67_eofS);
-    static final char[] DFA67_min = DFA.unpackEncodedStringToUnsignedChars(DFA67_minS);
-    static final char[] DFA67_max = DFA.unpackEncodedStringToUnsignedChars(DFA67_maxS);
-    static final short[] DFA67_accept = DFA.unpackEncodedString(DFA67_acceptS);
-    static final short[] DFA67_special = DFA.unpackEncodedString(DFA67_specialS);
-    static final short[][] DFA67_transition;
-
-    static {
-        int numStates = DFA67_transitionS.length;
-        DFA67_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA67_transition[i] = DFA.unpackEncodedString(DFA67_transitionS[i]);
-        }
-    }
-
-    class DFA67 extends DFA {
-
-        public DFA67(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 67;
-            this.eot = DFA67_eot;
-            this.eof = DFA67_eof;
-            this.min = DFA67_min;
-            this.max = DFA67_max;
-            this.accept = DFA67_accept;
-            this.special = DFA67_special;
-            this.transition = DFA67_transition;
-        }
-        public String getDescription() {
-            return "647:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?";
-        }
-        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA67_15 = input.LA(1);
-
-                         
-                        int index67_15 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA67_15==LEFT_SQUARE) ) {s = 12;}
-
-                        else if ( (LA67_15==LEFT_PAREN) ) {s = 21;}
-
-                        else if ( (LA67_15==DOT) ) {s = 11;}
-
-                        else if ( (LA67_15==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                        else if ( ((LA67_15>=VT_COMPILATION_UNIT && LA67_15<=ID)||(LA67_15>=DOT_STAR && LA67_15<=STRING)||LA67_15==COMMA||(LA67_15>=AT && LA67_15<=NULL)||(LA67_15>=RIGHT_SQUARE && LA67_15<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                         
-                        input.seek(index67_15);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA67_17 = input.LA(1);
-
-                         
-                        int index67_17 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA67_17==LEFT_PAREN) ) {s = 21;}
-
-                        else if ( (LA67_17==LEFT_SQUARE) ) {s = 12;}
-
-                        else if ( (LA67_17==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                        else if ( ((LA67_17>=VT_COMPILATION_UNIT && LA67_17<=STRING)||LA67_17==COMMA||(LA67_17>=AT && LA67_17<=NULL)||(LA67_17>=RIGHT_SQUARE && LA67_17<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                         
-                        input.seek(index67_17);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA67_14 = input.LA(1);
-
-                         
-                        int index67_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 16;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index67_14);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA67_9 = input.LA(1);
-
-                         
-                        int index67_9 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 7;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index67_9);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA67_5 = input.LA(1);
-
-                         
-                        int index67_5 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 7;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index67_5);
-                        if ( s>=0 ) return s;
-                        break;
                     case 5 : 
-                        int LA67_12 = input.LA(1);
+                        int LA65_1 = input.LA(1);
 
                          
-                        int index67_12 = input.index();
+                        int index65_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA67_12==RIGHT_SQUARE) ) {s = 17;}
+                        if ( (LA65_1==ID) ) {s = 3;}
 
-                        else if ( (LA67_12==RIGHT_PAREN) && (synpred10())) {s = 7;}
+                        else if ( (LA65_1==LEFT_PAREN) ) {s = 4;}
 
-                        else if ( ((LA67_12>=VT_COMPILATION_UNIT && LA67_12<=STRING)||LA67_12==COMMA||(LA67_12>=AT && LA67_12<=LEFT_SQUARE)||(LA67_12>=THEN && LA67_12<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+                        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 ( (LA67_12==LEFT_PAREN) && (synpred10())) {s = 16;}
+                        else if ( (LA65_1==RIGHT_PAREN) && (synpred8())) {s = 6;}
 
                          
-                        input.seek(index67_12);
+                        input.seek(index65_1);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA67_13 = input.LA(1);
+                        int LA65_12 = input.LA(1);
 
                          
-                        int index67_13 = input.index();
+                        int index65_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA67_13==DOT) ) {s = 18;}
+                        if ( (LA65_12==RIGHT_PAREN) && (synpred8())) {s = 6;}
 
-                        else if ( (LA67_13==LEFT_SQUARE) ) {s = 19;}
+                        else if ( (LA65_12==DOT) ) {s = 17;}
 
-                        else if ( (LA67_13==LEFT_PAREN) ) {s = 20;}
+                        else if ( (LA65_12==LEFT_PAREN) ) {s = 18;}
 
-                        else if ( (LA67_13==RIGHT_PAREN) && (synpred10())) {s = 7;}
+                        else if ( (LA65_12==LEFT_SQUARE) ) {s = 19;}
 
-                        else if ( ((LA67_13>=VT_COMPILATION_UNIT && LA67_13<=ID)||(LA67_13>=DOT_STAR && LA67_13<=STRING)||LA67_13==COMMA||(LA67_13>=AT && LA67_13<=NULL)||(LA67_13>=RIGHT_SQUARE && LA67_13<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+                        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(index67_13);
+                        input.seek(index65_12);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA67_2 = input.LA(1);
+                        int LA65_14 = input.LA(1);
 
                          
-                        int index67_2 = input.index();
+                        int index65_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA67_2==ID) ) {s = 4;}
+                        if ( (LA65_14==RIGHT_PAREN) && (synpred8())) {s = 6;}
 
-                        else if ( (LA67_2==LEFT_PAREN) ) {s = 5;}
+                        else if ( (LA65_14==LEFT_SQUARE) ) {s = 11;}
 
-                        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())) {s = 6;}
+                        else if ( (LA65_14==LEFT_PAREN) ) {s = 20;}
 
-                        else if ( (LA67_2==RIGHT_PAREN) && (synpred10())) {s = 7;}
+                        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(index67_2);
+                        input.seek(index65_14);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA67_0 = input.LA(1);
+                        int LA65_7 = input.LA(1);
 
                          
-                        int index67_0 = input.index();
+                        int index65_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA67_0==LEFT_SQUARE) && (synpred9())) {s = 1;}
+                        if ( (LA65_7==RIGHT_PAREN) && (synpred8())) {s = 6;}
 
-                        else if ( (LA67_0==LEFT_PAREN) ) {s = 2;}
+                        else if ( (LA65_7==ID) ) {s = 12;}
 
-                        else if ( ((LA67_0>=SEMICOLON && LA67_0<=DOT)||LA67_0==END||(LA67_0>=COMMA && LA67_0<=RIGHT_PAREN)||(LA67_0>=DOUBLE_PIPE && LA67_0<=DOUBLE_AMPER)||LA67_0==THEN) ) {s = 3;}
+                        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(index67_0);
+                        input.seek(index65_7);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA67_10 = input.LA(1);
+                        int LA65_8 = input.LA(1);
 
                          
-                        int index67_10 = input.index();
+                        int index65_8 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred10()) ) {s = 7;}
+                        if ( (synpred8()) ) {s = 6;}
 
-                        else if ( (true) ) {s = 3;}
+                        else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index67_10);
+                        input.seek(index65_8);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA67_8 = input.LA(1);
+                        int LA65_3 = input.LA(1);
 
                          
-                        int index67_8 = input.index();
+                        int index65_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA67_8==ID) ) {s = 13;}
+                        if ( (LA65_3==COLON) ) {s = 7;}
 
-                        else if ( (LA67_8==LEFT_PAREN) ) {s = 14;}
+                        else if ( (LA65_3==LEFT_PAREN) ) {s = 8;}
 
-                        else if ( (LA67_8==RIGHT_PAREN) && (synpred10())) {s = 7;}
+                        else if ( (LA65_3==ID) ) {s = 9;}
 
-                        else if ( ((LA67_8>=VT_COMPILATION_UNIT && LA67_8<=SEMICOLON)||(LA67_8>=DOT && LA67_8<=STRING)||LA67_8==COMMA||(LA67_8>=AT && LA67_8<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+                        else if ( (LA65_3==DOT) ) {s = 10;}
 
-                         
-                        input.seek(index67_8);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 11 : 
-                        int LA67_11 = input.LA(1);
+                        else if ( (LA65_3==LEFT_SQUARE) ) {s = 11;}
 
-                         
-                        int index67_11 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA67_11==ID) ) {s = 15;}
+                        else if ( (LA65_3==RIGHT_PAREN) && (synpred8())) {s = 6;}
 
-                        else if ( (LA67_11==RIGHT_PAREN) && (synpred10())) {s = 7;}
+                        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;}
 
-                        else if ( ((LA67_11>=VT_COMPILATION_UNIT && LA67_11<=SEMICOLON)||(LA67_11>=DOT && LA67_11<=STRING)||LA67_11==COMMA||(LA67_11>=AT && LA67_11<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                        else if ( (LA67_11==LEFT_PAREN) && (synpred10())) {s = 16;}
-
                          
-                        input.seek(index67_11);
+                        input.seek(index65_3);
                         if ( s>=0 ) return s;
                         break;
-                    case 12 : 
-                        int LA67_4 = input.LA(1);
+                    case 11 : 
+                        int LA65_10 = input.LA(1);
 
                          
-                        int index67_4 = input.index();
+                        int index65_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA67_4==COLON) ) {s = 8;}
+                        if ( (LA65_10==ID) ) {s = 14;}
 
-                        else if ( (LA67_4==ID) ) {s = 9;}
+                        else if ( (LA65_10==RIGHT_PAREN) && (synpred8())) {s = 6;}
 
-                        else if ( (LA67_4==LEFT_PAREN) ) {s = 10;}
+                        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 ( (LA67_4==DOT) ) {s = 11;}
+                        else if ( (LA65_10==LEFT_PAREN) && (synpred8())) {s = 15;}
 
-                        else if ( (LA67_4==LEFT_SQUARE) ) {s = 12;}
-
-                        else if ( (LA67_4==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                        else if ( ((LA67_4>=VT_COMPILATION_UNIT && LA67_4<=SEMICOLON)||(LA67_4>=DOT_STAR && LA67_4<=STRING)||LA67_4==COMMA||LA67_4==AT||(LA67_4>=EQUALS && LA67_4<=NULL)||(LA67_4>=RIGHT_SQUARE && LA67_4<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
                          
-                        input.seek(index67_4);
+                        input.seek(index65_10);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 67, _s, input);
+                new NoViableAltException(getDescription(), 65, _s, input);
             error(nvae);
             throw nvae;
         }
     }
     static final String DFA80_eotS =
-        "\45\uffff";
+        "\30\uffff";
     static final String DFA80_eofS =
-        "\45\uffff";
+        "\30\uffff";
     static final String DFA80_minS =
-        "\1\136\1\uffff\2\130\1\0\7\uffff\1\130\1\uffff\1\0\1\130\1\4\2\0"+
-        "\6\uffff\1\162\1\4\2\0\1\4\7\0";
+        "\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\7\uffff\1\162\1\uffff\1\0\1\130\1"+
-        "\u0080\2\0\6\uffff\1\162\1\u0080\2\0\1\u0080\7\0";
+        "\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\7\1\1\uffff\1\1\5\uffff\6\1\14\uffff";
+        "\1\uffff\1\2\3\uffff\1\1\22\uffff";
     static final String DFA80_specialS =
-        "\2\uffff\1\5\1\3\1\0\7\uffff\1\10\1\uffff\1\1\2\uffff\1\7\1\6\10"+
-        "\uffff\1\4\1\2\10\uffff}>";
+        "\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 = {
             "\2\1\5\uffff\1\2\1\1",
             "",
-            "\1\3\4\uffff\1\4\13\uffff\1\5\1\6\1\7\1\10\1\11\1\12\1\13",
-            "\1\14\1\1\2\uffff\1\15\1\16\3\uffff\1\1\1\uffff\2\15\4\uffff"+
-            "\6\1\1\17\2\15\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\21\1\24\2\uffff\1\22\1\20\1\27\1\30\3\uffff\2\22\1\26\1\25"+
-            "\10\uffff\1\1\2\22\1\23",
-            "",
+            "\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\31",
-            "\124\36\1\32\3\36\1\35\1\33\1\36\1\34\3\36\2\35\13\36\2\35\17"+
-            "\36",
+            "\1\14",
             "\1\uffff",
             "\1\uffff",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\37",
-            "\125\36\1\41\3\36\1\44\1\42\1\43\22\36\1\40\16\36",
+            "\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",
             "\1\uffff",
             "\1\uffff",
-            "\131\36\1\44\1\42\1\43\41\36",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18366,93 +18335,63 @@
             this.transition = DFA80_transition;
         }
         public String getDescription() {
-            return "()* loopback of 720:25: ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*";
+            return "()* loopback of 755:25: ({...}? => DOUBLE_PIPE and_restr_connective )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA80_4 = input.LA(1);
+                        int LA80_6 = input.LA(1);
 
                          
-                        int index80_4 = input.index();
+                        int index80_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 13;}
+                        if ( (LA80_6==ID) ) {s = 9;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( (LA80_6==STRING||(LA80_6>=BOOL && LA80_6<=INT)||(LA80_6>=FLOAT && LA80_6<=NULL)) ) {s = 10;}
 
-                         
-                        input.seek(index80_4);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA80_14 = input.LA(1);
+                        else if ( (LA80_6==LEFT_PAREN) ) {s = 11;}
 
-                         
-                        int index80_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred11()) ) {s = 24;}
+                        else if ( (LA80_6==GRAVE_ACCENT) ) {s = 1;}
 
-                        else if ( (true) ) {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;}
 
                          
-                        input.seek(index80_14);
+                        input.seek(index80_6);
                         if ( s>=0 ) return s;
                         break;
-                    case 2 : 
-                        int LA80_28 = input.LA(1);
+                    case 1 : 
+                        int LA80_7 = input.LA(1);
 
                          
-                        int index80_28 = input.index();
+                        int index80_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 24;}
+                        if ( ((validateRestr())) ) {s = 5;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index80_28);
+                        input.seek(index80_7);
                         if ( s>=0 ) return s;
                         break;
-                    case 3 : 
-                        int LA80_3 = input.LA(1);
+                    case 2 : 
+                        int LA80_9 = input.LA(1);
 
                          
-                        int index80_3 = input.index();
+                        int index80_9 = 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 ( ((validateRestr())) ) {s = 5;}
 
-                        else if ( (LA80_3==ID) ) {s = 12;}
-
-                        else if ( (LA80_3==STRING||(LA80_3>=BOOL && LA80_3<=INT)||(LA80_3>=FLOAT && LA80_3<=NULL)) && (synpred11())) {s = 13;}
-
-                        else if ( (LA80_3==LEFT_PAREN) ) {s = 14;}
-
-                        else if ( (LA80_3==GRAVE_ACCENT) ) {s = 15;}
-
-                         
-                        input.seek(index80_3);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA80_27 = input.LA(1);
-
-                         
-                        int index80_27 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred11()) ) {s = 24;}
-
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index80_27);
+                        input.seek(index80_9);
                         if ( s>=0 ) return s;
                         break;
-                    case 5 : 
+                    case 3 : 
                         int LA80_2 = input.LA(1);
 
                          
@@ -18463,83 +18402,61 @@
 
                         else if ( (LA80_2==LEFT_PAREN) ) {s = 4;}
 
-                        else if ( (LA80_2==EQUAL) && (synpred11())) {s = 5;}
+                        else if ( ((LA80_2>=EQUAL && LA80_2<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 5;}
 
-                        else if ( (LA80_2==GREATER) && (synpred11())) {s = 6;}
-
-                        else if ( (LA80_2==GREATER_EQUAL) && (synpred11())) {s = 7;}
-
-                        else if ( (LA80_2==LESS) && (synpred11())) {s = 8;}
-
-                        else if ( (LA80_2==LESS_EQUAL) && (synpred11())) {s = 9;}
-
-                        else if ( (LA80_2==NOT_EQUAL) && (synpred11())) {s = 10;}
-
-                        else if ( (LA80_2==GRAVE_ACCENT) && (synpred11())) {s = 11;}
-
                          
                         input.seek(index80_2);
                         if ( s>=0 ) return s;
                         break;
-                    case 6 : 
-                        int LA80_18 = input.LA(1);
+                    case 4 : 
+                        int LA80_10 = input.LA(1);
 
                          
-                        int index80_18 = input.index();
+                        int index80_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 24;}
+                        if ( ((validateRestr())) ) {s = 5;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index80_18);
+                        input.seek(index80_10);
                         if ( s>=0 ) return s;
                         break;
-                    case 7 : 
-                        int LA80_17 = input.LA(1);
+                    case 5 : 
+                        int LA80_4 = input.LA(1);
 
                          
-                        int index80_17 = input.index();
+                        int index80_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 24;}
+                        if ( ((validateRestr())) ) {s = 5;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index80_17);
+                        input.seek(index80_4);
                         if ( s>=0 ) return s;
                         break;
-                    case 8 : 
-                        int LA80_12 = input.LA(1);
+                    case 6 : 
+                        int LA80_3 = input.LA(1);
 
                          
-                        int index80_12 = input.index();
+                        int index80_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA80_12==LEFT_PAREN) ) {s = 16;}
+                        if ( (LA80_3==DOT||LA80_3==COLON||(LA80_3>=EQUAL && LA80_3<=NOT_EQUAL)||LA80_3==LEFT_SQUARE) ) {s = 1;}
 
-                        else if ( (LA80_12==ID) ) {s = 17;}
+                        else if ( (LA80_3==ID) ) {s = 6;}
 
-                        else if ( (LA80_12==STRING||(LA80_12>=BOOL && LA80_12<=INT)||(LA80_12>=FLOAT && LA80_12<=NULL)) ) {s = 18;}
+                        else if ( (LA80_3==STRING||(LA80_3>=BOOL && LA80_3<=INT)||(LA80_3>=FLOAT && LA80_3<=NULL)) && ((validateRestr()))) {s = 5;}
 
-                        else if ( (LA80_12==GRAVE_ACCENT) ) {s = 1;}
+                        else if ( (LA80_3==LEFT_PAREN) ) {s = 7;}
 
-                        else if ( (LA80_12==LEFT_SQUARE) && (synpred11())) {s = 19;}
+                        else if ( (LA80_3==GRAVE_ACCENT) ) {s = 8;}
 
-                        else if ( (LA80_12==DOT) && (synpred11())) {s = 20;}
-
-                        else if ( (LA80_12==DOUBLE_AMPER) && (synpred11())) {s = 21;}
-
-                        else if ( (LA80_12==DOUBLE_PIPE) && (synpred11())) {s = 22;}
-
-                        else if ( (LA80_12==COMMA) && (synpred11())) {s = 23;}
-
-                        else if ( (LA80_12==RIGHT_PAREN) && (synpred11())) {s = 24;}
-
                          
-                        input.seek(index80_12);
+                        input.seek(index80_3);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -18551,72 +18468,46 @@
         }
     }
     static final String DFA81_eotS =
-        "\103\uffff";
+        "\50\uffff";
     static final String DFA81_eofS =
-        "\103\uffff";
+        "\50\uffff";
     static final String DFA81_minS =
-        "\1\136\1\uffff\2\130\7\uffff\2\130\1\uffff\1\4\2\130\7\uffff\3\0"+
-        "\1\4\6\uffff\1\4\2\0\3\4\10\0\1\uffff\22\0";
+        "\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\7\uffff\1\157\1\162\1\uffff\1\u0080\1"+
-        "\130\1\162\7\uffff\3\0\1\u0080\6\uffff\1\u0080\2\0\3\u0080\10\0"+
-        "\1\uffff\22\0";
+        "\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\7\1\2\uffff\1\1\3\uffff\7\1\4\uffff\6\1\16"+
-        "\uffff\1\1\22\uffff";
+        "\1\uffff\1\2\2\uffff\1\1\43\uffff";
     static final String DFA81_specialS =
-        "\2\uffff\1\11\1\6\7\uffff\1\0\1\10\3\uffff\1\5\7\uffff\1\4\1\7\1"+
-        "\2\10\uffff\1\1\1\3\36\uffff}>";
+        "\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 = {
             "\2\1\5\uffff\1\1\1\2",
             "",
-            "\1\3\4\uffff\1\13\13\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
-            "\1\14\1\1\2\uffff\1\15\1\16\3\uffff\1\1\1\uffff\2\15\4\uffff"+
-            "\6\1\1\17\2\15\1\1",
+            "\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\20\4\uffff\1\30\13\uffff\1\21\1\22\1\23\1\24\1\25\1\26\1"+
-            "\27",
-            "\1\31\1\35\2\uffff\1\32\1\33\1\40\1\41\3\uffff\2\32\1\36\1\37"+
-            "\10\uffff\1\1\2\32\1\34",
-            "",
-            "\124\55\1\42\3\55\1\45\1\43\1\55\1\44\3\55\2\45\4\55\1\46\1"+
-            "\47\1\50\1\51\1\52\1\53\1\54\2\45\17\55",
-            "\1\56",
-            "\1\57\1\1\2\uffff\1\60\1\61\3\uffff\1\1\1\uffff\2\60\4\uffff"+
-            "\6\1\1\62\2\60\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\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",
             "\1\uffff",
             "\1\uffff",
-            "\124\67\1\63\3\67\1\66\1\64\1\67\1\65\3\67\2\66\13\67\2\66\17"+
-            "\67",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\124\55\1\70\1\75\2\55\1\71\1\72\1\76\1\73\3\55\2\71\12\55\1"+
-            "\77\2\71\1\74\16\55",
+            "\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\uffff",
             "\1\uffff",
-            "\131\55\1\100\1\76\1\73\41\55",
-            "\124\55\1\101\3\55\1\71\1\102\1\55\1\44\3\55\2\71\13\55\2\71"+
-            "\17\55",
-            "\124\55\1\101\3\55\1\71\1\102\1\55\1\44\3\55\2\71\13\55\2\71"+
-            "\17\55",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18625,7 +18516,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18639,10 +18529,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
             "\1\uffff"
     };
 
@@ -18676,215 +18562,151 @@
             this.transition = DFA81_transition;
         }
         public String getDescription() {
-            return "()* loopback of 724:26: ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*";
+            return "()* loopback of 759:26: ({...}? => DOUBLE_AMPER constraint_expression )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA81_11 = input.LA(1);
+                        int LA81_13 = input.LA(1);
 
                          
-                        int index81_11 = input.index();
+                        int index81_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA81_11==ID) ) {s = 16;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
-                        else if ( (LA81_11==EQUAL) && (synpred12())) {s = 17;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( (LA81_11==GREATER) && (synpred12())) {s = 18;}
-
-                        else if ( (LA81_11==GREATER_EQUAL) && (synpred12())) {s = 19;}
-
-                        else if ( (LA81_11==LESS) && (synpred12())) {s = 20;}
-
-                        else if ( (LA81_11==LESS_EQUAL) && (synpred12())) {s = 21;}
-
-                        else if ( (LA81_11==NOT_EQUAL) && (synpred12())) {s = 22;}
-
-                        else if ( (LA81_11==GRAVE_ACCENT) && (synpred12())) {s = 23;}
-
-                        else if ( (LA81_11==LEFT_PAREN) ) {s = 24;}
-
                          
-                        input.seek(index81_11);
+                        input.seek(index81_13);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA81_35 = input.LA(1);
+                        int LA81_2 = input.LA(1);
 
                          
-                        int index81_35 = input.index();
+                        int index81_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred12()) ) {s = 48;}
+                        if ( (LA81_2==ID) ) {s = 3;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( ((LA81_2>=EQUAL && LA81_2<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 4;}
 
+                        else if ( (LA81_2==LEFT_PAREN) ) {s = 5;}
+
                          
-                        input.seek(index81_35);
+                        input.seek(index81_2);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA81_26 = input.LA(1);
+                        int LA81_9 = input.LA(1);
 
                          
-                        int index81_26 = input.index();
+                        int index81_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred12()) ) {s = 48;}
+                        if ( (LA81_9==DOT||LA81_9==COLON||(LA81_9>=EQUAL && LA81_9<=NOT_EQUAL)||LA81_9==LEFT_SQUARE) ) {s = 1;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( (LA81_9==LEFT_PAREN) ) {s = 27;}
 
+                        else if ( (LA81_9==ID) ) {s = 28;}
+
+                        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_26);
+                        input.seek(index81_9);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA81_36 = input.LA(1);
+                        int LA81_3 = input.LA(1);
 
                          
-                        int index81_36 = input.index();
+                        int index81_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred12()) ) {s = 48;}
+                        if ( (LA81_3==DOT||LA81_3==COLON||(LA81_3>=EQUAL && LA81_3<=NOT_EQUAL)||LA81_3==LEFT_SQUARE) ) {s = 1;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( (LA81_3==LEFT_PAREN) ) {s = 6;}
 
+                        else if ( (LA81_3==ID) ) {s = 7;}
+
+                        else if ( (LA81_3==GRAVE_ACCENT) ) {s = 8;}
+
+                        else if ( (LA81_3==STRING||(LA81_3>=BOOL && LA81_3<=INT)||(LA81_3>=FLOAT && LA81_3<=NULL)) && ((validateRestr()))) {s = 4;}
+
                          
-                        input.seek(index81_36);
+                        input.seek(index81_3);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA81_24 = input.LA(1);
+                        int LA81_10 = input.LA(1);
 
                          
-                        int index81_24 = input.index();
+                        int index81_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred12()) ) {s = 48;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index81_24);
+                        input.seek(index81_10);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA81_16 = input.LA(1);
+                        int LA81_7 = input.LA(1);
 
                          
-                        int index81_16 = input.index();
+                        int index81_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA81_16==DOT||LA81_16==COLON||(LA81_16>=EQUAL && LA81_16<=NOT_EQUAL)||LA81_16==LEFT_SQUARE) ) {s = 1;}
+                        if ( (LA81_7==ID) ) {s = 23;}
 
-                        else if ( (LA81_16==ID) ) {s = 47;}
+                        else if ( (LA81_7==STRING||(LA81_7>=BOOL && LA81_7<=INT)||(LA81_7>=FLOAT && LA81_7<=NULL)) ) {s = 24;}
 
-                        else if ( (LA81_16==STRING||(LA81_16>=BOOL && LA81_16<=INT)||(LA81_16>=FLOAT && LA81_16<=NULL)) && (synpred12())) {s = 48;}
+                        else if ( (LA81_7==LEFT_PAREN) ) {s = 25;}
 
-                        else if ( (LA81_16==LEFT_PAREN) ) {s = 49;}
+                        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;}
 
-                        else if ( (LA81_16==GRAVE_ACCENT) ) {s = 50;}
+                        else if ( (LA81_7==GRAVE_ACCENT) ) {s = 1;}
 
                          
-                        input.seek(index81_16);
+                        input.seek(index81_7);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA81_3 = input.LA(1);
-
-                         
-                        int index81_3 = 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;}
-
-                        else if ( (LA81_3==ID) ) {s = 12;}
-
-                        else if ( (LA81_3==STRING||(LA81_3>=BOOL && LA81_3<=INT)||(LA81_3>=FLOAT && LA81_3<=NULL)) && (synpred12())) {s = 13;}
-
-                        else if ( (LA81_3==LEFT_PAREN) ) {s = 14;}
-
-                        else if ( (LA81_3==GRAVE_ACCENT) ) {s = 15;}
-
-                         
-                        input.seek(index81_3);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 7 : 
-                        int LA81_25 = input.LA(1);
-
-                         
-                        int index81_25 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred12()) ) {s = 48;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index81_25);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 8 : 
                         int LA81_12 = input.LA(1);
 
                          
                         int index81_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA81_12==ID) ) {s = 25;}
+                        if ( ((validateRestr())) ) {s = 4;}
 
-                        else if ( (LA81_12==STRING||(LA81_12>=BOOL && LA81_12<=INT)||(LA81_12>=FLOAT && LA81_12<=NULL)) ) {s = 26;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( (LA81_12==LEFT_PAREN) ) {s = 27;}
-
-                        else if ( (LA81_12==GRAVE_ACCENT) ) {s = 1;}
-
-                        else if ( (LA81_12==LEFT_SQUARE) && (synpred12())) {s = 28;}
-
-                        else if ( (LA81_12==DOT) && (synpred12())) {s = 29;}
-
-                        else if ( (LA81_12==DOUBLE_PIPE) && (synpred12())) {s = 30;}
-
-                        else if ( (LA81_12==DOUBLE_AMPER) && (synpred12())) {s = 31;}
-
-                        else if ( (LA81_12==COMMA) && (synpred12())) {s = 32;}
-
-                        else if ( (LA81_12==RIGHT_PAREN) && (synpred12())) {s = 33;}
-
                          
                         input.seek(index81_12);
                         if ( s>=0 ) return s;
                         break;
-                    case 9 : 
-                        int LA81_2 = input.LA(1);
+                    case 7 : 
+                        int LA81_5 = input.LA(1);
 
                          
-                        int index81_2 = input.index();
+                        int index81_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA81_2==ID) ) {s = 3;}
+                        if ( (LA81_5==ID) ) {s = 9;}
 
-                        else if ( (LA81_2==EQUAL) && (synpred12())) {s = 4;}
+                        else if ( ((LA81_5>=EQUAL && LA81_5<=GRAVE_ACCENT)) && ((validateRestr()))) {s = 4;}
 
-                        else if ( (LA81_2==GREATER) && (synpred12())) {s = 5;}
+                        else if ( (LA81_5==LEFT_PAREN) ) {s = 10;}
 
-                        else if ( (LA81_2==GREATER_EQUAL) && (synpred12())) {s = 6;}
-
-                        else if ( (LA81_2==LESS) && (synpred12())) {s = 7;}
-
-                        else if ( (LA81_2==LESS_EQUAL) && (synpred12())) {s = 8;}
-
-                        else if ( (LA81_2==NOT_EQUAL) && (synpred12())) {s = 9;}
-
-                        else if ( (LA81_2==GRAVE_ACCENT) && (synpred12())) {s = 10;}
-
-                        else if ( (LA81_2==LEFT_PAREN) ) {s = 11;}
-
                          
-                        input.seek(index81_2);
+                        input.seek(index81_5);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -19171,150 +18993,150 @@
     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_connective3316 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3319 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3334 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective3342 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3345 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression3367 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression3372 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression3377 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression3380 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression3382 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EQUAL_in_simple_operator3394 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_GREATER_in_simple_operator3400 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator3406 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_LESS_in_simple_operator3412 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator3418 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator3424 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_not_key_in_simple_operator3430 = new BitSet(new long[]{0x0000000000000000L,0x0000800001000000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator3433 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3436 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator3439 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator3442 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3446 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3451 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3454 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator3457 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator3463 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_excludes_key_in_simple_operator3469 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator3475 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3481 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator3487 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3493 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3499 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3502 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator3505 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_expression_value_in_simple_operator3509 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator3524 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_not_key_in_compound_operator3529 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator3531 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3536 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3539 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator3543 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3546 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3551 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_expression_value3562 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value3567 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_value3573 = new BitSet(new long[]{0x0000000000000002L});
+    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_set_in_literal_constraint0 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_pattern_type3617 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
-    public static final BitSet FOLLOW_DOT_in_pattern_type3623 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_pattern_type3627 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
-    public static final BitSet FOLLOW_dimension_definition_in_pattern_type3642 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
-    public static final BitSet FOLLOW_ID_in_data_type3668 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
-    public static final BitSet FOLLOW_DOT_in_data_type3672 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_data_type3674 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
-    public static final BitSet FOLLOW_dimension_definition_in_data_type3679 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3705 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3707 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path3718 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
-    public static final BitSet FOLLOW_DOT_in_accessor_path3722 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path3724 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
-    public static final BitSet FOLLOW_ID_in_accessor_element3748 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_accessor_element3750 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3779 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3798 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_set_in_rhs_chunk_data3802 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_END_in_rhs_chunk_data3808 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3810 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3827 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3846 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_set_in_curly_chunk_data3849 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3863 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3868 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3884 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3904 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_set_in_paren_chunk_data3907 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3921 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3926 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3943 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data3962 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_set_in_square_chunk_data3965 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data3979 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data3984 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key4003 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_effective_key4005 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key4007 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key4033 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_expires_key4035 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key4037 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key4063 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key4065 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key4067 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key4069 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key4071 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key4097 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_no_loop_key4099 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key4101 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key4127 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_auto_focus_key4129 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key4131 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key4157 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_activation_group_key4159 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key4161 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key4187 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_agenda_group_key4189 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key4191 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key4217 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key4219 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key4221 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_duration_key4246 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_package_key4268 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_key4290 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dialect_key4312 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_salience_key4334 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enabled_key4356 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_attributes_key4378 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_when_key4400 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_key4422 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_template_key4444 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_query_key4466 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_declare_key4488 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_function_key4510 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_global_key4532 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_eval_key4554 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_contains_key4576 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_matches_key4598 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_excludes_key4620 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_soundslike_key4642 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_memberof_key4664 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_not_key4686 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_in_key4708 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_or_key4730 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_and_key4752 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_exists_key4774 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_forall_key4796 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_key4818 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key4841 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
-    public static final BitSet FOLLOW_MISC_in_entry_point_key4843 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key4845 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_key4870 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_init_key4892 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_action_key4914 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_reverse_key4936 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_result_key4958 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_collect_key4980 = 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});
@@ -19333,7 +19155,5 @@
     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_DOUBLE_PIPE_in_synpred113312 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred123338 = 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-07-23 16:17:30 UTC (rev 21198)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2008-07-23 17:27:03 UTC (rev 21199)
@@ -133,6 +133,7 @@
 	private List<DroolsParserException> errors = new ArrayList<DroolsParserException>();
 	private DroolsParserExceptionFactory errorMessageFactory = new DroolsParserExceptionFactory(tokenNames, paraphrases);
 	private String source = "unknown";
+	private boolean lookaheadTest = false;
 
 	private boolean validateLT(int LTNumber, String text) {
 		if (null == input)
@@ -160,6 +161,40 @@
 		}
 	}
 	
+	private boolean validateRestr() {
+		int lookahead = 2;
+		int countParen = 1;
+
+		while (true) {
+			if (input.LA(lookahead) == COMMA) {
+				break;
+			} else if (input.LA(lookahead) == LEFT_PAREN) {
+				countParen++;
+			} else if (input.LA(lookahead) == RIGHT_PAREN) {
+				countParen--;
+			}
+			if (countParen == 0){
+				break;
+			}
+			lookahead++;
+		}
+		
+		boolean returnValue = false;
+		int activeIndex = input.index();
+		lookaheadTest = true;
+		try {
+			input.seek(input.LT(2).getTokenIndex());
+			constraint_expression();
+			returnValue = true;
+		} catch (RecognitionException e) {
+		} finally{
+			input.seek(activeIndex);
+		}
+		lookaheadTest = false;
+
+		return returnValue;
+	}
+	
 	private String safeSubstring(String text, int start, int end) {
 		return text.substring(Math.min(start, text.length()), Math.min(Math
 				.max(start, end), text.length()));
@@ -717,11 +752,11 @@
 	;
 
 or_restr_connective
-	:	and_restr_connective ((DOUBLE_PIPE)=> DOUBLE_PIPE^ and_restr_connective )* 
+	:	and_restr_connective ({(validateRestr())}?=> DOUBLE_PIPE^ and_restr_connective )* 
 	;
 
 and_restr_connective
-	:	constraint_expression ((DOUBLE_AMPER)=> DOUBLE_AMPER^ constraint_expression )*
+	:	constraint_expression ({(validateRestr())}?=> DOUBLE_AMPER^ constraint_expression )*
 	;
 
 constraint_expression
@@ -731,6 +766,14 @@
 	|	simple_operator
 	|	LEFT_PAREN! or_restr_connective RIGHT_PAREN
 	;
+	catch [ RecognitionException re ] {
+		if (!lookaheadTest){
+			reportError(re);
+			recover(input, re);
+		} else {
+			throw re;
+		}
+	}
 
 simple_operator
 	:	(EQUAL^

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2008-07-23 16:17:30 UTC (rev 21198)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/RuleParserTest.java	2008-07-23 17:27:03 UTC (rev 21199)
@@ -66,3240 +66,2890 @@
 
 public class RuleParserTest extends TestCase {
 
-    private DescrBuilderTree walker;
+	private DescrBuilderTree walker;
 
-    protected void setUp() throws Exception {
-        super.setUp();
-        this.walker = null;
-    }
+	protected void setUp() throws Exception {
+		super.setUp();
+		this.walker = null;
+	}
 
-    protected void tearDown() throws Exception {
-        this.walker = null;
-        super.tearDown();
-    }
+	protected void tearDown() throws Exception {
+		this.walker = null;
+		super.tearDown();
+	}
 
-    public void testPackage_OneSegment() throws Exception {
-        final String packageName = (String) parse("package_statement","package_statement", "package foo" );
-        assertEquals( "foo",
-                      packageName );
-    }
+	public void test1() throws Exception {
+		String source = "package com.sample  rule test  when  Test( ( text == null || text2 matches \"\" ) )  then  end";
+		parse("compilation_unit", "compilation_unit", source);
+		assertEquals("com.sample", this.walker.getPackageDescr().getName());
+		RuleDescr rule = (RuleDescr) this.walker.getPackageDescr().getRules().get(0);
+		assertEquals("test", rule.getName());
+		OrDescr or = (OrDescr) ((PatternDescr) rule.getLhs().getDescrs().get(0)).getDescrs().get(0);
+		assertEquals(2, or.getDescrs().size());
+		assertEquals("text", ((FieldConstraintDescr) or.getDescrs().get(0)).getFieldName());
+		assertEquals("text2", ((FieldConstraintDescr) or.getDescrs().get(1)).getFieldName());
+	}
 
-    public void testPackage_MultipleSegments() throws Exception {
-        final String packageName = (String) parse("package_statement","package_statement", "package foo.bar.baz;" );
-        assertEquals( "foo.bar.baz",
-                      packageName );
-    }
+	public void test2() throws Exception {
+		String source = "package com.sample  rule test  when  Test( ( text == null || matches \"\" ) )  then  end";
+		parse("compilation_unit", "compilation_unit", source);
+		assertEquals("com.sample", this.walker.getPackageDescr().getName());
+		RuleDescr rule = (RuleDescr) this.walker.getPackageDescr().getRules().get(0);
+		assertEquals("test", rule.getName());
+		FieldConstraintDescr fieldConstr = (FieldConstraintDescr) ((PatternDescr) rule.getLhs().getDescrs().get(0)).getDescrs().get(0);
+		RestrictionConnectiveDescr restConnective = (RestrictionConnectiveDescr) fieldConstr.getRestrictions().get(0);
+		assertEquals(2, restConnective.getRestrictions().size());
+	}
 
-    public void testEmptyPackage() throws Exception {
-        final String source = "package foo.bar.baz";
-        final DrlParser parser = new DrlParser();
-        final PackageDescr pkg = parser.parse( new StringReader( source ) );
-        assertFalse( parser.hasErrors() );
-        assertEquals( "foo.bar.baz",
-                      pkg.getName() );
-    }
+	public void testPackage_OneSegment() throws Exception {
+		final String packageName = (String) parse("package_statement",
+				"package_statement", "package foo");
+		assertEquals("foo", packageName);
+	}
 
-    public void testCompilationUnit() throws Exception {
-        final String source = "package foo; import com.foo.Bar; import com.foo.Baz;";
-        parse("compilation_unit","compilation_unit", source );
-        assertEquals( "foo",
-                      this.walker.getPackageDescr().getName() );
-        assertEquals( 2,
-                      this.walker.getPackageDescr().getImports().size() );
-        ImportDescr impdescr = (ImportDescr) this.walker.getPackageDescr().getImports().get( 0 );
-        assertEquals( "com.foo.Bar",
-                      impdescr.getTarget() );
-        assertEquals( source.indexOf( "import " + impdescr.getTarget() ),
-                      impdescr.getStartCharacter() );
-        assertEquals( source.indexOf( "import " + impdescr.getTarget() ) + ("import " + impdescr.getTarget()).length() - 1,
-                      impdescr.getEndCharacter() );
+	public void testPackage_MultipleSegments() throws Exception {
+		final String packageName = (String) parse("package_statement",
+				"package_statement", "package foo.bar.baz;");
+		assertEquals("foo.bar.baz", packageName);
+	}
 
-        impdescr = (ImportDescr) this.walker.getPackageDescr().getImports().get( 1 );
-        assertEquals( "com.foo.Baz",
-                      impdescr.getTarget() );
-        assertEquals( source.indexOf( "import " + impdescr.getTarget() ),
-                      impdescr.getStartCharacter() );
-        assertEquals( source.indexOf( "import " + impdescr.getTarget() ) + ("import " + impdescr.getTarget()).length() - 1,
-                      impdescr.getEndCharacter() );
-    }
-    
-    public void testDialect() throws Exception {
-        final String source = "dialect 'mvel'";
-        parse("compilation_unit","compilation_unit", source );
-        AttributeDescr attr = (AttributeDescr) this.walker.getPackageDescr().getAttributes().get(0);
-        assertEquals( "dialect", attr.getName() );
-        assertEquals( "mvel", attr.getValue() );
-    }
+	public void testEmptyPackage() throws Exception {
+		final String source = "package foo.bar.baz";
+		final DrlParser parser = new DrlParser();
+		final PackageDescr pkg = parser.parse(new StringReader(source));
+		assertFalse(parser.hasErrors());
+		assertEquals("foo.bar.baz", pkg.getName());
+	}
 
-    public void testDialect2() throws Exception {
-        final String source = "dialect \"mvel\"";
-        parse("compilation_unit","compilation_unit", source );
-        AttributeDescr attr = (AttributeDescr) this.walker.getPackageDescr().getAttributes().get(0);
-        assertEquals( "dialect", attr.getName() );
-        assertEquals( "mvel", attr.getValue() );
-    }
+	public void testCompilationUnit() throws Exception {
+		final String source = "package foo; import com.foo.Bar; import com.foo.Baz;";
+		parse("compilation_unit", "compilation_unit", source);
+		assertEquals("foo", this.walker.getPackageDescr().getName());
+		assertEquals(2, this.walker.getPackageDescr().getImports().size());
+		ImportDescr impdescr = (ImportDescr) this.walker.getPackageDescr()
+				.getImports().get(0);
+		assertEquals("com.foo.Bar", impdescr.getTarget());
+		assertEquals(source.indexOf("import " + impdescr.getTarget()), impdescr
+				.getStartCharacter());
+		assertEquals(source.indexOf("import " + impdescr.getTarget())
+				+ ("import " + impdescr.getTarget()).length() - 1, impdescr
+				.getEndCharacter());
 
-    public void testEmptyRule() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule", "empty_rule.drl" );
+		impdescr = (ImportDescr) this.walker.getPackageDescr().getImports()
+				.get(1);
+		assertEquals("com.foo.Baz", impdescr.getTarget());
+		assertEquals(source.indexOf("import " + impdescr.getTarget()), impdescr
+				.getStartCharacter());
+		assertEquals(source.indexOf("import " + impdescr.getTarget())
+				+ ("import " + impdescr.getTarget()).length() - 1, impdescr
+				.getEndCharacter());
+	}
 
-        assertNotNull( rule );
+	public void testDialect() throws Exception {
+		final String source = "dialect 'mvel'";
+		parse("compilation_unit", "compilation_unit", source);
+		AttributeDescr attr = (AttributeDescr) this.walker.getPackageDescr()
+				.getAttributes().get(0);
+		assertEquals("dialect", attr.getName());
+		assertEquals("mvel", attr.getValue());
+	}
 
-        assertEquals( "empty",
-                      rule.getName() );
-        assertNotNull( rule.getLhs() );
-        assertNotNull( rule.getConsequence() );
-    }
+	public void testDialect2() throws Exception {
+		final String source = "dialect \"mvel\"";
+		parse("compilation_unit", "compilation_unit", source);
+		AttributeDescr attr = (AttributeDescr) this.walker.getPackageDescr()
+				.getAttributes().get(0);
+		assertEquals("dialect", attr.getName());
+		assertEquals("mvel", attr.getValue());
+	}
 
-    //FIXME Keywords END and THEN should not be used as identifiers: try to enable it
-    public void FIXME_testKeywordCollisions() throws Exception {
-        parseResource("compilation_unit","compilation_unit", "eol_funny_business.drl" );
+	public void testEmptyRule() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"empty_rule.drl");
 
-        final PackageDescr pkg = walker.getPackageDescr();
+		assertNotNull(rule);
 
-        assertEquals( 1,
-                      pkg.getRules().size() );
-    }
+		assertEquals("empty", rule.getName());
+		assertNotNull(rule.getLhs());
+		assertNotNull(rule.getConsequence());
+	}
 
-    
-    public void testTemplates() throws Exception {
+	// FIXME Keywords END and THEN should not be used as identifiers: try to
+	// enable it
+	public void FIXME_testKeywordCollisions() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"eol_funny_business.drl");
 
-        parseResource("compilation_unit","compilation_unit",  "test_Templates.drl" );
+		final PackageDescr pkg = walker.getPackageDescr();
 
-        final PackageDescr pkg = walker.getPackageDescr();
+		assertEquals(1, pkg.getRules().size());
+	}
 
-        assertEquals( 1,
-                      pkg.getRules().size() );
-        assertEquals( 2,
-                      pkg.getFactTemplates().size() );
+	public void testTemplates() throws Exception {
 
-        FactTemplateDescr fact1 = (FactTemplateDescr) pkg.getFactTemplates().get( 0 );
-        assertEquals( "Cheese",
-                      fact1.getName() );
-        assertEquals( 2,
-                      fact1.getFields().size() );
+		parseResource("compilation_unit", "compilation_unit",
+				"test_Templates.drl");
 
-        assertEquals( "name",
-                      ((FieldTemplateDescr) fact1.getFields().get( 0 )).getName() );
-        assertEquals( "String",
-                      ((FieldTemplateDescr) fact1.getFields().get( 0 )).getClassType() );
+		final PackageDescr pkg = walker.getPackageDescr();
 
-        assertEquals( "age",
-                      ((FieldTemplateDescr) fact1.getFields().get( 1 )).getName() );
-        assertEquals( "Integer",
-                      ((FieldTemplateDescr) fact1.getFields().get( 1 )).getClassType() );
+		assertEquals(1, pkg.getRules().size());
+		assertEquals(2, pkg.getFactTemplates().size());
 
-        fact1 = null;
+		FactTemplateDescr fact1 = (FactTemplateDescr) pkg.getFactTemplates()
+				.get(0);
+		assertEquals("Cheese", fact1.getName());
+		assertEquals(2, fact1.getFields().size());
 
-        final FactTemplateDescr fact2 = (FactTemplateDescr) pkg.getFactTemplates().get( 1 );
-        assertEquals( "Wine",
-                      fact2.getName() );
-        assertEquals( 3,
-                      fact2.getFields().size() );
+		assertEquals("name", ((FieldTemplateDescr) fact1.getFields().get(0))
+				.getName());
+		assertEquals("String", ((FieldTemplateDescr) fact1.getFields().get(0))
+				.getClassType());
 
-        assertEquals( "name",
-                      ((FieldTemplateDescr) fact2.getFields().get( 0 )).getName() );
-        assertEquals( "String",
-                      ((FieldTemplateDescr) fact2.getFields().get( 0 )).getClassType() );
+		assertEquals("age", ((FieldTemplateDescr) fact1.getFields().get(1))
+				.getName());
+		assertEquals("Integer", ((FieldTemplateDescr) fact1.getFields().get(1))
+				.getClassType());
 
-        assertEquals( "year",
-                      ((FieldTemplateDescr) fact2.getFields().get( 1 )).getName() );
-        assertEquals( "String",
-                      ((FieldTemplateDescr) fact2.getFields().get( 1 )).getClassType() );
+		fact1 = null;
 
-        assertEquals( "accolades",
-                      ((FieldTemplateDescr) fact2.getFields().get( 2 )).getName() );
-        assertEquals( "String[]",
-                      ((FieldTemplateDescr) fact2.getFields().get( 2 )).getClassType() );
-    }
+		final FactTemplateDescr fact2 = (FactTemplateDescr) pkg
+				.getFactTemplates().get(1);
+		assertEquals("Wine", fact2.getName());
+		assertEquals(3, fact2.getFields().size());
 
-    public void testTernaryExpression() throws Exception {
+		assertEquals("name", ((FieldTemplateDescr) fact2.getFields().get(0))
+				.getName());
+		assertEquals("String", ((FieldTemplateDescr) fact2.getFields().get(0))
+				.getClassType());
 
-        parseResource("compilation_unit","compilation_unit", "ternary_expression.drl" );
+		assertEquals("year", ((FieldTemplateDescr) fact2.getFields().get(1))
+				.getName());
+		assertEquals("String", ((FieldTemplateDescr) fact2.getFields().get(1))
+				.getClassType());
 
-        final PackageDescr pkg = walker.getPackageDescr();
-        final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
-        assertEquals( 1,
-                      pkg.getRules().size() );
+		assertEquals("accolades", ((FieldTemplateDescr) fact2.getFields()
+				.get(2)).getName());
+		assertEquals("String[]",
+				((FieldTemplateDescr) fact2.getFields().get(2)).getClassType());
+	}
 
-        assertEqualsIgnoreWhitespace( "if (speed > speedLimit ? true : false;) pullEmOver();",
-                                      (String) rule.getConsequence() );
-    }
+	public void testTernaryExpression() throws Exception {
 
-    public void FIXME_testLatinChars() throws Exception {
-        final DrlParser parser = new DrlParser();
-        final Reader drl = new InputStreamReader( this.getClass().getResourceAsStream( "latin-sample.dslr" ) );
-        final Reader dsl = new InputStreamReader( this.getClass().getResourceAsStream( "latin.dsl" ) );
+		parseResource("compilation_unit", "compilation_unit",
+				"ternary_expression.drl");
 
-        final PackageDescr pkg = parser.parse( drl,
-                                               dsl );
+		final PackageDescr pkg = walker.getPackageDescr();
+		final RuleDescr rule = (RuleDescr) pkg.getRules().get(0);
+		assertEquals(1, pkg.getRules().size());
 
-        //MN: will get some errors due to the char encoding on my FC5 install
-        //others who use the right encoding may not see this, feel free to uncomment
-        //the following assertion.
-        assertFalse( parser.hasErrors() );
+		assertEqualsIgnoreWhitespace(
+				"if (speed > speedLimit ? true : false;) pullEmOver();",
+				(String) rule.getConsequence());
+	}
 
-        assertEquals( "br.com.auster.drools.sample",
-                      pkg.getName() );
-        assertEquals( 1,
-                      pkg.getRules().size() );
+	public void FIXME_testLatinChars() throws Exception {
+		final DrlParser parser = new DrlParser();
+		final Reader drl = new InputStreamReader(this.getClass()
+				.getResourceAsStream("latin-sample.dslr"));
+		final Reader dsl = new InputStreamReader(this.getClass()
+				.getResourceAsStream("latin.dsl"));
 
-    }
+		final PackageDescr pkg = parser.parse(drl, dsl);
 
-    public void testFunctionWithArrays() throws Exception {
-        parseResource("compilation_unit","compilation_unit", "function_arrays.drl" );
+		// MN: will get some errors due to the char encoding on my FC5 install
+		// others who use the right encoding may not see this, feel free to
+		// uncomment
+		// the following assertion.
+		assertFalse(parser.hasErrors());
 
-        final PackageDescr pkg = walker.getPackageDescr();
+		assertEquals("br.com.auster.drools.sample", pkg.getName());
+		assertEquals(1, pkg.getRules().size());
 
-        assertEquals( "foo",
-                      pkg.getName() );
-        assertEquals( 1,
-                      pkg.getRules().size() );
+	}
 
-        final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
+	public void testFunctionWithArrays() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"function_arrays.drl");
 
-        assertEqualsIgnoreWhitespace( "yourFunction(new String[3] {\"a\",\"b\",\"c\"});",
-                                      (String) rule.getConsequence() );
-        final FunctionDescr func = (FunctionDescr) pkg.getFunctions().get( 0 );
+		final PackageDescr pkg = walker.getPackageDescr();
 
-        assertEquals( "String[]",
-                      func.getReturnType() );
-        assertEquals( "args[]",
-                      func.getParameterNames().get( 0 ) );
-        assertEquals( "String",
-                      func.getParameterTypes().get( 0 ) );
-    }
+		assertEquals("foo", pkg.getName());
+		assertEquals(1, pkg.getRules().size());
 
-    public void testAlmostEmptyRule() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule", "almost_empty_rule.drl" );
+		final RuleDescr rule = (RuleDescr) pkg.getRules().get(0);
 
-        assertNotNull( rule );
+		assertEqualsIgnoreWhitespace(
+				"yourFunction(new String[3] {\"a\",\"b\",\"c\"});",
+				(String) rule.getConsequence());
+		final FunctionDescr func = (FunctionDescr) pkg.getFunctions().get(0);
 
-        assertEquals( "almost_empty",
-                      rule.getName() );
-        assertNotNull( rule.getLhs() );
-        assertEquals( "",
-                      ((String) rule.getConsequence()).trim() );
-    }
+		assertEquals("String[]", func.getReturnType());
+		assertEquals("args[]", func.getParameterNames().get(0));
+		assertEquals("String", func.getParameterTypes().get(0));
+	}
 
-    public void testQuotedStringNameRule() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule", "quoted_string_name_rule.drl" );
+	public void testAlmostEmptyRule() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"almost_empty_rule.drl");
 
-        assertNotNull( rule );
+		assertNotNull(rule);
 
-        assertEquals( "quoted string name",
-                      rule.getName() );
-        assertNotNull( rule.getLhs() );
-        assertEquals( "",
-                      ((String) rule.getConsequence()).trim() );
-    }
+		assertEquals("almost_empty", rule.getName());
+		assertNotNull(rule.getLhs());
+		assertEquals("", ((String) rule.getConsequence()).trim());
+	}
 
-    public void testNoLoop() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "no-loop.drl" );
+	public void testQuotedStringNameRule() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"quoted_string_name_rule.drl");
 
-        assertNotNull( rule );
+		assertNotNull(rule);
 
-        assertEquals( "rule1",
-                      rule.getName() );
-        final AttributeDescr att = (AttributeDescr) rule.getAttributes().get( 0 );
-        assertEquals( "false",
-                      att.getValue() );
-        assertEquals( "no-loop",
-                      att.getName() );
-    }
+		assertEquals("quoted string name", rule.getName());
+		assertNotNull(rule.getLhs());
+		assertEquals("", ((String) rule.getConsequence()).trim());
+	}
 
-    public void testAutofocus() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "autofocus.drl" );
+	public void testNoLoop() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"no-loop.drl");
 
-        assertNotNull( rule );
+		assertNotNull(rule);
 
-        assertEquals( "rule1",
-                      rule.getName() );
-        final AttributeDescr att = (AttributeDescr) rule.getAttributes().get( 0 );
-        assertEquals( "true",
-                      att.getValue() );
-        assertEquals( "auto-focus",
-                      att.getName() );
-    }
+		assertEquals("rule1", rule.getName());
+		final AttributeDescr att = (AttributeDescr) rule.getAttributes().get(0);
+		assertEquals("false", att.getValue());
+		assertEquals("no-loop", att.getName());
+	}
 
-    public void testRuleFlowGroup() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "ruleflowgroup.drl" );
+	public void testAutofocus() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"autofocus.drl");
 
-        assertNotNull( rule );
+		assertNotNull(rule);
 
-        assertEquals( "rule1",
-                      rule.getName() );
-        final AttributeDescr att = (AttributeDescr) rule.getAttributes().get( 0 );
-        assertEquals( "a group",
-                      att.getValue() );
-        assertEquals( "ruleflow-group",
-                      att.getName() );
-    }
+		assertEquals("rule1", rule.getName());
+		final AttributeDescr att = (AttributeDescr) rule.getAttributes().get(0);
+		assertEquals("true", att.getValue());
+		assertEquals("auto-focus", att.getName());
+	}
 
-    public void testConsequenceWithDeclaration() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "declaration-in-consequence.drl" );
+	public void testRuleFlowGroup() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"ruleflowgroup.drl");
 
-        assertNotNull( rule );
+		assertNotNull(rule);
 
-        assertEquals( "myrule",
-                      rule.getName() );
+		assertEquals("rule1", rule.getName());
+		final AttributeDescr att = (AttributeDescr) rule.getAttributes().get(0);
+		assertEquals("a group", att.getValue());
+		assertEquals("ruleflow-group", att.getName());
+	}
 
-        final String expected = "int i = 0; i = 1; i / 1; i == 1; i(i); i = 'i'; i.i.i; i\\i; i<i; i>i; i=\"i\";  ++i;" + "i++; --i; i--; i += i; i -= i; i *= i; i /= i;" + "int i = 5;" + "for(int j; j<i; ++j) {" + "System.out.println(j);}"
-                                + "Object o = new String(\"Hello\");" + "String s = (String) o;";
+	public void testConsequenceWithDeclaration() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"declaration-in-consequence.drl");
 
-        assertEqualsIgnoreWhitespace( expected,
-                                      (String) rule.getConsequence() );
-        assertTrue( ((String) rule.getConsequence()).indexOf( "++" ) > 0 );
-        assertTrue( ((String) rule.getConsequence()).indexOf( "--" ) > 0 );
-        assertTrue( ((String) rule.getConsequence()).indexOf( "+=" ) > 0 );
-        assertTrue( ((String) rule.getConsequence()).indexOf( "==" ) > 0 );
+		assertNotNull(rule);
 
-        //System.out.println(( String ) rule.getConsequence());
-        //note, need to assert that "i++" is preserved as is, no extra spaces.
-    }
+		assertEquals("myrule", rule.getName());
 
-    public void testRuleParseLhs() throws Exception {
-        final String text = "Person(age < 42, location==\"atlanta\") \nor\nPerson(name==\"bob\") \n";
-        PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", text);
-    }
+		final String expected = "int i = 0; i = 1; i / 1; i == 1; i(i); i = 'i'; i.i.i; i\\i; i<i; i>i; i=\"i\";  ++i;"
+				+ "i++; --i; i--; i += i; i -= i; i *= i; i /= i;"
+				+ "int i = 5;"
+				+ "for(int j; j<i; ++j) {"
+				+ "System.out.println(j);}"
+				+ "Object o = new String(\"Hello\");"
+				+ "String s = (String) o;";
 
-    public void testLiteralBoolAndNegativeNumbersRule() throws Exception {
-    	final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "literal_bool_and_negative.drl" );
+		assertEqualsIgnoreWhitespace(expected, (String) rule.getConsequence());
+		assertTrue(((String) rule.getConsequence()).indexOf("++") > 0);
+		assertTrue(((String) rule.getConsequence()).indexOf("--") > 0);
+		assertTrue(((String) rule.getConsequence()).indexOf("+=") > 0);
+		assertTrue(((String) rule.getConsequence()).indexOf("==") > 0);
 
-        assertNotNull( rule );
+		// System.out.println(( String ) rule.getConsequence());
+		// note, need to assert that "i++" is preserved as is, no extra spaces.
+	}
 
-        assertEquals( "simple_rule",
-                      rule.getName() );
-        assertNotNull( rule.getLhs() );
-        assertEqualsIgnoreWhitespace( "cons();",
-                                      (String) rule.getConsequence() );
+	public void testRuleParseLhs() throws Exception {
+		final String text = "Person(age < 42, location==\"atlanta\") \nor\nPerson(name==\"bob\") \n";
+		PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", text);
+	}
 
-        final AndDescr lhs = rule.getLhs();
-        assertEquals( 3,
-                      lhs.getDescrs().size() );
+	public void testLiteralBoolAndNegativeNumbersRule() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"literal_bool_and_negative.drl");
 
-        PatternDescr pattern = (PatternDescr) lhs.getDescrs().get( 0 );
-        assertEquals( 1,
-                      pattern.getConstraint().getDescrs().size() );
-        AndDescr fieldAnd = (AndDescr) pattern.getConstraint();
-        FieldConstraintDescr fld = (FieldConstraintDescr) fieldAnd.getDescrs().get( 0 );
-        LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		assertNotNull(rule);
 
-        assertEquals( "==",
-                      lit.getEvaluator() );
-        assertEquals( "false",
-                      lit.getText() );
-        assertEquals( "bar",
-                      fld.getFieldName() );
+		assertEquals("simple_rule", rule.getName());
+		assertNotNull(rule.getLhs());
+		assertEqualsIgnoreWhitespace("cons();", (String) rule.getConsequence());
 
-        pattern = (PatternDescr) lhs.getDescrs().get( 1 );
-        assertEquals( 1,
-                      pattern.getConstraint().getDescrs().size() );
+		final AndDescr lhs = rule.getLhs();
+		assertEquals(3, lhs.getDescrs().size());
 
-        fieldAnd = (AndDescr) pattern.getConstraint();
-        fld = (FieldConstraintDescr) fieldAnd.getDescrs().get( 0 );
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		PatternDescr pattern = (PatternDescr) lhs.getDescrs().get(0);
+		assertEquals(1, pattern.getConstraint().getDescrs().size());
+		AndDescr fieldAnd = (AndDescr) pattern.getConstraint();
+		FieldConstraintDescr fld = (FieldConstraintDescr) fieldAnd.getDescrs()
+				.get(0);
+		LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld
+				.getRestrictions().get(0);
 
-        assertEquals( ">",
-                      lit.getEvaluator() );
-        assertEquals( "-42",
-                      lit.getText() );
-        assertEquals( "boo",
-                      fld.getFieldName() );
+		assertEquals("==", lit.getEvaluator());
+		assertEquals("false", lit.getText());
+		assertEquals("bar", fld.getFieldName());
 
-        pattern = (PatternDescr) lhs.getDescrs().get( 2 );
-        assertEquals( 1,
-                      pattern.getConstraint().getDescrs().size() );
+		pattern = (PatternDescr) lhs.getDescrs().get(1);
+		assertEquals(1, pattern.getConstraint().getDescrs().size());
 
-        //lit = (LiteralDescr) col.getDescrs().get( 0 );
+		fieldAnd = (AndDescr) pattern.getConstraint();
+		fld = (FieldConstraintDescr) fieldAnd.getDescrs().get(0);
+		lit = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
 
-        fieldAnd = (AndDescr) pattern.getConstraint();
-        fld = (FieldConstraintDescr) fieldAnd.getDescrs().get( 0 );
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
-        assertEquals( ">",
-                      lit.getEvaluator() );
-        assertEquals( "-42.42",
-                      lit.getText() );
-        assertEquals( "boo",
-                      fld.getFieldName() );
-    }
+		assertEquals(">", lit.getEvaluator());
+		assertEquals("-42", lit.getText());
+		assertEquals("boo", fld.getFieldName());
 
-    public void testChunkWithoutParens() throws Exception {
-        String input = "( foo )";
-        ReturnValueRestrictionDescr returnData = (ReturnValueRestrictionDescr) parse("paren_chunk", "fact_expression", input );
+		pattern = (PatternDescr) lhs.getDescrs().get(2);
+		assertEquals(1, pattern.getConstraint().getDescrs().size());
 
-        assertEquals( "( foo )",
-        		input.substring(returnData.getStartCharacter(), returnData.getEndCharacter()));
-    }
+		// lit = (LiteralDescr) col.getDescrs().get( 0 );
 
-    public void testChunkWithParens() throws Exception {
-        String input = "(fnord())";
-        ReturnValueRestrictionDescr returnData = (ReturnValueRestrictionDescr) parse("paren_chunk", "fact_expression", input );
+		fieldAnd = (AndDescr) pattern.getConstraint();
+		fld = (FieldConstraintDescr) fieldAnd.getDescrs().get(0);
+		lit = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
+		assertEquals(">", lit.getEvaluator());
+		assertEquals("-42.42", lit.getText());
+		assertEquals("boo", fld.getFieldName());
+	}
 
-        assertEquals( "(fnord())",
-        		input.substring(returnData.getStartCharacter(), returnData.getEndCharacter()));
-    }
+	public void testChunkWithoutParens() throws Exception {
+		String input = "( foo )";
+		ReturnValueRestrictionDescr returnData = (ReturnValueRestrictionDescr) parse(
+				"paren_chunk", "fact_expression", input);
 
-    public void testChunkWithParensAndQuotedString() throws Exception {
-        String input = "( fnord( \"cheese\" ) )";
-        ReturnValueRestrictionDescr returnData = (ReturnValueRestrictionDescr) parse("paren_chunk", "fact_expression", input );
+		assertEquals("( foo )", input.substring(returnData.getStartCharacter(),
+				returnData.getEndCharacter()));
+	}
 
-        assertEquals( "( fnord( \"cheese\" ) )",
-        		input.substring(returnData.getStartCharacter(), returnData.getEndCharacter()));
-    }
+	public void testChunkWithParens() throws Exception {
+		String input = "(fnord())";
+		ReturnValueRestrictionDescr returnData = (ReturnValueRestrictionDescr) parse(
+				"paren_chunk", "fact_expression", input);
 
-    public void testChunkWithRandomCharac5ters() throws Exception {
-        String input = "( %*9dkj)";
-        ReturnValueRestrictionDescr returnData = (ReturnValueRestrictionDescr) parse("paren_chunk", "fact_expression", input );
+		assertEquals("(fnord())", input.substring(returnData
+				.getStartCharacter(), returnData.getEndCharacter()));
+	}
 
-        assertEquals( "( %*9dkj)",
-        		input.substring(returnData.getStartCharacter(), returnData.getEndCharacter()));
-    }
+	public void testChunkWithParensAndQuotedString() throws Exception {
+		String input = "( fnord( \"cheese\" ) )";
+		ReturnValueRestrictionDescr returnData = (ReturnValueRestrictionDescr) parse(
+				"paren_chunk", "fact_expression", input);
 
-    public void testEmptyPattern() throws Exception {
-        parseResource("compilation_unit","compilation_unit", "test_EmptyPattern.drl" );
+		assertEquals("( fnord( \"cheese\" ) )", input.substring(returnData
+				.getStartCharacter(), returnData.getEndCharacter()));
+	}
 
-        final PackageDescr packageDescr = this.walker.getPackageDescr();
-        assertEquals( 1,
-                      packageDescr.getRules().size() );
-        final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get( 0 );
-        assertEquals( "simple rule",
-                      ruleDescr.getName() );
-        assertNotNull( ruleDescr.getLhs() );
-        assertEquals( 1,
-                      ruleDescr.getLhs().getDescrs().size() );
-        final PatternDescr patternDescr = (PatternDescr) ruleDescr.getLhs().getDescrs().get( 0 );
-        assertEquals( 0,
-                      patternDescr.getConstraint().getDescrs().size() ); //this may be null, not sure as the test doesn't get this far...
-        assertEquals( "Cheese",
-                      patternDescr.getObjectType() );
+	public void testChunkWithRandomCharac5ters() throws Exception {
+		String input = "( %*9dkj)";
+		ReturnValueRestrictionDescr returnData = (ReturnValueRestrictionDescr) parse(
+				"paren_chunk", "fact_expression", input);
 
-    }
+		assertEquals("( %*9dkj)", input.substring(returnData
+				.getStartCharacter(), returnData.getEndCharacter()));
+	}
 
-    public void testSimpleMethodCallWithFrom() throws Exception {
+	public void testEmptyPattern() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"test_EmptyPattern.drl");
 
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "test_SimpleMethodCallWithFrom.drl" );
-        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final FromDescr from = (FromDescr) pattern.getSource();
-        final AccessorDescr method = (AccessorDescr) from.getDataSource();
+		final PackageDescr packageDescr = this.walker.getPackageDescr();
+		assertEquals(1, packageDescr.getRules().size());
+		final RuleDescr ruleDescr = (RuleDescr) packageDescr.getRules().get(0);
+		assertEquals("simple rule", ruleDescr.getName());
+		assertNotNull(ruleDescr.getLhs());
+		assertEquals(1, ruleDescr.getLhs().getDescrs().size());
+		final PatternDescr patternDescr = (PatternDescr) ruleDescr.getLhs()
+				.getDescrs().get(0);
+		assertEquals(0, patternDescr.getConstraint().getDescrs().size()); // this
+		// may
+		// be
+		// null,
+		// not
+		// sure
+		// as
+		// the
+		// test
+		// doesn't
+		// get
+		// this
+		// far...
+		assertEquals("Cheese", patternDescr.getObjectType());
 
-        assertEquals( "something.doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )",
-                      method.toString() );
-    }
+	}
 
-    public void testSimpleFunctionCallWithFrom() throws Exception {
+	public void testSimpleMethodCallWithFrom() throws Exception {
 
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "test_SimpleFunctionCallWithFrom.drl" );
-        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final FromDescr from = (FromDescr) pattern.getSource();
-        final AccessorDescr func = (AccessorDescr) from.getDataSource();
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"test_SimpleMethodCallWithFrom.drl");
+		final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		final FromDescr from = (FromDescr) pattern.getSource();
+		final AccessorDescr method = (AccessorDescr) from.getDataSource();
 
-        assertEquals( "doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )",
-                      func.toString() );
-    }
+		assertEquals(
+				"something.doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )",
+				method.toString());
+	}
 
-    public void testSimpleAccessorWithFrom() throws Exception {
+	public void testSimpleFunctionCallWithFrom() throws Exception {
 
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "test_SimpleAccessorWithFrom.drl" );
-        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final FromDescr from = (FromDescr) pattern.getSource();
-        final AccessorDescr accessor = (AccessorDescr) from.getDataSource();
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"test_SimpleFunctionCallWithFrom.drl");
+		final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		final FromDescr from = (FromDescr) pattern.getSource();
+		final AccessorDescr func = (AccessorDescr) from.getDataSource();
 
-        assertNull( ((FieldAccessDescr) accessor.getInvokers().get( 0 )).getArgument() );
+		assertEquals(
+				"doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )",
+				func.toString());
+	}
 
-        assertEquals( "something.doIt",
-                      accessor.toString() );
-    }
+	public void testSimpleAccessorWithFrom() throws Exception {
 
-    public void testSimpleAccessorAndArgWithFrom() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"test_SimpleAccessorWithFrom.drl");
+		final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		final FromDescr from = (FromDescr) pattern.getSource();
+		final AccessorDescr accessor = (AccessorDescr) from.getDataSource();
 
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "test_SimpleAccessorArgWithFrom.drl" );
-        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final FromDescr from = (FromDescr) pattern.getSource();
-        final AccessorDescr accessor = (AccessorDescr) from.getDataSource();
+		assertNull(((FieldAccessDescr) accessor.getInvokers().get(0))
+				.getArgument());
 
-        assertNotNull( ((FieldAccessDescr) accessor.getInvokers().get( 0 )).getArgument() );
+		assertEquals("something.doIt", accessor.toString());
+	}
 
-        assertEquals( "something.doIt[\"key\"]",
-                      accessor.toString() );
-    }
+	public void testSimpleAccessorAndArgWithFrom() throws Exception {
 
-    public void testComplexChainedAcessor() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "test_ComplexChainedCallWithFrom.drl" );
-        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final FromDescr from = (FromDescr) pattern.getSource();
-        final AccessorDescr accessor = (AccessorDescr) from.getDataSource();
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"test_SimpleAccessorArgWithFrom.drl");
+		final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		final FromDescr from = (FromDescr) pattern.getSource();
+		final AccessorDescr accessor = (AccessorDescr) from.getDataSource();
 
-        assertEquals( "doIt1( foo,bar,42,\"hello\",{ a => \"b\"}, [a, \"b\", 42] ).doIt2(bar, [a, \"b\", 42]).field[\"key\"]",
-                      accessor.toString() );
-    }
+		assertNotNull(((FieldAccessDescr) accessor.getInvokers().get(0))
+				.getArgument());
 
-    //        public void testFrom() throws Exception {
-    //            final RuleDescr rule = parseResource( "from.drl" ).rule();
-    //
-    //            if(parser.hasErrors()) {
-    //                System.err.println(parser.getErrorMessages());
-    //            }
-    //            assertFalse(parser.hasErrors());
-    //
-    //            assertNotNull( rule );
-    //
-    //            assertEquals( "using_from",
-    //                          rule.getName() );
-    //
-    //            assertEquals(9, rule.getLhs().getDescrs().size());
-    //
-    //            FromDescr from = (FromDescr) rule.getLhs().getDescrs().get(0);
-    //
-    //            assertEquals(3, from.getLine());
-    //
-    //            assertEquals("Foo", from.getReturnedPattern().getObjectType());
-    //            assertTrue(from.getDataSource() instanceof FieldAccessDescr);
-    //            assertEquals("baz", ((FieldAccessDescr) from.getDataSource()).getFieldName());
-    //            assertEquals("bar", ((FieldAccessDescr) from.getDataSource()).getVariableName());
-    //
-    //
-    //            ArgumentValueDescr arg = null;
-    //
-    //            from = (FromDescr) rule.getLhs().getDescrs().get(1);
-    //            assertEquals("Foo", from.getReturnedPattern().getObjectType());
-    //            assertEquals(0, from.getReturnedPattern().getDescrs().size());
-    //            FieldAccessDescr fieldAccess = ( FieldAccessDescr ) from.getDataSource();
-    //            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
-    //            assertEquals(ArgumentValueDescr.STRING,  arg.getType() );
-    //
-    //            from = (FromDescr) rule.getLhs().getDescrs().get(2);
-    //            fieldAccess = ( FieldAccessDescr ) from.getDataSource();
-    //            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
-    //            assertEquals(ArgumentValueDescr.VARIABLE,  arg.getType() );
-    //
-    //            from = (FromDescr) rule.getLhs().getDescrs().get(3);
-    //            fieldAccess = ( FieldAccessDescr ) from.getDataSource();
-    //            arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
-    //            assertEquals(ArgumentValueDescr.INTEGRAL,  arg.getType() );
-    //
-    //            from = (FromDescr) rule.getLhs().getDescrs().get(4);
-    //            assertEquals("Whee", from.getReturnedColumn().getObjectType());
-    //            assertEquals(1, from.getReturnedColumn().getDescrs().size());
-    //            assertTrue(from.getDataSource() instanceof FunctionCallDescr);
-    //            assertEquals("whee", ((FunctionCallDescr) from.getDataSource()).getName());
-    //            assertEquals(1, ((FunctionCallDescr) from.getDataSource()).getArguments().size());
-    //            arg = ( (ArgumentValueDescr )((FunctionCallDescr) from.getDataSource()).getArguments().get(0));
-    //            assertEquals("y", arg.getValue());
-    //            assertEquals(ArgumentValueDescr.STRING, arg.getType());
-    //
-    //            assertEquals(7, from.getLine());
-    //            assertEquals(7, from.getReturnedColumn().getLine());
-    //
-    //            from = (FromDescr) rule.getLhs().getDescrs().get(5);
-    //            assertEquals("Foo", from.getReturnedColumn().getObjectType());
-    //            assertEquals(1, from.getReturnedColumn().getDescrs().size());
-    //            assertEquals("f", from.getReturnedColumn().getIdentifier());
-    //            assertTrue(from.getDataSource() instanceof MethodAccessDescr);
-    //            assertEquals("bar", ((MethodAccessDescr) from.getDataSource()).getVariableName());
-    //            assertEquals("la", ((MethodAccessDescr) from.getDataSource()).getMethodName());
-    //            assertEquals(1, ((MethodAccessDescr) from.getDataSource()).getArguments().size());
-    //            arg = (ArgumentValueDescr) ((MethodAccessDescr) from.getDataSource()).getArguments().get(0);
-    //
-    //
-    //            assertEquals("x", arg.getValue());
-    //            assertEquals(ArgumentValueDescr.VARIABLE, arg.getType());
-    //
-    //            assertEqualsIgnoreWhitespace("whee();", ( String ) rule.getConsequence());
-    //
-    //            from = (FromDescr) rule.getLhs().getDescrs().get(6);
-    //            assertEquals("wa", ((FunctionCallDescr)from.getDataSource()).getName());
-    //
-    //            from = (FromDescr) rule.getLhs().getDescrs().get(7);
-    //            MethodAccessDescr meth = (MethodAccessDescr)from.getDataSource();
-    //            assertEquals("wa", meth.getMethodName());
-    //            assertEquals("la", meth.getVariableName());
-    //
-    //            arg = (ArgumentValueDescr) meth.getArguments().get(0);
-    //            assertEquals("42", arg.getValue());
-    //            assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType());
-    //
-    //            arg = (ArgumentValueDescr) meth.getArguments().get(1);
-    //            assertEquals("42.42", arg.getValue());
-    //            assertEquals(ArgumentValueDescr.DECIMAL, arg.getType());
-    //
-    //            arg = (ArgumentValueDescr) meth.getArguments().get(2);
-    //            assertEquals("false", arg.getValue());
-    //            assertEquals(ArgumentValueDescr.BOOLEAN, arg.getType());
-    //
-    //            arg = (ArgumentValueDescr) meth.getArguments().get(3);
-    //            assertEquals("null", arg.getValue());
-    //            assertEquals(ArgumentValueDescr.NULL, arg.getType());
-    //
-    //            assertEquals("Bam", ((PatternDescr)rule.getLhs().getDescrs().get(8)).getObjectType());
-    //        }
+		assertEquals("something.doIt[\"key\"]", accessor.toString());
+	}
 
-    public void testSimpleRule() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "simple_rule.drl" );
+	public void testComplexChainedAcessor() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"test_ComplexChainedCallWithFrom.drl");
+		final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		final FromDescr from = (FromDescr) pattern.getSource();
+		final AccessorDescr accessor = (AccessorDescr) from.getDataSource();
 
-        assertNotNull( rule );
+		assertEquals(
+				"doIt1( foo,bar,42,\"hello\",{ a => \"b\"}, [a, \"b\", 42] ).doIt2(bar, [a, \"b\", 42]).field[\"key\"]",
+				accessor.toString());
+	}
 
-        assertEquals( "simple_rule",
-                      rule.getName() );
+	// public void testFrom() throws Exception {
+	// final RuleDescr rule = parseResource( "from.drl" ).rule();
+	//
+	// if(parser.hasErrors()) {
+	// System.err.println(parser.getErrorMessages());
+	// }
+	// assertFalse(parser.hasErrors());
+	//
+	// assertNotNull( rule );
+	//
+	// assertEquals( "using_from",
+	// rule.getName() );
+	//
+	// assertEquals(9, rule.getLhs().getDescrs().size());
+	//
+	// FromDescr from = (FromDescr) rule.getLhs().getDescrs().get(0);
+	//
+	// assertEquals(3, from.getLine());
+	//
+	// assertEquals("Foo", from.getReturnedPattern().getObjectType());
+	// assertTrue(from.getDataSource() instanceof FieldAccessDescr);
+	// assertEquals("baz", ((FieldAccessDescr)
+	// from.getDataSource()).getFieldName());
+	// assertEquals("bar", ((FieldAccessDescr)
+	// from.getDataSource()).getVariableName());
+	//
+	//
+	// ArgumentValueDescr arg = null;
+	//
+	// from = (FromDescr) rule.getLhs().getDescrs().get(1);
+	// assertEquals("Foo", from.getReturnedPattern().getObjectType());
+	// assertEquals(0, from.getReturnedPattern().getDescrs().size());
+	// FieldAccessDescr fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+	// arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+	// assertEquals(ArgumentValueDescr.STRING, arg.getType() );
+	//
+	// from = (FromDescr) rule.getLhs().getDescrs().get(2);
+	// fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+	// arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+	// assertEquals(ArgumentValueDescr.VARIABLE, arg.getType() );
+	//
+	// from = (FromDescr) rule.getLhs().getDescrs().get(3);
+	// fieldAccess = ( FieldAccessDescr ) from.getDataSource();
+	// arg = ( ArgumentValueDescr ) fieldAccess.getArgument();
+	// assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType() );
+	//
+	// from = (FromDescr) rule.getLhs().getDescrs().get(4);
+	// assertEquals("Whee", from.getReturnedColumn().getObjectType());
+	// assertEquals(1, from.getReturnedColumn().getDescrs().size());
+	// assertTrue(from.getDataSource() instanceof FunctionCallDescr);
+	// assertEquals("whee", ((FunctionCallDescr)
+	// from.getDataSource()).getName());
+	// assertEquals(1, ((FunctionCallDescr)
+	// from.getDataSource()).getArguments().size());
+	// arg = ( (ArgumentValueDescr )((FunctionCallDescr)
+	// from.getDataSource()).getArguments().get(0));
+	// assertEquals("y", arg.getValue());
+	// assertEquals(ArgumentValueDescr.STRING, arg.getType());
+	//
+	// assertEquals(7, from.getLine());
+	// assertEquals(7, from.getReturnedColumn().getLine());
+	//
+	// from = (FromDescr) rule.getLhs().getDescrs().get(5);
+	// assertEquals("Foo", from.getReturnedColumn().getObjectType());
+	// assertEquals(1, from.getReturnedColumn().getDescrs().size());
+	// assertEquals("f", from.getReturnedColumn().getIdentifier());
+	// assertTrue(from.getDataSource() instanceof MethodAccessDescr);
+	// assertEquals("bar", ((MethodAccessDescr)
+	// from.getDataSource()).getVariableName());
+	// assertEquals("la", ((MethodAccessDescr)
+	// from.getDataSource()).getMethodName());
+	// assertEquals(1, ((MethodAccessDescr)
+	// from.getDataSource()).getArguments().size());
+	// arg = (ArgumentValueDescr) ((MethodAccessDescr)
+	// from.getDataSource()).getArguments().get(0);
+	//
+	//
+	// assertEquals("x", arg.getValue());
+	// assertEquals(ArgumentValueDescr.VARIABLE, arg.getType());
+	//
+	// assertEqualsIgnoreWhitespace("whee();", ( String )
+	// rule.getConsequence());
+	//
+	// from = (FromDescr) rule.getLhs().getDescrs().get(6);
+	// assertEquals("wa", ((FunctionCallDescr)from.getDataSource()).getName());
+	//
+	// from = (FromDescr) rule.getLhs().getDescrs().get(7);
+	// MethodAccessDescr meth = (MethodAccessDescr)from.getDataSource();
+	// assertEquals("wa", meth.getMethodName());
+	// assertEquals("la", meth.getVariableName());
+	//
+	// arg = (ArgumentValueDescr) meth.getArguments().get(0);
+	// assertEquals("42", arg.getValue());
+	// assertEquals(ArgumentValueDescr.INTEGRAL, arg.getType());
+	//
+	// arg = (ArgumentValueDescr) meth.getArguments().get(1);
+	// assertEquals("42.42", arg.getValue());
+	// assertEquals(ArgumentValueDescr.DECIMAL, arg.getType());
+	//
+	// arg = (ArgumentValueDescr) meth.getArguments().get(2);
+	// assertEquals("false", arg.getValue());
+	// assertEquals(ArgumentValueDescr.BOOLEAN, arg.getType());
+	//
+	// arg = (ArgumentValueDescr) meth.getArguments().get(3);
+	// assertEquals("null", arg.getValue());
+	// assertEquals(ArgumentValueDescr.NULL, arg.getType());
+	//
+	// assertEquals("Bam",
+	// ((PatternDescr)rule.getLhs().getDescrs().get(8)).getObjectType());
+	// }
 
-        assertEquals( 7,
-                      rule.getConsequenceLine() );
-        assertEquals( 2,
-                      rule.getConsequencePattern() );
+	public void testSimpleRule() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"simple_rule.drl");
 
-        final AndDescr lhs = rule.getLhs();
+		assertNotNull(rule);
 
-        assertNotNull( lhs );
+		assertEquals("simple_rule", rule.getName());
 
-        assertEquals( 3,
-                      lhs.getDescrs().size() );
+		assertEquals(7, rule.getConsequenceLine());
+		assertEquals(2, rule.getConsequencePattern());
 
-        //System.err.println( lhs.getDescrs() );
+		final AndDescr lhs = rule.getLhs();
 
-        // Check first pattern
-        final PatternDescr first = (PatternDescr) lhs.getDescrs().get( 0 );
-        assertEquals( "foo3",
-                      first.getIdentifier() );
-        assertEquals( "Bar",
-                      first.getObjectType() );
+		assertNotNull(lhs);
 
-        assertEquals( 1,
-                      first.getConstraint().getDescrs().size() );
+		assertEquals(3, lhs.getDescrs().size());
 
-        AndDescr fieldAnd = (AndDescr) first.getConstraint();
-        FieldConstraintDescr fld = (FieldConstraintDescr) fieldAnd.getDescrs().get( 0 );
-        LiteralRestrictionDescr constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		// System.err.println( lhs.getDescrs() );
 
-        assertNotNull( constraint );
+		// Check first pattern
+		final PatternDescr first = (PatternDescr) lhs.getDescrs().get(0);
+		assertEquals("foo3", first.getIdentifier());
+		assertEquals("Bar", first.getObjectType());
 
-        assertEquals( "a",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      constraint.getEvaluator() );
-        assertEquals( "3",
-                      constraint.getText() );
+		assertEquals(1, first.getConstraint().getDescrs().size());
 
-        // Check second pattern
-        final PatternDescr second = (PatternDescr) lhs.getDescrs().get( 1 );
-        assertEquals( "foo4",
-                      second.getIdentifier() );
-        assertEquals( "Bar",
-                      second.getObjectType() );
+		AndDescr fieldAnd = (AndDescr) first.getConstraint();
+		FieldConstraintDescr fld = (FieldConstraintDescr) fieldAnd.getDescrs()
+				.get(0);
+		LiteralRestrictionDescr constraint = (LiteralRestrictionDescr) fld
+				.getRestrictions().get(0);
 
-        //System.err.println( second.getDescrs() );
+		assertNotNull(constraint);
 
-        fieldAnd = (AndDescr) second.getConstraint();
-        assertEquals( 2,
-                      fieldAnd.getDescrs().size() );
+		assertEquals("a", fld.getFieldName());
+		assertEquals("==", constraint.getEvaluator());
+		assertEquals("3", constraint.getText());
 
-        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) fieldAnd.getDescrs().get( 0 );
-        assertEquals( "a",
-                      fieldBindingDescr.getFieldName() );
-        assertEquals( "a4",
-                      fieldBindingDescr.getIdentifier() );
+		// Check second pattern
+		final PatternDescr second = (PatternDescr) lhs.getDescrs().get(1);
+		assertEquals("foo4", second.getIdentifier());
+		assertEquals("Bar", second.getObjectType());
 
-        fld = (FieldConstraintDescr) fieldAnd.getDescrs().get( 1 );
-        constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		// System.err.println( second.getDescrs() );
 
-        assertNotNull( constraint );
+		fieldAnd = (AndDescr) second.getConstraint();
+		assertEquals(2, fieldAnd.getDescrs().size());
 
-        assertEquals( "a",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      constraint.getEvaluator() );
-        assertEquals( "4",
-                      constraint.getText() );
+		final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) fieldAnd
+				.getDescrs().get(0);
+		assertEquals("a", fieldBindingDescr.getFieldName());
+		assertEquals("a4", fieldBindingDescr.getIdentifier());
 
-        // Check third pattern
-        final PatternDescr third = (PatternDescr) lhs.getDescrs().get( 2 );
-        assertNull( third.getIdentifier() );
-        assertEquals( "Baz",
-                      third.getObjectType() );
+		fld = (FieldConstraintDescr) fieldAnd.getDescrs().get(1);
+		constraint = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
 
-        assertEqualsIgnoreWhitespace( "if ( a == b ) { " + "  assert( foo3 );" + "} else {" + "  retract( foo4 );" + "}" + "  System.out.println( a4 );",
-                                      (String) rule.getConsequence() );
-    }
+		assertNotNull(constraint);
 
-    public void testRestrictionsMultiple() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "restrictions_test.drl" );
+		assertEquals("a", fld.getFieldName());
+		assertEquals("==", constraint.getEvaluator());
+		assertEquals("4", constraint.getText());
 
-        assertNotNull( rule );
+		// Check third pattern
+		final PatternDescr third = (PatternDescr) lhs.getDescrs().get(2);
+		assertNull(third.getIdentifier());
+		assertEquals("Baz", third.getObjectType());
 
-        assertEqualsIgnoreWhitespace( "consequence();",
-                                      (String) rule.getConsequence() );
-        assertEquals( "simple_rule",
-                      rule.getName() );
-        assertEquals( 2,
-                      rule.getLhs().getDescrs().size() );
+		assertEqualsIgnoreWhitespace("if ( a == b ) { " + "  assert( foo3 );"
+				+ "} else {" + "  retract( foo4 );" + "}"
+				+ "  System.out.println( a4 );", (String) rule.getConsequence());
+	}
 
-        //The first pattern, with 2 restrictions on a single field (plus a connective)
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( "Person",
-                      pattern.getObjectType() );
-        assertEquals( 1,
-                      pattern.getConstraint().getDescrs().size() );
+	public void testRestrictionsMultiple() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"restrictions_test.drl");
 
-        AndDescr and = (AndDescr) pattern.getConstraint();
-        FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs().get( 0 );
-        assertEquals( RestrictionConnectiveDescr.AND,
-                      ((RestrictionConnectiveDescr) fld.getRestriction()).getConnective() );
-        assertEquals( 2,
-                      fld.getRestrictions().size() );
-        assertEquals( "age",
-                      fld.getFieldName() );
+		assertNotNull(rule);
 
-        LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
-        assertEquals( ">",
-                      lit.getEvaluator() );
-        assertEquals( "30",
-                      lit.getText() );
+		assertEqualsIgnoreWhitespace("consequence();", (String) rule
+				.getConsequence());
+		assertEquals("simple_rule", rule.getName());
+		assertEquals(2, rule.getLhs().getDescrs().size());
 
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 1 );
-        assertEquals( "<",
-                      lit.getEvaluator() );
-        assertEquals( "40",
-                      lit.getText() );
+		// The first pattern, with 2 restrictions on a single field (plus a
+		// connective)
+		PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
+		assertEquals("Person", pattern.getObjectType());
+		assertEquals(1, pattern.getConstraint().getDescrs().size());
 
-        //the second col, with 2 fields, the first with 2 restrictions, the second field with one
-        pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
-        assertEquals( "Vehicle",
-                      pattern.getObjectType() );
-        assertEquals( 2,
-                      pattern.getConstraint().getDescrs().size() );
+		AndDescr and = (AndDescr) pattern.getConstraint();
+		FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs()
+				.get(0);
+		assertEquals(RestrictionConnectiveDescr.AND,
+				((RestrictionConnectiveDescr) fld.getRestriction())
+						.getConnective());
+		assertEquals(2, fld.getRestrictions().size());
+		assertEquals("age", fld.getFieldName());
 
-        and = (AndDescr) pattern.getConstraint();
-        fld = (FieldConstraintDescr) and.getDescrs().get( 0 );
-        assertEquals( "type",
-                      fld.getFieldName() );
-        assertEquals( 1,
-                      fld.getRestrictions().size() );
-        RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fld.getRestrictions().get( 0 );
-        assertEquals( RestrictionConnectiveDescr.OR,
-                      or.getConnective() );
-        assertEquals( 2,
-                      or.getRestrictions().size() );
-        lit = (LiteralRestrictionDescr) or.getRestrictions().get( 0 );
-        assertEquals( "==",
-                      lit.getEvaluator() );
-        assertEquals( "sedan",
-                      lit.getText() );
+		LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld
+				.getRestrictions().get(0);
+		assertEquals(">", lit.getEvaluator());
+		assertEquals("30", lit.getText());
 
-        lit = (LiteralRestrictionDescr) or.getRestrictions().get( 1 );
-        assertEquals( "==",
-                      lit.getEvaluator() );
-        assertEquals( "wagon",
-                      lit.getText() );
+		lit = (LiteralRestrictionDescr) fld.getRestrictions().get(1);
+		assertEquals("<", lit.getEvaluator());
+		assertEquals("40", lit.getText());
 
-        //now the second field
-        fld = (FieldConstraintDescr) and.getDescrs().get( 1 );
-        assertEquals( 1,
-                      fld.getRestrictions().size() );
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
-        assertEquals( "<",
-                      lit.getEvaluator() );
-        assertEquals( "3",
-                      lit.getText() );
+		// the second col, with 2 fields, the first with 2 restrictions, the
+		// second field with one
+		pattern = (PatternDescr) rule.getLhs().getDescrs().get(1);
+		assertEquals("Vehicle", pattern.getObjectType());
+		assertEquals(2, pattern.getConstraint().getDescrs().size());
 
-    }
+		and = (AndDescr) pattern.getConstraint();
+		fld = (FieldConstraintDescr) and.getDescrs().get(0);
+		assertEquals("type", fld.getFieldName());
+		assertEquals(1, fld.getRestrictions().size());
+		RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fld
+				.getRestrictions().get(0);
+		assertEquals(RestrictionConnectiveDescr.OR, or.getConnective());
+		assertEquals(2, or.getRestrictions().size());
+		lit = (LiteralRestrictionDescr) or.getRestrictions().get(0);
+		assertEquals("==", lit.getEvaluator());
+		assertEquals("sedan", lit.getText());
 
-    public void testLineNumberInAST() throws Exception {
-        //also see testSimpleExpander to see how this works with an expander (should be the same).
+		lit = (LiteralRestrictionDescr) or.getRestrictions().get(1);
+		assertEquals("==", lit.getEvaluator());
+		assertEquals("wagon", lit.getText());
 
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "simple_rule.drl" );
+		// now the second field
+		fld = (FieldConstraintDescr) and.getDescrs().get(1);
+		assertEquals(1, fld.getRestrictions().size());
+		lit = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
+		assertEquals("<", lit.getEvaluator());
+		assertEquals("3", lit.getText());
 
-        assertNotNull( rule );
+	}
 
-        assertEquals( "simple_rule",
-                      rule.getName() );
+	public void testLineNumberInAST() throws Exception {
+		// also see testSimpleExpander to see how this works with an expander
+		// (should be the same).
 
-        assertEquals( 7,
-                      rule.getConsequenceLine() );
-        assertEquals( 2,
-                      rule.getConsequencePattern() );
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"simple_rule.drl");
 
-        final AndDescr lhs = rule.getLhs();
+		assertNotNull(rule);
 
-        assertNotNull( lhs );
+		assertEquals("simple_rule", rule.getName());
 
-        assertEquals( 3,
-                      lhs.getDescrs().size() );
+		assertEquals(7, rule.getConsequenceLine());
+		assertEquals(2, rule.getConsequencePattern());
 
-        // Check first pattern
-        final PatternDescr first = (PatternDescr) lhs.getDescrs().get( 0 );
-        assertEquals( "foo3",
-                      first.getIdentifier() );
-        assertEquals( "Bar",
-                      first.getObjectType() );
-        assertEquals( 1,
-                      first.getConstraint().getDescrs().size() );
+		final AndDescr lhs = rule.getLhs();
 
-        // Check second pattern
-        final PatternDescr second = (PatternDescr) lhs.getDescrs().get( 1 );
-        assertEquals( "foo4",
-                      second.getIdentifier() );
-        assertEquals( "Bar",
-                      second.getObjectType() );
+		assertNotNull(lhs);
 
-        final PatternDescr third = (PatternDescr) lhs.getDescrs().get( 2 );
-        assertEquals( "Baz",
-                      third.getObjectType() );
+		assertEquals(3, lhs.getDescrs().size());
 
-        assertEquals( 4,
-                      first.getLine() );
-        assertEquals( 5,
-                      second.getLine() );
-        assertEquals( 6,
-                      third.getLine() );
-    }
+		// Check first pattern
+		final PatternDescr first = (PatternDescr) lhs.getDescrs().get(0);
+		assertEquals("foo3", first.getIdentifier());
+		assertEquals("Bar", first.getObjectType());
+		assertEquals(1, first.getConstraint().getDescrs().size());
 
-    public void testLineNumberIncludingCommentsInRHS() throws Exception {
-        parseResource("compilation_unit","compilation_unit", "test_CommentLineNumbersInConsequence.drl" );
+		// Check second pattern
+		final PatternDescr second = (PatternDescr) lhs.getDescrs().get(1);
+		assertEquals("foo4", second.getIdentifier());
+		assertEquals("Bar", second.getObjectType());
 
-        final String rhs = (String) ((RuleDescr) this.walker.getPackageDescr().getRules().get( 0 )).getConsequence();
-        String expected = "  \t//woot\n  \tfirst\n  \t\n  \t//\n  \t\n  \t/* lala\n  \t\n  \t*/\n  \tsecond  \n";
-        assertEquals( expected,
-                      rhs );
-    }
+		final PatternDescr third = (PatternDescr) lhs.getDescrs().get(2);
+		assertEquals("Baz", third.getObjectType());
 
-    public void testLhsSemicolonDelim() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "lhs_semicolon_delim.drl" );
+		assertEquals(4, first.getLine());
+		assertEquals(5, second.getLine());
+		assertEquals(6, third.getLine());
+	}
 
-        assertNotNull( rule );
+	public void testLineNumberIncludingCommentsInRHS() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"test_CommentLineNumbersInConsequence.drl");
 
-        assertEquals( "simple_rule",
-                      rule.getName() );
+		final String rhs = (String) ((RuleDescr) this.walker.getPackageDescr()
+				.getRules().get(0)).getConsequence();
+		String expected = "  \t//woot\n  \tfirst\n  \t\n  \t//\n  \t\n  \t/* lala\n  \t\n  \t*/\n  \tsecond  \n";
+		assertEquals(expected, rhs);
+	}
 
-        final AndDescr lhs = rule.getLhs();
+	public void testLhsSemicolonDelim() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"lhs_semicolon_delim.drl");
 
-        assertNotNull( lhs );
+		assertNotNull(rule);
 
-        assertEquals( 3,
-                      lhs.getDescrs().size() );
+		assertEquals("simple_rule", rule.getName());
 
-        //System.err.println( lhs.getDescrs() );
+		final AndDescr lhs = rule.getLhs();
 
-        // Check first pattern
-        final PatternDescr first = (PatternDescr) lhs.getDescrs().get( 0 );
-        assertEquals( "foo3",
-                      first.getIdentifier() );
-        assertEquals( "Bar",
-                      first.getObjectType() );
+		assertNotNull(lhs);
 
-        assertEquals( 1,
-                      first.getConstraint().getDescrs().size() );
+		assertEquals(3, lhs.getDescrs().size());
 
-        //LiteralDescr constraint = (LiteralDescr) first.getDescrs().get( 0 );
-        AndDescr and = (AndDescr) first.getConstraint();
-        FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs().get( 0 );
-        LiteralRestrictionDescr constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		// System.err.println( lhs.getDescrs() );
 
-        assertNotNull( constraint );
+		// Check first pattern
+		final PatternDescr first = (PatternDescr) lhs.getDescrs().get(0);
+		assertEquals("foo3", first.getIdentifier());
+		assertEquals("Bar", first.getObjectType());
 
-        assertEquals( "a",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      constraint.getEvaluator() );
-        assertEquals( "3",
-                      constraint.getText() );
+		assertEquals(1, first.getConstraint().getDescrs().size());
 
-        // Check second pattern
-        final PatternDescr second = (PatternDescr) lhs.getDescrs().get( 1 );
-        assertEquals( "foo4",
-                      second.getIdentifier() );
-        assertEquals( "Bar",
-                      second.getObjectType() );
+		// LiteralDescr constraint = (LiteralDescr) first.getDescrs().get( 0 );
+		AndDescr and = (AndDescr) first.getConstraint();
+		FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs()
+				.get(0);
+		LiteralRestrictionDescr constraint = (LiteralRestrictionDescr) fld
+				.getRestrictions().get(0);
 
-        and = (AndDescr) second.getConstraint();
-        assertEquals( 2,
-                      and.getDescrs().size() );
+		assertNotNull(constraint);
 
-        //System.err.println( second.getDescrs() );
+		assertEquals("a", fld.getFieldName());
+		assertEquals("==", constraint.getEvaluator());
+		assertEquals("3", constraint.getText());
 
-        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) and.getDescrs().get( 0 );
-        assertEquals( "a",
-                      fieldBindingDescr.getFieldName() );
-        assertEquals( "a4",
-                      fieldBindingDescr.getIdentifier() );
+		// Check second pattern
+		final PatternDescr second = (PatternDescr) lhs.getDescrs().get(1);
+		assertEquals("foo4", second.getIdentifier());
+		assertEquals("Bar", second.getObjectType());
 
-        fld = (FieldConstraintDescr) and.getDescrs().get( 1 );
+		and = (AndDescr) second.getConstraint();
+		assertEquals(2, and.getDescrs().size());
 
-        constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		// System.err.println( second.getDescrs() );
 
-        assertNotNull( constraint );
+		final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) and
+				.getDescrs().get(0);
+		assertEquals("a", fieldBindingDescr.getFieldName());
+		assertEquals("a4", fieldBindingDescr.getIdentifier());
 
-        assertEquals( "a",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      constraint.getEvaluator() );
-        assertEquals( "4",
-                      constraint.getText() );
+		fld = (FieldConstraintDescr) and.getDescrs().get(1);
 
-        // Check third pattern
-        final PatternDescr third = (PatternDescr) lhs.getDescrs().get( 2 );
-        assertNull( third.getIdentifier() );
-        assertEquals( "Baz",
-                      third.getObjectType() );
+		constraint = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
 
-        assertEqualsIgnoreWhitespace( "if ( a == b ) { " + "  assert( foo3 );" + "} else {" + "  retract( foo4 );" + "}" + "  System.out.println( a4 );",
-                                      (String) rule.getConsequence() );
-    }
+		assertNotNull(constraint);
 
-    public void testNotNode() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "rule_not.drl" );
+		assertEquals("a", fld.getFieldName());
+		assertEquals("==", constraint.getEvaluator());
+		assertEquals("4", constraint.getText());
 
-        assertNotNull( rule );
-        assertEquals( "simple_rule",
-                      rule.getName() );
+		// Check third pattern
+		final PatternDescr third = (PatternDescr) lhs.getDescrs().get(2);
+		assertNull(third.getIdentifier());
+		assertEquals("Baz", third.getObjectType());
 
-        final AndDescr lhs = rule.getLhs();
-        assertEquals( 1,
-                      lhs.getDescrs().size() );
-        final NotDescr not = (NotDescr) lhs.getDescrs().get( 0 );
-        assertEquals( 1,
-                      not.getDescrs().size() );
-        final PatternDescr pattern = (PatternDescr) not.getDescrs().get( 0 );
+		assertEqualsIgnoreWhitespace("if ( a == b ) { " + "  assert( foo3 );"
+				+ "} else {" + "  retract( foo4 );" + "}"
+				+ "  System.out.println( a4 );", (String) rule.getConsequence());
+	}
 
-        assertEquals( "Cheese",
-                      pattern.getObjectType() );
-        assertEquals( 1,
-                      pattern.getConstraint().getDescrs().size() );
+	public void testNotNode() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"rule_not.drl");
 
-        final AndDescr and = (AndDescr) pattern.getConstraint();
-        final FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs().get( 0 );
-        final LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		assertNotNull(rule);
+		assertEquals("simple_rule", rule.getName());
 
-        assertEquals( "==",
-                      lit.getEvaluator() );
-        assertEquals( "stilton",
-                      lit.getText() );
-        assertEquals( "type",
-                      fld.getFieldName() );
-    }
+		final AndDescr lhs = rule.getLhs();
+		assertEquals(1, lhs.getDescrs().size());
+		final NotDescr not = (NotDescr) lhs.getDescrs().get(0);
+		assertEquals(1, not.getDescrs().size());
+		final PatternDescr pattern = (PatternDescr) not.getDescrs().get(0);
 
-    public void testFunctionImport() throws Exception {
-        parseResource("compilation_unit","compilation_unit", "test_FunctionImport.drl" );
+		assertEquals("Cheese", pattern.getObjectType());
+		assertEquals(1, pattern.getConstraint().getDescrs().size());
 
-        final PackageDescr pkg = walker.getPackageDescr();
-        assertEquals( 2,
-                      pkg.getFunctionImports().size() );
+		final AndDescr and = (AndDescr) pattern.getConstraint();
+		final FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs()
+				.get(0);
+		final LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld
+				.getRestrictions().get(0);
 
-        assertEquals( "abd.def.x",
-                      ((FunctionImportDescr) pkg.getFunctionImports().get( 0 )).getTarget() );
-        assertFalse( ((FunctionImportDescr) pkg.getFunctionImports().get( 0 )).getStartCharacter() == -1 );
-        assertFalse( ((FunctionImportDescr) pkg.getFunctionImports().get( 0 )).getEndCharacter() == -1 );
-        assertEquals( "qed.wah.*",
-                      ((FunctionImportDescr) pkg.getFunctionImports().get( 1 )).getTarget() );
-        assertFalse( ((FunctionImportDescr) pkg.getFunctionImports().get( 1 )).getStartCharacter() == -1 );
-        assertFalse( ((FunctionImportDescr) pkg.getFunctionImports().get( 1 )).getEndCharacter() == -1 );
-    }
+		assertEquals("==", lit.getEvaluator());
+		assertEquals("stilton", lit.getText());
+		assertEquals("type", fld.getFieldName());
+	}
 
-    public void testNotExistWithBrackets() throws Exception {
+	public void testFunctionImport() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"test_FunctionImport.drl");
 
-        parseResource("compilation_unit","compilation_unit", "not_exist_with_brackets.drl" );
+		final PackageDescr pkg = walker.getPackageDescr();
+		assertEquals(2, pkg.getFunctionImports().size());
 
-        final PackageDescr pkg = walker.getPackageDescr();
+		assertEquals("abd.def.x", ((FunctionImportDescr) pkg
+				.getFunctionImports().get(0)).getTarget());
+		assertFalse(((FunctionImportDescr) pkg.getFunctionImports().get(0))
+				.getStartCharacter() == -1);
+		assertFalse(((FunctionImportDescr) pkg.getFunctionImports().get(0))
+				.getEndCharacter() == -1);
+		assertEquals("qed.wah.*", ((FunctionImportDescr) pkg
+				.getFunctionImports().get(1)).getTarget());
+		assertFalse(((FunctionImportDescr) pkg.getFunctionImports().get(1))
+				.getStartCharacter() == -1);
+		assertFalse(((FunctionImportDescr) pkg.getFunctionImports().get(1))
+				.getEndCharacter() == -1);
+	}
 
-        final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
+	public void testNotExistWithBrackets() throws Exception {
 
-        assertNotNull( rule );
-        assertEquals( "simple_rule",
-                      rule.getName() );
+		parseResource("compilation_unit", "compilation_unit",
+				"not_exist_with_brackets.drl");
 
-        final AndDescr lhs = rule.getLhs();
-        assertEquals( 2,
-                      lhs.getDescrs().size() );
-        final NotDescr not = (NotDescr) lhs.getDescrs().get( 0 );
-        assertEquals( 1,
-                      not.getDescrs().size() );
-        final PatternDescr pattern = (PatternDescr) not.getDescrs().get( 0 );
+		final PackageDescr pkg = walker.getPackageDescr();
 
-        assertEquals( "Cheese",
-                      pattern.getObjectType() );
+		final RuleDescr rule = (RuleDescr) pkg.getRules().get(0);
 
-        final ExistsDescr ex = (ExistsDescr) lhs.getDescrs().get( 1 );
-        assertEquals( 1,
-                      ex.getDescrs().size() );
-        final PatternDescr exPattern = (PatternDescr) ex.getDescrs().get( 0 );
-        assertEquals( "Foo",
-                      exPattern.getObjectType() );
-    }
+		assertNotNull(rule);
+		assertEquals("simple_rule", rule.getName());
 
+		final AndDescr lhs = rule.getLhs();
+		assertEquals(2, lhs.getDescrs().size());
+		final NotDescr not = (NotDescr) lhs.getDescrs().get(0);
+		assertEquals(1, not.getDescrs().size());
+		final PatternDescr pattern = (PatternDescr) not.getDescrs().get(0);
 
-    public void testSimpleQuery() throws Exception {
-        final QueryDescr query = (QueryDescr) parseResource("query", "query", "simple_query.drl" );
+		assertEquals("Cheese", pattern.getObjectType());
 
-        assertNotNull( query );
+		final ExistsDescr ex = (ExistsDescr) lhs.getDescrs().get(1);
+		assertEquals(1, ex.getDescrs().size());
+		final PatternDescr exPattern = (PatternDescr) ex.getDescrs().get(0);
+		assertEquals("Foo", exPattern.getObjectType());
+	}
 
-        assertEquals( "simple_query",
-                      query.getName() );
+	public void testSimpleQuery() throws Exception {
+		final QueryDescr query = (QueryDescr) parseResource("query", "query",
+				"simple_query.drl");
 
-        final AndDescr lhs = query.getLhs();
+		assertNotNull(query);
 
-        assertNotNull( lhs );
+		assertEquals("simple_query", query.getName());
 
-        assertEquals( 3,
-                      lhs.getDescrs().size() );
+		final AndDescr lhs = query.getLhs();
 
-        // Check first pattern
-        final PatternDescr first = (PatternDescr) lhs.getDescrs().get( 0 );
-        assertEquals( "foo3",
-                      first.getIdentifier() );
-        assertEquals( "Bar",
-                      first.getObjectType() );
+		assertNotNull(lhs);
 
-        assertEquals( 1,
-                      first.getConstraint().getDescrs().size() );
+		assertEquals(3, lhs.getDescrs().size());
 
-        AndDescr and = (AndDescr) first.getConstraint();
-        FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs().get( 0 );
-        LiteralRestrictionDescr constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
-        //LiteralDescr constraint = (LiteralDescr) first.getDescrs().get( 0 );
+		// Check first pattern
+		final PatternDescr first = (PatternDescr) lhs.getDescrs().get(0);
+		assertEquals("foo3", first.getIdentifier());
+		assertEquals("Bar", first.getObjectType());
 
-        assertNotNull( constraint );
+		assertEquals(1, first.getConstraint().getDescrs().size());
 
-        assertEquals( "a",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      constraint.getEvaluator() );
-        assertEquals( "3",
-                      constraint.getText() );
+		AndDescr and = (AndDescr) first.getConstraint();
+		FieldConstraintDescr fld = (FieldConstraintDescr) and.getDescrs()
+				.get(0);
+		LiteralRestrictionDescr constraint = (LiteralRestrictionDescr) fld
+				.getRestrictions().get(0);
+		// LiteralDescr constraint = (LiteralDescr) first.getDescrs().get( 0 );
 
-        // Check second pattern
-        final PatternDescr second = (PatternDescr) lhs.getDescrs().get( 1 );
-        assertEquals( "foo4",
-                      second.getIdentifier() );
-        assertEquals( "Bar",
-                      second.getObjectType() );
+		assertNotNull(constraint);
 
-        and = (AndDescr) second.getConstraint();
-        assertEquals( 2,
-                      and.getDescrs().size() );
-        //check it has field bindings.
-        final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) and.getDescrs().get( 0 );
-        assertEquals( "a",
-                      fieldBindingDescr.getFieldName() );
-        assertEquals( "a4",
-                      fieldBindingDescr.getIdentifier() );
+		assertEquals("a", fld.getFieldName());
+		assertEquals("==", constraint.getEvaluator());
+		assertEquals("3", constraint.getText());
 
-        fld = (FieldConstraintDescr) and.getDescrs().get( 1 );
+		// Check second pattern
+		final PatternDescr second = (PatternDescr) lhs.getDescrs().get(1);
+		assertEquals("foo4", second.getIdentifier());
+		assertEquals("Bar", second.getObjectType());
 
-        constraint = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		and = (AndDescr) second.getConstraint();
+		assertEquals(2, and.getDescrs().size());
+		// check it has field bindings.
+		final FieldBindingDescr fieldBindingDescr = (FieldBindingDescr) and
+				.getDescrs().get(0);
+		assertEquals("a", fieldBindingDescr.getFieldName());
+		assertEquals("a4", fieldBindingDescr.getIdentifier());
 
-        assertNotNull( constraint );
+		fld = (FieldConstraintDescr) and.getDescrs().get(1);
 
-        assertEquals( "a",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      constraint.getEvaluator() );
-        assertEquals( "4",
-                      constraint.getText() );
-    }
+		constraint = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
 
-    public void testQueryRuleMixed() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "query_and_rule.drl" );
+		assertNotNull(constraint);
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 4,
-                      pack.getRules().size() ); //as queries are rules
-        RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( "bar",
-                      rule.getName() );
+		assertEquals("a", fld.getFieldName());
+		assertEquals("==", constraint.getEvaluator());
+		assertEquals("4", constraint.getText());
+	}
 
-        QueryDescr query = (QueryDescr) pack.getRules().get( 1 );
-        assertEquals( "simple_query",
-                      query.getName() );
+	public void testQueryRuleMixed() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"query_and_rule.drl");
 
-        rule = (RuleDescr) pack.getRules().get( 2 );
-        assertEquals( "bar2",
-                      rule.getName() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(4, pack.getRules().size()); // as queries are rules
+		RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals("bar", rule.getName());
 
-        query = (QueryDescr) pack.getRules().get( 3 );
-        assertEquals( "simple_query2",
-                      query.getName() );
-    }
+		QueryDescr query = (QueryDescr) pack.getRules().get(1);
+		assertEquals("simple_query", query.getName());
 
-    public void testMultipleRules() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "multiple_rules.drl" );
+		rule = (RuleDescr) pack.getRules().get(2);
+		assertEquals("bar2", rule.getName());
 
-        final PackageDescr pkg = walker.getPackageDescr();
-        final List rules = pkg.getRules();
+		query = (QueryDescr) pack.getRules().get(3);
+		assertEquals("simple_query2", query.getName());
+	}
 
-        assertEquals( 2,
-                      rules.size() );
+	public void testMultipleRules() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"multiple_rules.drl");
 
-        final RuleDescr rule0 = (RuleDescr) rules.get( 0 );
-        assertEquals( "Like Stilton",
-                      rule0.getName() );
+		final PackageDescr pkg = walker.getPackageDescr();
+		final List rules = pkg.getRules();
 
-        final RuleDescr rule1 = (RuleDescr) rules.get( 1 );
-        assertEquals( "Like Cheddar",
-                      rule1.getName() );
+		assertEquals(2, rules.size());
 
-        //checkout the first rule
-        AndDescr lhs = rule1.getLhs();
-        assertNotNull( lhs );
-        assertEquals( 1,
-                      lhs.getDescrs().size() );
-        assertEqualsIgnoreWhitespace( "System.out.println(\"I like \" + t);",
-                                      (String) rule0.getConsequence() );
+		final RuleDescr rule0 = (RuleDescr) rules.get(0);
+		assertEquals("Like Stilton", rule0.getName());
 
-        // Check first pattern
-        PatternDescr first = (PatternDescr) lhs.getDescrs().get( 0 );
-        assertEquals( "Cheese",
-                      first.getObjectType() );
+		final RuleDescr rule1 = (RuleDescr) rules.get(1);
+		assertEquals("Like Cheddar", rule1.getName());
 
-        //checkout the second rule
-        lhs = rule1.getLhs();
-        assertNotNull( lhs );
-        assertEquals( 1,
-                      lhs.getDescrs().size() );
-        assertEqualsIgnoreWhitespace( "System.out.println(\"I like \" + t);",
-                                      (String) rule1.getConsequence() );
+		// checkout the first rule
+		AndDescr lhs = rule1.getLhs();
+		assertNotNull(lhs);
+		assertEquals(1, lhs.getDescrs().size());
+		assertEqualsIgnoreWhitespace("System.out.println(\"I like \" + t);",
+				(String) rule0.getConsequence());
 
-        // Check first pattern
-        first = (PatternDescr) lhs.getDescrs().get( 0 );
-        assertEquals( "Cheese",
-                      first.getObjectType() );
-    }
+		// Check first pattern
+		PatternDescr first = (PatternDescr) lhs.getDescrs().get(0);
+		assertEquals("Cheese", first.getObjectType());
 
-    public void testExpanderLineSpread() throws Exception {
-        final DrlParser parser = new DrlParser();
-        final PackageDescr pkg = parser.parse( this.getReader( "expander_spread_lines.dslr" ),
-                                               this.getReader( "complex.dsl" ) );
+		// checkout the second rule
+		lhs = rule1.getLhs();
+		assertNotNull(lhs);
+		assertEquals(1, lhs.getDescrs().size());
+		assertEqualsIgnoreWhitespace("System.out.println(\"I like \" + t);",
+				(String) rule1.getConsequence());
 
-        assertFalse( parser.getErrors().toString(),
-                     parser.hasErrors() );
+		// Check first pattern
+		first = (PatternDescr) lhs.getDescrs().get(0);
+		assertEquals("Cheese", first.getObjectType());
+	}
 
-        final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+	public void testExpanderLineSpread() throws Exception {
+		final DrlParser parser = new DrlParser();
+		final PackageDescr pkg = parser.parse(this
+				.getReader("expander_spread_lines.dslr"), this
+				.getReader("complex.dsl"));
 
-        final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( 2,
-                      or.getDescrs().size() );
-        assertNotNull( (String) rule.getConsequence() );
+		assertFalse(parser.getErrors().toString(), parser.hasErrors());
 
-    }
+		final RuleDescr rule = (RuleDescr) pkg.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-    public void testExpanderMultipleConstraints() throws Exception {
-        final DrlParser parser = new DrlParser();
-        final PackageDescr pkg = parser.parse( this.getReader( "expander_multiple_constraints.dslr" ),
-                                               this.getReader( "multiple_constraints.dsl" ) );
+		final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get(0);
+		assertEquals(2, or.getDescrs().size());
+		assertNotNull((String) rule.getConsequence());
 
-        assertFalse( parser.getErrors().toString(),
-                     parser.hasErrors() );
+	}
 
-        final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
-        assertEquals( 2,
-                      rule.getLhs().getDescrs().size() );
+	public void testExpanderMultipleConstraints() throws Exception {
+		final DrlParser parser = new DrlParser();
+		final PackageDescr pkg = parser.parse(this
+				.getReader("expander_multiple_constraints.dslr"), this
+				.getReader("multiple_constraints.dsl"));
 
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( "Person",
-                      pattern.getObjectType() );
+		assertFalse(parser.getErrors().toString(), parser.hasErrors());
 
-        assertEquals( 2,
-                      pattern.getConstraint().getDescrs().size() );
-        assertEquals( "age",
-                      ((FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 )).getFieldName() );
-        assertEquals( "location",
-                      ((FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 1 )).getFieldName() );
+		final RuleDescr rule = (RuleDescr) pkg.getRules().get(0);
+		assertEquals(2, rule.getLhs().getDescrs().size());
 
-        pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
-        assertEquals( "Bar",
-                      pattern.getObjectType() );
+		PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
+		assertEquals("Person", pattern.getObjectType());
 
-        assertNotNull( (String) rule.getConsequence() );
+		assertEquals(2, pattern.getConstraint().getDescrs().size());
+		assertEquals("age", ((FieldConstraintDescr) pattern.getConstraint()
+				.getDescrs().get(0)).getFieldName());
+		assertEquals("location", ((FieldConstraintDescr) pattern
+				.getConstraint().getDescrs().get(1)).getFieldName());
 
-    }
+		pattern = (PatternDescr) rule.getLhs().getDescrs().get(1);
+		assertEquals("Bar", pattern.getObjectType());
 
-    public void testExpanderMultipleConstraintsFlush() throws Exception {
-        final DrlParser parser = new DrlParser();
-        //this is similar to the other test, but it requires a flush to add the constraints
-        final PackageDescr pkg = parser.parse( this.getReader( "expander_multiple_constraints_flush.dslr" ),
-                                               this.getReader( "multiple_constraints.dsl" ) );
+		assertNotNull((String) rule.getConsequence());
 
-        assertFalse( parser.getErrors().toString(),
-                     parser.hasErrors() );
+	}
 
-        final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+	public void testExpanderMultipleConstraintsFlush() throws Exception {
+		final DrlParser parser = new DrlParser();
+		// this is similar to the other test, but it requires a flush to add the
+		// constraints
+		final PackageDescr pkg = parser.parse(this
+				.getReader("expander_multiple_constraints_flush.dslr"), this
+				.getReader("multiple_constraints.dsl"));
 
-        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( "Person",
-                      pattern.getObjectType() );
+		assertFalse(parser.getErrors().toString(), parser.hasErrors());
 
-        assertEquals( 2,
-                      pattern.getConstraint().getDescrs().size() );
-        assertEquals( "age",
-                      ((FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 )).getFieldName() );
-        assertEquals( "location",
-                      ((FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 1 )).getFieldName() );
+		final RuleDescr rule = (RuleDescr) pkg.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        assertNotNull( (String) rule.getConsequence() );
+		final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		assertEquals("Person", pattern.getObjectType());
 
-    }
+		assertEquals(2, pattern.getConstraint().getDescrs().size());
+		assertEquals("age", ((FieldConstraintDescr) pattern.getConstraint()
+				.getDescrs().get(0)).getFieldName());
+		assertEquals("location", ((FieldConstraintDescr) pattern
+				.getConstraint().getDescrs().get(1)).getFieldName());
 
-    //    public void testExpanderUnExpandableErrorLines() throws Exception {
-    //
-    //        //stubb expander
-    //        final ExpanderResolver res = new ExpanderResolver() {
-    //            public Expander get(String name,
-    //                                String config) {
-    //                return new Expander() {
-    //                    public String expand(String scope,
-    //                                         String pattern) {
-    //                        if ( pattern.startsWith( "Good" ) ) {
-    //                            return pattern;
-    //                        } else {
-    //                            throw new IllegalArgumentException( "whoops" );
-    //                        }
-    //
-    //                    }
-    //                };
-    //            }
-    //        };
-    //
-    //        final DRLParser parser = parseResource( "expander_line_errors.dslr" );
-    //        parser.setExpanderResolver( res );
-    //        parser.compilation_unit();
-    //        assertTrue( parser.hasErrors() );
-    //
-    //        final List messages = parser.getErrorMessages();
-    //        assertEquals( messages.size(),
-    //                      parser.getErrors().size() );
-    //
-    //        assertEquals( 4,
-    //                      parser.getErrors().size() );
-    //        assertEquals( ExpanderException.class,
-    //                      parser.getErrors().get( 0 ).getClass() );
-    //        assertEquals( 8,
-    //                      ((RecognitionException) parser.getErrors().get( 0 )).line );
-    //        assertEquals( 10,
-    //                      ((RecognitionException) parser.getErrors().get( 1 )).line );
-    //        assertEquals( 12,
-    //                      ((RecognitionException) parser.getErrors().get( 2 )).line );
-    //        assertEquals( 13,
-    //                      ((RecognitionException) parser.getErrors().get( 3 )).line );
-    //
-    //        final PackageDescr pack = parser.getPackageDescr();
-    //        assertNotNull( pack );
-    //
-    //        final ExpanderException ex = (ExpanderException) parser.getErrors().get( 0 );
-    //        assertTrue( ex.getMessage().indexOf( "whoops" ) > -1 );
-    //
-    //    }
+		assertNotNull((String) rule.getConsequence());
 
-    public void testBasicBinding() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "basic_binding.drl" );
+	}
 
-        final PackageDescr pkg = walker.getPackageDescr();
-        final RuleDescr ruleDescr = (RuleDescr) pkg.getRules().get( 0 );
+	// public void testExpanderUnExpandableErrorLines() throws Exception {
+	//
+	// //stubb expander
+	// final ExpanderResolver res = new ExpanderResolver() {
+	// public Expander get(String name,
+	// String config) {
+	// return new Expander() {
+	// public String expand(String scope,
+	// String pattern) {
+	// if ( pattern.startsWith( "Good" ) ) {
+	// return pattern;
+	// } else {
+	// throw new IllegalArgumentException( "whoops" );
+	// }
+	//
+	// }
+	// };
+	// }
+	// };
+	//
+	// final DRLParser parser = parseResource( "expander_line_errors.dslr" );
+	// parser.setExpanderResolver( res );
+	// parser.compilation_unit();
+	// assertTrue( parser.hasErrors() );
+	//
+	// final List messages = parser.getErrorMessages();
+	// assertEquals( messages.size(),
+	// parser.getErrors().size() );
+	//
+	// assertEquals( 4,
+	// parser.getErrors().size() );
+	// assertEquals( ExpanderException.class,
+	// parser.getErrors().get( 0 ).getClass() );
+	// assertEquals( 8,
+	// ((RecognitionException) parser.getErrors().get( 0 )).line );
+	// assertEquals( 10,
+	// ((RecognitionException) parser.getErrors().get( 1 )).line );
+	// assertEquals( 12,
+	// ((RecognitionException) parser.getErrors().get( 2 )).line );
+	// assertEquals( 13,
+	// ((RecognitionException) parser.getErrors().get( 3 )).line );
+	//
+	// final PackageDescr pack = parser.getPackageDescr();
+	// assertNotNull( pack );
+	//
+	// final ExpanderException ex = (ExpanderException) parser.getErrors().get(
+	// 0 );
+	// assertTrue( ex.getMessage().indexOf( "whoops" ) > -1 );
+	//
+	// }
 
-        final AndDescr lhs = ruleDescr.getLhs();
-        assertEquals( 1,
-                      lhs.getDescrs().size() );
-        final PatternDescr cheese = (PatternDescr) lhs.getDescrs().get( 0 );
-        assertEquals( 1,
-                      cheese.getConstraint().getDescrs().size() );
-        assertEquals( "Cheese",
-                      cheese.getObjectType() );
-        assertEquals( 1,
-                      lhs.getDescrs().size() );
-        final FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese.getConstraint().getDescrs().get( 0 );
-        assertEquals( "type",
-                      fieldBinding.getFieldName() );
-    }
+	public void testBasicBinding() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"basic_binding.drl");
 
-    public void testBoundVariables() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "bindings.drl" );
+		final PackageDescr pkg = walker.getPackageDescr();
+		final RuleDescr ruleDescr = (RuleDescr) pkg.getRules().get(0);
 
-        final PackageDescr pkg = walker.getPackageDescr();
-        final RuleDescr ruleDescr = (RuleDescr) pkg.getRules().get( 0 );
+		final AndDescr lhs = ruleDescr.getLhs();
+		assertEquals(1, lhs.getDescrs().size());
+		final PatternDescr cheese = (PatternDescr) lhs.getDescrs().get(0);
+		assertEquals(1, cheese.getConstraint().getDescrs().size());
+		assertEquals("Cheese", cheese.getObjectType());
+		assertEquals(1, lhs.getDescrs().size());
+		final FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese
+				.getConstraint().getDescrs().get(0);
+		assertEquals("type", fieldBinding.getFieldName());
+	}
 
-        final AndDescr lhs = ruleDescr.getLhs();
-        assertEquals( 2,
-                      lhs.getDescrs().size() );
-        final PatternDescr cheese = (PatternDescr) lhs.getDescrs().get( 0 );
-        assertEquals( "Cheese",
-                      cheese.getObjectType() );
-        assertEquals( 2,
-                      lhs.getDescrs().size() );
-        FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese.getConstraint().getDescrs().get( 0 );
-        assertEquals( "type",
-                      fieldBinding.getFieldName() );
+	public void testBoundVariables() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "bindings.drl");
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) cheese.getConstraint().getDescrs().get( 1 );
-        LiteralRestrictionDescr literalDescr = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
-        //LiteralDescr literalDescr = (LiteralDescr) cheese.getDescrs().get( 1 );
-        assertEquals( "type",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      literalDescr.getEvaluator() );
-        assertEquals( "stilton",
-                      literalDescr.getText() );
+		final PackageDescr pkg = walker.getPackageDescr();
+		final RuleDescr ruleDescr = (RuleDescr) pkg.getRules().get(0);
 
-        final PatternDescr person = (PatternDescr) lhs.getDescrs().get( 1 );
-        fieldBinding = (FieldBindingDescr) person.getConstraint().getDescrs().get( 0 );
-        assertEquals( "name",
-                      fieldBinding.getFieldName() );
+		final AndDescr lhs = ruleDescr.getLhs();
+		assertEquals(2, lhs.getDescrs().size());
+		final PatternDescr cheese = (PatternDescr) lhs.getDescrs().get(0);
+		assertEquals("Cheese", cheese.getObjectType());
+		assertEquals(2, lhs.getDescrs().size());
+		FieldBindingDescr fieldBinding = (FieldBindingDescr) cheese
+				.getConstraint().getDescrs().get(0);
+		assertEquals("type", fieldBinding.getFieldName());
 
-        fld = (FieldConstraintDescr) person.getConstraint().getDescrs().get( 1 );
-        literalDescr = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		FieldConstraintDescr fld = (FieldConstraintDescr) cheese
+				.getConstraint().getDescrs().get(1);
+		LiteralRestrictionDescr literalDescr = (LiteralRestrictionDescr) fld
+				.getRestrictions().get(0);
+		// LiteralDescr literalDescr = (LiteralDescr) cheese.getDescrs().get( 1
+		// );
+		assertEquals("type", fld.getFieldName());
+		assertEquals("==", literalDescr.getEvaluator());
+		assertEquals("stilton", literalDescr.getText());
 
-        assertEquals( "name",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      literalDescr.getEvaluator() );
-        assertEquals( "bob",
-                      literalDescr.getText() );
+		final PatternDescr person = (PatternDescr) lhs.getDescrs().get(1);
+		fieldBinding = (FieldBindingDescr) person.getConstraint().getDescrs()
+				.get(0);
+		assertEquals("name", fieldBinding.getFieldName());
 
-        fld = (FieldConstraintDescr) person.getConstraint().getDescrs().get( 2 );
-        final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) fld.getRestrictions().get( 0 );
+		fld = (FieldConstraintDescr) person.getConstraint().getDescrs().get(1);
+		literalDescr = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
 
-        assertEquals( "likes",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      variableDescr.getEvaluator() );
-        assertEquals( "$type",
-                      variableDescr.getIdentifier() );
-    }
+		assertEquals("name", fld.getFieldName());
+		assertEquals("==", literalDescr.getEvaluator());
+		assertEquals("bob", literalDescr.getText());
 
-    public void testOrNesting() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "or_nesting.drl" );
+		fld = (FieldConstraintDescr) person.getConstraint().getDescrs().get(2);
+		final VariableRestrictionDescr variableDescr = (VariableRestrictionDescr) fld
+				.getRestrictions().get(0);
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertNotNull( pack );
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( "simple_rule",
-                      rule.getName() );
+		assertEquals("likes", fld.getFieldName());
+		assertEquals("==", variableDescr.getEvaluator());
+		assertEquals("$type", variableDescr.getIdentifier());
+	}
 
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+	public void testOrNesting() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "or_nesting.drl");
 
-        final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( 2,
-                      or.getDescrs().size() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertNotNull(pack);
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals("simple_rule", rule.getName());
 
-        final PatternDescr first = (PatternDescr) or.getDescrs().get( 0 );
-        assertEquals( "Person",
-                      first.getObjectType() );
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        final AndDescr and = (AndDescr) or.getDescrs().get( 1 );
-        assertEquals( 2,
-                      and.getDescrs().size() );
+		final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get(0);
+		assertEquals(2, or.getDescrs().size());
 
-        final PatternDescr left = (PatternDescr) and.getDescrs().get( 0 );
-        assertEquals( "Person",
-                      left.getObjectType() );
+		final PatternDescr first = (PatternDescr) or.getDescrs().get(0);
+		assertEquals("Person", first.getObjectType());
 
-        final PatternDescr right = (PatternDescr) and.getDescrs().get( 1 );
-        assertEquals( "Cheese",
-                      right.getObjectType() );
-    }
+		final AndDescr and = (AndDescr) or.getDescrs().get(1);
+		assertEquals(2, and.getDescrs().size());
 
-    /** Test that explicit "&&", "||" works as expected */
-    public void testAndOrRules() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "and_or_rule.drl" );
+		final PatternDescr left = (PatternDescr) and.getDescrs().get(0);
+		assertEquals("Person", left.getObjectType());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertNotNull( pack );
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( "simple_rule",
-                      rule.getName() );
+		final PatternDescr right = (PatternDescr) and.getDescrs().get(1);
+		assertEquals("Cheese", right.getObjectType());
+	}
 
-        //we will have 2 children under the main And node
-        final AndDescr and = rule.getLhs();
-        assertEquals( 2,
-                      and.getDescrs().size() );
+	/** Test that explicit "&&", "||" works as expected */
+	public void testAndOrRules() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "and_or_rule.drl");
 
-        //check the "&&" part
-        final AndDescr join = (AndDescr) and.getDescrs().get( 0 );
-        assertEquals( 2,
-                      join.getDescrs().size() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertNotNull(pack);
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals("simple_rule", rule.getName());
 
-        PatternDescr left = (PatternDescr) join.getDescrs().get( 0 );
-        PatternDescr right = (PatternDescr) join.getDescrs().get( 1 );
-        assertEquals( "Person",
-                      left.getObjectType() );
-        assertEquals( "Cheese",
-                      right.getObjectType() );
+		// we will have 2 children under the main And node
+		final AndDescr and = rule.getLhs();
+		assertEquals(2, and.getDescrs().size());
 
-        assertEquals( 1,
-                      left.getConstraint().getDescrs().size() );
+		// check the "&&" part
+		final AndDescr join = (AndDescr) and.getDescrs().get(0);
+		assertEquals(2, join.getDescrs().size());
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) left.getConstraint().getDescrs().get( 0 );
-        LiteralRestrictionDescr literal = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		PatternDescr left = (PatternDescr) join.getDescrs().get(0);
+		PatternDescr right = (PatternDescr) join.getDescrs().get(1);
+		assertEquals("Person", left.getObjectType());
+		assertEquals("Cheese", right.getObjectType());
 
-        assertEquals( "==",
-                      literal.getEvaluator() );
-        assertEquals( "name",
-                      fld.getFieldName() );
-        assertEquals( "mark",
-                      literal.getText() );
+		assertEquals(1, left.getConstraint().getDescrs().size());
 
-        assertEquals( 1,
-                      right.getConstraint().getDescrs().size() );
+		FieldConstraintDescr fld = (FieldConstraintDescr) left.getConstraint()
+				.getDescrs().get(0);
+		LiteralRestrictionDescr literal = (LiteralRestrictionDescr) fld
+				.getRestrictions().get(0);
 
-        fld = (FieldConstraintDescr) right.getConstraint().getDescrs().get( 0 );
-        literal = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		assertEquals("==", literal.getEvaluator());
+		assertEquals("name", fld.getFieldName());
+		assertEquals("mark", literal.getText());
 
-        assertEquals( "==",
-                      literal.getEvaluator() );
-        assertEquals( "type",
-                      fld.getFieldName() );
-        assertEquals( "stilton",
-                      literal.getText() );
+		assertEquals(1, right.getConstraint().getDescrs().size());
 
-        //now the "||" part
-        final OrDescr or = (OrDescr) and.getDescrs().get( 1 );
-        assertEquals( 2,
-                      or.getDescrs().size() );
-        left = (PatternDescr) or.getDescrs().get( 0 );
-        right = (PatternDescr) or.getDescrs().get( 1 );
-        assertEquals( "Person",
-                      left.getObjectType() );
-        assertEquals( "Cheese",
-                      right.getObjectType() );
-        assertEquals( 1,
-                      left.getConstraint().getDescrs().size() );
+		fld = (FieldConstraintDescr) right.getConstraint().getDescrs().get(0);
+		literal = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
 
-        fld = (FieldConstraintDescr) left.getConstraint().getDescrs().get( 0 );
-        literal = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		assertEquals("==", literal.getEvaluator());
+		assertEquals("type", fld.getFieldName());
+		assertEquals("stilton", literal.getText());
 
-        assertEquals( "==",
-                      literal.getEvaluator() );
-        assertEquals( "name",
-                      fld.getFieldName() );
-        assertEquals( "mark",
-                      literal.getText() );
+		// now the "||" part
+		final OrDescr or = (OrDescr) and.getDescrs().get(1);
+		assertEquals(2, or.getDescrs().size());
+		left = (PatternDescr) or.getDescrs().get(0);
+		right = (PatternDescr) or.getDescrs().get(1);
+		assertEquals("Person", left.getObjectType());
+		assertEquals("Cheese", right.getObjectType());
+		assertEquals(1, left.getConstraint().getDescrs().size());
 
-        assertEquals( 1,
-                      right.getConstraint().getDescrs().size() );
+		fld = (FieldConstraintDescr) left.getConstraint().getDescrs().get(0);
+		literal = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
 
-        fld = (FieldConstraintDescr) right.getConstraint().getDescrs().get( 0 );
-        literal = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
+		assertEquals("==", literal.getEvaluator());
+		assertEquals("name", fld.getFieldName());
+		assertEquals("mark", literal.getText());
 
-        assertEquals( "==",
-                      literal.getEvaluator() );
-        assertEquals( "type",
-                      fld.getFieldName() );
-        assertEquals( "stilton",
-                      literal.getText() );
+		assertEquals(1, right.getConstraint().getDescrs().size());
 
-        assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" );",
-                                      (String) rule.getConsequence() );
-    }
+		fld = (FieldConstraintDescr) right.getConstraint().getDescrs().get(0);
+		literal = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
 
-    /** test basic foo : Fact() || Fact() stuff */
-    public void testOrWithBinding() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "or_binding.drl" );
+		assertEquals("==", literal.getEvaluator());
+		assertEquals("type", fld.getFieldName());
+		assertEquals("stilton", literal.getText());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 2,
-                      rule.getLhs().getDescrs().size() );
+		assertEqualsIgnoreWhitespace(
+				"System.out.println( \"Mark and Michael\" );", (String) rule
+						.getConsequence());
+	}
 
-        final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( 2,
-                      or.getDescrs().size() );
+	/** test basic foo : Fact() || Fact() stuff */
+	public void testOrWithBinding() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "or_binding.drl");
 
-        final PatternDescr leftPattern = (PatternDescr) or.getDescrs().get( 0 );
-        assertEquals( "Person",
-                      leftPattern.getObjectType() );
-        assertEquals( "foo",
-                      leftPattern.getIdentifier() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(2, rule.getLhs().getDescrs().size());
 
-        final PatternDescr rightPattern = (PatternDescr) or.getDescrs().get( 1 );
-        assertEquals( "Person",
-                      rightPattern.getObjectType() );
-        assertEquals( "foo",
-                      rightPattern.getIdentifier() );
+		final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get(0);
+		assertEquals(2, or.getDescrs().size());
 
-        final PatternDescr cheeseDescr = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
-        assertEquals( "Cheese",
-                      cheeseDescr.getObjectType() );
-        assertEquals( null,
-                      cheeseDescr.getIdentifier() );
+		final PatternDescr leftPattern = (PatternDescr) or.getDescrs().get(0);
+		assertEquals("Person", leftPattern.getObjectType());
+		assertEquals("foo", leftPattern.getIdentifier());
 
-        assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" + bar );",
-                                      (String) rule.getConsequence() );
-    }
+		final PatternDescr rightPattern = (PatternDescr) or.getDescrs().get(1);
+		assertEquals("Person", rightPattern.getObjectType());
+		assertEquals("foo", rightPattern.getIdentifier());
 
-    /** test basic foo : Fact() || Fact() stuff binding to an "or"*/
-    public void testOrBindingComplex() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "or_binding_complex.drl" );
+		final PatternDescr cheeseDescr = (PatternDescr) rule.getLhs()
+				.getDescrs().get(1);
+		assertEquals("Cheese", cheeseDescr.getObjectType());
+		assertEquals(null, cheeseDescr.getIdentifier());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		assertEqualsIgnoreWhitespace(
+				"System.out.println( \"Mark and Michael\" + bar );",
+				(String) rule.getConsequence());
+	}
 
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+	/** test basic foo : Fact() || Fact() stuff binding to an "or" */
+	public void testOrBindingComplex() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"or_binding_complex.drl");
 
-        final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( 2,
-                      or.getDescrs().size() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        //first fact
-        final PatternDescr firstFact = (PatternDescr) or.getDescrs().get( 0 );
-        assertEquals( "Person",
-                      firstFact.getObjectType() );
-        assertEquals( "foo",
-                      firstFact.getIdentifier() );
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        //second "option"
-        final PatternDescr secondFact = (PatternDescr) or.getDescrs().get( 1 );
-        assertEquals( "Person",
-                      secondFact.getObjectType() );
-        assertEquals( 1,
-                      secondFact.getConstraint().getDescrs().size() );
-        assertEquals( "foo",
-                      secondFact.getIdentifier() );
+		final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get(0);
+		assertEquals(2, or.getDescrs().size());
 
-        assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" + bar );",
-                                      (String) rule.getConsequence() );
-    }
+		// first fact
+		final PatternDescr firstFact = (PatternDescr) or.getDescrs().get(0);
+		assertEquals("Person", firstFact.getObjectType());
+		assertEquals("foo", firstFact.getIdentifier());
 
-    public void testOrBindingWithBrackets() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "or_binding_with_brackets.drl" );
+		// second "option"
+		final PatternDescr secondFact = (PatternDescr) or.getDescrs().get(1);
+		assertEquals("Person", secondFact.getObjectType());
+		assertEquals(1, secondFact.getConstraint().getDescrs().size());
+		assertEquals("foo", secondFact.getIdentifier());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		assertEqualsIgnoreWhitespace(
+				"System.out.println( \"Mark and Michael\" + bar );",
+				(String) rule.getConsequence());
+	}
 
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+	public void testOrBindingWithBrackets() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"or_binding_with_brackets.drl");
 
-        final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( 2,
-                      or.getDescrs().size() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        //first fact
-        final PatternDescr firstFact = (PatternDescr) or.getDescrs().get( 0 );
-        assertEquals( "Person",
-                      firstFact.getObjectType() );
-        assertEquals( "foo",
-                      firstFact.getIdentifier() );
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        //second "option"
-        final PatternDescr secondFact = (PatternDescr) or.getDescrs().get( 0 );
-        assertEquals( "Person",
-                      secondFact.getObjectType() );
-        assertEquals( "foo",
-                      secondFact.getIdentifier() );
+		final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get(0);
+		assertEquals(2, or.getDescrs().size());
 
-        assertEqualsIgnoreWhitespace( "System.out.println( \"Mark and Michael\" + bar );",
-                                      (String) rule.getConsequence() );
-    }
+		// first fact
+		final PatternDescr firstFact = (PatternDescr) or.getDescrs().get(0);
+		assertEquals("Person", firstFact.getObjectType());
+		assertEquals("foo", firstFact.getIdentifier());
 
-    /** */
-    public void testBracketsPrecedence() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "brackets_precedence.drl" );
+		// second "option"
+		final PatternDescr secondFact = (PatternDescr) or.getDescrs().get(0);
+		assertEquals("Person", secondFact.getObjectType());
+		assertEquals("foo", secondFact.getIdentifier());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
+		assertEqualsIgnoreWhitespace(
+				"System.out.println( \"Mark and Michael\" + bar );",
+				(String) rule.getConsequence());
+	}
 
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+	/** */
+	public void testBracketsPrecedence() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"brackets_precedence.drl");
 
-        final AndDescr rootAnd = (AndDescr) rule.getLhs().getDescrs().get( 0 );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
 
-        assertEquals( 2,
-                      rootAnd.getDescrs().size() );
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        final OrDescr leftOr = (OrDescr) rootAnd.getDescrs().get( 0 );
+		final AndDescr rootAnd = (AndDescr) rule.getLhs().getDescrs().get(0);
 
-        assertEquals( 2,
-                      leftOr.getDescrs().size() );
-        final NotDescr not = (NotDescr) leftOr.getDescrs().get( 0 );
-        final PatternDescr foo1 = (PatternDescr) not.getDescrs().get( 0 );
-        assertEquals( "Foo",
-                      foo1.getObjectType() );
-        final PatternDescr foo2 = (PatternDescr) leftOr.getDescrs().get( 1 );
-        assertEquals( "Foo",
-                      foo2.getObjectType() );
+		assertEquals(2, rootAnd.getDescrs().size());
 
-        final OrDescr rightOr = (OrDescr) rootAnd.getDescrs().get( 1 );
+		final OrDescr leftOr = (OrDescr) rootAnd.getDescrs().get(0);
 
-        assertEquals( 2,
-                      rightOr.getDescrs().size() );
-        final PatternDescr shoes = (PatternDescr) rightOr.getDescrs().get( 0 );
-        assertEquals( "Shoes",
-                      shoes.getObjectType() );
-        final PatternDescr butt = (PatternDescr) rightOr.getDescrs().get( 1 );
-        assertEquals( "Butt",
-                      butt.getObjectType() );
-    }
+		assertEquals(2, leftOr.getDescrs().size());
+		final NotDescr not = (NotDescr) leftOr.getDescrs().get(0);
+		final PatternDescr foo1 = (PatternDescr) not.getDescrs().get(0);
+		assertEquals("Foo", foo1.getObjectType());
+		final PatternDescr foo2 = (PatternDescr) leftOr.getDescrs().get(1);
+		assertEquals("Foo", foo2.getObjectType());
 
-    public void testEvalMultiple() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "eval_multiple.drl" );
+		final OrDescr rightOr = (OrDescr) rootAnd.getDescrs().get(1);
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 4,
-                      rule.getLhs().getDescrs().size() );
+		assertEquals(2, rightOr.getDescrs().size());
+		final PatternDescr shoes = (PatternDescr) rightOr.getDescrs().get(0);
+		assertEquals("Shoes", shoes.getObjectType());
+		final PatternDescr butt = (PatternDescr) rightOr.getDescrs().get(1);
+		assertEquals("Butt", butt.getObjectType());
+	}
 
-        final EvalDescr eval = (EvalDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEqualsIgnoreWhitespace( "abc(\"foo\") + 5",
-                                      (String) eval.getContent() );
+	public void testEvalMultiple() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"eval_multiple.drl");
 
-        final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
-        assertEquals( "Foo",
-                      pattern.getObjectType() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(4, rule.getLhs().getDescrs().size());
 
-    }
+		final EvalDescr eval = (EvalDescr) rule.getLhs().getDescrs().get(0);
+		assertEqualsIgnoreWhitespace("abc(\"foo\") + 5", (String) eval
+				.getContent());
 
-    public void testWithEval() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "with_eval.drl" );
+		final PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs()
+				.get(1);
+		assertEquals("Foo", pattern.getObjectType());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 3,
-                      rule.getLhs().getDescrs().size() );
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( "Foo",
-                      pattern.getObjectType() );
-        pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
-        assertEquals( "Bar",
-                      pattern.getObjectType() );
+	}
 
-        final EvalDescr eval = (EvalDescr) rule.getLhs().getDescrs().get( 2 );
-        assertEqualsIgnoreWhitespace( "abc(\"foo\")",
-                                      (String) eval.getContent() );
-        assertEqualsIgnoreWhitespace( "Kapow",
-                                      (String) rule.getConsequence() );
-    }
+	public void testWithEval() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "with_eval.drl");
 
-    public void testWithRetval() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "with_retval.drl" );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(3, rule.getLhs().getDescrs().size());
+		PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
+		assertEquals("Foo", pattern.getObjectType());
+		pattern = (PatternDescr) rule.getLhs().getDescrs().get(1);
+		assertEquals("Bar", pattern.getObjectType());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
+		final EvalDescr eval = (EvalDescr) rule.getLhs().getDescrs().get(2);
+		assertEqualsIgnoreWhitespace("abc(\"foo\")", (String) eval.getContent());
+		assertEqualsIgnoreWhitespace("Kapow", (String) rule.getConsequence());
+	}
 
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
-        final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( 1,
-                      col.getConstraint().getDescrs().size() );
-        assertEquals( "Foo",
-                      col.getObjectType() );
-        final FieldConstraintDescr fld = (FieldConstraintDescr) col.getConstraint().getDescrs().get( 0 );
-        final ReturnValueRestrictionDescr retval = (ReturnValueRestrictionDescr) fld.getRestrictions().get( 0 );
+	public void testWithRetval() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "with_retval.drl");
 
-        assertEquals( "a + b",
-                      retval.getContent() );
-        assertEquals( "name",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      retval.getEvaluator() );
-    }
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
 
-    public void testWithPredicate() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "with_predicate.drl" );
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
+		final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		assertEquals(1, col.getConstraint().getDescrs().size());
+		assertEquals("Foo", col.getObjectType());
+		final FieldConstraintDescr fld = (FieldConstraintDescr) col
+				.getConstraint().getDescrs().get(0);
+		final ReturnValueRestrictionDescr retval = (ReturnValueRestrictionDescr) fld
+				.getRestrictions().get(0);
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
+		assertEquals("a + b", retval.getContent());
+		assertEquals("name", fld.getFieldName());
+		assertEquals("==", retval.getEvaluator());
+	}
 
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
-        final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        AndDescr and = (AndDescr) col.getConstraint();
-        assertEquals( 2,
-                      and.getDescrs().size() );
+	public void testWithPredicate() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"with_predicate.drl");
 
-        final FieldBindingDescr field = (FieldBindingDescr) and.getDescrs().get( 0 );
-        final PredicateDescr pred = (PredicateDescr) and.getDescrs().get( 1 );
-        assertEquals( "age",
-                      field.getFieldName() );
-        assertEquals( "$age2",
-                      field.getIdentifier() );
-        assertEqualsIgnoreWhitespace( "$age2 == $age1+2",
-                                      (String) pred.getContent() );
-    }
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
 
-    public void testNotWithConstraint() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "not_with_constraint.drl" );
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
+		final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		AndDescr and = (AndDescr) col.getConstraint();
+		assertEquals(2, and.getDescrs().size());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
+		final FieldBindingDescr field = (FieldBindingDescr) and.getDescrs()
+				.get(0);
+		final PredicateDescr pred = (PredicateDescr) and.getDescrs().get(1);
+		assertEquals("age", field.getFieldName());
+		assertEquals("$age2", field.getIdentifier());
+		assertEqualsIgnoreWhitespace("$age2 == $age1+2", (String) pred
+				.getContent());
+	}
 
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 2,
-                      rule.getLhs().getDescrs().size() );
+	public void testNotWithConstraint() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"not_with_constraint.drl");
 
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final FieldBindingDescr fieldBinding = (FieldBindingDescr) pattern.getConstraint().getDescrs().get( 0 );
-        assertEquals( "$likes",
-                      fieldBinding.getIdentifier() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
 
-        final NotDescr not = (NotDescr) rule.getLhs().getDescrs().get( 1 );
-        pattern = (PatternDescr) not.getDescrs().get( 0 );
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(2, rule.getLhs().getDescrs().size());
 
-        final FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
-        final VariableRestrictionDescr boundVariable = (VariableRestrictionDescr) fld.getRestrictions().get( 0 );
+		PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
+		final FieldBindingDescr fieldBinding = (FieldBindingDescr) pattern
+				.getConstraint().getDescrs().get(0);
+		assertEquals("$likes", fieldBinding.getIdentifier());
 
-        assertEquals( "type",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      boundVariable.getEvaluator() );
-        assertEquals( "$likes",
-                      boundVariable.getIdentifier() );
-    }
+		final NotDescr not = (NotDescr) rule.getLhs().getDescrs().get(1);
+		pattern = (PatternDescr) not.getDescrs().get(0);
 
-    public void testGlobal() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "globals.drl" );
+		final FieldConstraintDescr fld = (FieldConstraintDescr) pattern
+				.getConstraint().getDescrs().get(0);
+		final VariableRestrictionDescr boundVariable = (VariableRestrictionDescr) fld
+				.getRestrictions().get(0);
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
+		assertEquals("type", fld.getFieldName());
+		assertEquals("==", boundVariable.getEvaluator());
+		assertEquals("$likes", boundVariable.getIdentifier());
+	}
 
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+	public void testGlobal() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "globals.drl");
 
-        assertEquals( 1,
-                      pack.getImports().size() );
-        assertEquals( 2,
-                      pack.getGlobals().size() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
 
-        final GlobalDescr foo = (GlobalDescr) pack.getGlobals().get( 0 );
-        assertEquals( "java.lang.String",
-                      foo.getType() );
-        assertEquals( "foo",
-                      foo.getIdentifier() );
-        final GlobalDescr bar = (GlobalDescr) pack.getGlobals().get( 1 );
-        assertEquals( "java.lang.Integer",
-                      bar.getType() );
-        assertEquals( "bar",
-                      bar.getIdentifier() );
-    }
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-    public void testFunctions() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "functions.drl" );
+		assertEquals(1, pack.getImports().size());
+		assertEquals(2, pack.getGlobals().size());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 2,
-                      pack.getRules().size() );
+		final GlobalDescr foo = (GlobalDescr) pack.getGlobals().get(0);
+		assertEquals("java.lang.String", foo.getType());
+		assertEquals("foo", foo.getIdentifier());
+		final GlobalDescr bar = (GlobalDescr) pack.getGlobals().get(1);
+		assertEquals("java.lang.Integer", bar.getType());
+		assertEquals("bar", bar.getIdentifier());
+	}
 
-        final List functions = pack.getFunctions();
-        assertEquals( 2,
-                      functions.size() );
+	public void testFunctions() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "functions.drl");
 
-        FunctionDescr func = (FunctionDescr) functions.get( 0 );
-        assertEquals( "functionA",
-                      func.getName() );
-        assertEquals( "String",
-                      func.getReturnType() );
-        assertEquals( 2,
-                      func.getParameterNames().size() );
-        assertEquals( 2,
-                      func.getParameterTypes().size() );
-        assertEquals( 4,
-                      func.getLine() );
-        assertEquals( 0,
-                      func.getColumn() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(2, pack.getRules().size());
 
-        assertEquals( "String",
-                      func.getParameterTypes().get( 0 ) );
-        assertEquals( "s",
-                      func.getParameterNames().get( 0 ) );
+		final List functions = pack.getFunctions();
+		assertEquals(2, functions.size());
 
-        assertEquals( "Integer",
-                      func.getParameterTypes().get( 1 ) );
-        assertEquals( "i",
-                      func.getParameterNames().get( 1 ) );
+		FunctionDescr func = (FunctionDescr) functions.get(0);
+		assertEquals("functionA", func.getName());
+		assertEquals("String", func.getReturnType());
+		assertEquals(2, func.getParameterNames().size());
+		assertEquals(2, func.getParameterTypes().size());
+		assertEquals(4, func.getLine());
+		assertEquals(0, func.getColumn());
 
-        assertEqualsIgnoreWhitespace( "foo();",
-                                      func.getText() );
+		assertEquals("String", func.getParameterTypes().get(0));
+		assertEquals("s", func.getParameterNames().get(0));
 
-        func = (FunctionDescr) functions.get( 1 );
-        assertEquals( "functionB",
-                      func.getName() );
-        assertEqualsIgnoreWhitespace( "bar();",
-                                      func.getText() );
-    }
+		assertEquals("Integer", func.getParameterTypes().get(1));
+		assertEquals("i", func.getParameterNames().get(1));
 
-    public void testComment() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "comment.drl" );
+		assertEqualsIgnoreWhitespace("foo();", func.getText());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertNotNull( pack );
+		func = (FunctionDescr) functions.get(1);
+		assertEquals("functionB", func.getName());
+		assertEqualsIgnoreWhitespace("bar();", func.getText());
+	}
 
-        assertEquals( "foo.bar",
-                      pack.getName() );
-    }
+	public void testComment() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "comment.drl");
 
-    public void testAttributes() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "rule_attributes.drl" );
-        assertEquals( "simple_rule",
-                      rule.getName() );
-        assertEqualsIgnoreWhitespace( "bar();",
-                                      (String) rule.getConsequence() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertNotNull(pack);
 
-        final List attrs = rule.getAttributes();
-        assertEquals( 6,
-                      attrs.size() );
+		assertEquals("foo.bar", pack.getName());
+	}
 
-        AttributeDescr at = (AttributeDescr) attrs.get( 0 );
-        assertEquals( "salience",
-                      at.getName() );
-        assertEquals( "42",
-                      at.getValue() );
+	public void testAttributes() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"rule_attributes.drl");
+		assertEquals("simple_rule", rule.getName());
+		assertEqualsIgnoreWhitespace("bar();", (String) rule.getConsequence());
 
-        at = (AttributeDescr) attrs.get( 1 );
-        assertEquals( "agenda-group",
-                      at.getName() );
-        assertEquals( "my_group",
-                      at.getValue() );
+		final List attrs = rule.getAttributes();
+		assertEquals(6, attrs.size());
 
-        at = (AttributeDescr) attrs.get( 2 );
-        assertEquals( "no-loop",
-                      at.getName() );
-        assertEquals( "true",
-                      at.getValue() );
+		AttributeDescr at = (AttributeDescr) attrs.get(0);
+		assertEquals("salience", at.getName());
+		assertEquals("42", at.getValue());
 
-        at = (AttributeDescr) attrs.get( 3 );
-        assertEquals( "duration",
-                      at.getName() );
-        assertEquals( "42",
-                      at.getValue() );
+		at = (AttributeDescr) attrs.get(1);
+		assertEquals("agenda-group", at.getName());
+		assertEquals("my_group", at.getValue());
 
-        at = (AttributeDescr) attrs.get( 4 );
-        assertEquals( "activation-group",
-                      at.getName() );
-        assertEquals( "my_activation_group",
-                      at.getValue() );
+		at = (AttributeDescr) attrs.get(2);
+		assertEquals("no-loop", at.getName());
+		assertEquals("true", at.getValue());
 
-        at = (AttributeDescr) attrs.get( 5 );
-        assertEquals( "lock-on-active",
-                      at.getName() );
-        assertEquals( "true",
-                      at.getValue() );
-    }
+		at = (AttributeDescr) attrs.get(3);
+		assertEquals("duration", at.getName());
+		assertEquals("42", at.getValue());
 
-    public void testAttributes_alternateSyntax() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "rule_attributes_alt.drl" );
-        assertEquals( "simple_rule",
-                      rule.getName() );
-        assertEqualsIgnoreWhitespace( "bar();",
-                                      (String) rule.getConsequence() );
+		at = (AttributeDescr) attrs.get(4);
+		assertEquals("activation-group", at.getName());
+		assertEquals("my_activation_group", at.getValue());
 
-        final List attrs = rule.getAttributes();
-        assertEquals( 6,
-                      attrs.size() );
+		at = (AttributeDescr) attrs.get(5);
+		assertEquals("lock-on-active", at.getName());
+		assertEquals("true", at.getValue());
+	}
 
-        AttributeDescr at = (AttributeDescr) attrs.get( 0 );
-        assertEquals( "salience",
-                      at.getName() );
-        assertEquals( "42",
-                      at.getValue() );
+	public void testAttributes_alternateSyntax() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"rule_attributes_alt.drl");
+		assertEquals("simple_rule", rule.getName());
+		assertEqualsIgnoreWhitespace("bar();", (String) rule.getConsequence());
 
-        at = (AttributeDescr) attrs.get( 1 );
-        assertEquals( "agenda-group",
-                      at.getName() );
-        assertEquals( "my_group",
-                      at.getValue() );
+		final List attrs = rule.getAttributes();
+		assertEquals(6, attrs.size());
 
-        at = (AttributeDescr) attrs.get( 2 );
-        assertEquals( "no-loop",
-                      at.getName() );
-        assertEquals( "true",
-                      at.getValue() );
+		AttributeDescr at = (AttributeDescr) attrs.get(0);
+		assertEquals("salience", at.getName());
+		assertEquals("42", at.getValue());
 
-        at = (AttributeDescr) attrs.get( 3 );
-        assertEquals( "lock-on-active",
-                      at.getName() );
-        assertEquals( "true",
-                      at.getValue() );
+		at = (AttributeDescr) attrs.get(1);
+		assertEquals("agenda-group", at.getName());
+		assertEquals("my_group", at.getValue());
 
-        at = (AttributeDescr) attrs.get( 4 );
-        assertEquals( "duration",
-                      at.getName() );
-        assertEquals( "42",
-                      at.getValue() );
+		at = (AttributeDescr) attrs.get(2);
+		assertEquals("no-loop", at.getName());
+		assertEquals("true", at.getValue());
 
-        at = (AttributeDescr) attrs.get( 5 );
-        assertEquals( "activation-group",
-                      at.getName() );
-        assertEquals( "my_activation_group",
-                      at.getValue() );
-    }
+		at = (AttributeDescr) attrs.get(3);
+		assertEquals("lock-on-active", at.getName());
+		assertEquals("true", at.getValue());
 
-    public void testEnumeration() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "enumeration.drl" );
-        assertEquals( "simple_rule",
-                      rule.getName() );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
-        final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( "Foo",
-                      col.getObjectType() );
-        assertEquals( 1,
-                      col.getConstraint().getDescrs().size() );
-        final FieldConstraintDescr fld = (FieldConstraintDescr) col.getConstraint().getDescrs().get( 0 );
-        final QualifiedIdentifierRestrictionDescr lit = (QualifiedIdentifierRestrictionDescr) fld.getRestrictions().get( 0 );
+		at = (AttributeDescr) attrs.get(4);
+		assertEquals("duration", at.getName());
+		assertEquals("42", at.getValue());
 
-        assertEquals( "bar",
-                      fld.getFieldName() );
-        assertEquals( "==",
-                      lit.getEvaluator() );
-        assertEquals( "Foo.BAR",
-                      lit.getText() );
-    }
-    public void testExtraLhsNewline() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "extra_lhs_newline.drl" );
-    }
+		at = (AttributeDescr) attrs.get(5);
+		assertEquals("activation-group", at.getName());
+		assertEquals("my_activation_group", at.getValue());
+	}
 
-    public void testSoundsLike() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "soundslike_operator.drl" );
+	public void testEnumeration() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"enumeration.drl");
+		assertEquals("simple_rule", rule.getName());
+		assertEquals(1, rule.getLhs().getDescrs().size());
+		final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		assertEquals("Foo", col.getObjectType());
+		assertEquals(1, col.getConstraint().getDescrs().size());
+		final FieldConstraintDescr fld = (FieldConstraintDescr) col
+				.getConstraint().getDescrs().get(0);
+		final QualifiedIdentifierRestrictionDescr lit = (QualifiedIdentifierRestrictionDescr) fld
+				.getRestrictions().get(0);
 
-        RuleDescr rule = (RuleDescr) this.walker.getPackageDescr().getRules().get( 0 );
-        PatternDescr pat = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+		assertEquals("bar", fld.getFieldName());
+		assertEquals("==", lit.getEvaluator());
+		assertEquals("Foo.BAR", lit.getText());
+	}
 
-        pat.getConstraint();
-    }
+	public void testExtraLhsNewline() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"extra_lhs_newline.drl");
+	}
 
-    public void testPackageAttributes() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "package_attributes.drl" );
+	public void testSoundsLike() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"soundslike_operator.drl");
 
-        PackageDescr pkg = this.walker.getPackageDescr();
-        AttributeDescr at = (AttributeDescr) pkg.getAttributes().get( 0 );
-        assertEquals( "agenda-group",
-                      at.getName() );
-        assertEquals( "x",
-                      at.getValue() );
-        at = (AttributeDescr) pkg.getAttributes().get( 1 );
-        assertEquals( "dialect",
-                      at.getName() );
-        assertEquals( "java",
-                      at.getValue() );
+		RuleDescr rule = (RuleDescr) this.walker.getPackageDescr().getRules()
+				.get(0);
+		PatternDescr pat = (PatternDescr) rule.getLhs().getDescrs().get(0);
 
-        assertEquals( 2,
-                      pkg.getRules().size() );
+		pat.getConstraint();
+	}
 
-        assertEquals( 2,
-                      pkg.getImports().size() );
+	public void testPackageAttributes() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"package_attributes.drl");
 
-        RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
-        assertEquals( "bar",
-                      rule.getName() );
-        at = (AttributeDescr) rule.getAttributes().get( 0 );
-        assertEquals( "agenda-group",
-                      at.getName() );
-        assertEquals( "x",
-                      at.getValue() );
-        at = (AttributeDescr) rule.getAttributes().get( 1 );
-        assertEquals( "dialect",
-                      at.getName() );
-        assertEquals( "java",
-                      at.getValue() );
+		PackageDescr pkg = this.walker.getPackageDescr();
+		AttributeDescr at = (AttributeDescr) pkg.getAttributes().get(0);
+		assertEquals("agenda-group", at.getName());
+		assertEquals("x", at.getValue());
+		at = (AttributeDescr) pkg.getAttributes().get(1);
+		assertEquals("dialect", at.getName());
+		assertEquals("java", at.getValue());
 
-        rule = (RuleDescr) pkg.getRules().get( 1 );
-        assertEquals( "baz",
-                      rule.getName() );
-        at = (AttributeDescr) rule.getAttributes().get( 0 );
-        assertEquals( "dialect",
-                      at.getName() );
-        assertEquals( "mvel",
-                      at.getValue() );
-        at = (AttributeDescr) rule.getAttributes().get( 1 );
-        assertEquals( "agenda-group",
-                      at.getName() );
-        assertEquals( "x",
-                      at.getValue() );
+		assertEquals(2, pkg.getRules().size());
 
-    }
+		assertEquals(2, pkg.getImports().size());
 
-    public void testStatementOrdering1() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "statement_ordering_1.drl" );
+		RuleDescr rule = (RuleDescr) pkg.getRules().get(0);
+		assertEquals("bar", rule.getName());
+		at = (AttributeDescr) rule.getAttributes().get(0);
+		assertEquals("agenda-group", at.getName());
+		assertEquals("x", at.getValue());
+		at = (AttributeDescr) rule.getAttributes().get(1);
+		assertEquals("dialect", at.getName());
+		assertEquals("java", at.getValue());
 
-        final PackageDescr pkg = this.walker.getPackageDescr();
+		rule = (RuleDescr) pkg.getRules().get(1);
+		assertEquals("baz", rule.getName());
+		at = (AttributeDescr) rule.getAttributes().get(0);
+		assertEquals("dialect", at.getName());
+		assertEquals("mvel", at.getValue());
+		at = (AttributeDescr) rule.getAttributes().get(1);
+		assertEquals("agenda-group", at.getName());
+		assertEquals("x", at.getValue());
 
-        assertEquals( 2,
-                      pkg.getRules().size() );
+	}
 
-        assertEquals( "foo",
-                      ((RuleDescr) pkg.getRules().get( 0 )).getName() );
-        assertEquals( "bar",
-                      ((RuleDescr) pkg.getRules().get( 1 )).getName() );
+	public void testStatementOrdering1() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"statement_ordering_1.drl");
 
-        assertEquals( 2,
-                      pkg.getFunctions().size() );
+		final PackageDescr pkg = this.walker.getPackageDescr();
 
-        assertEquals( "cheeseIt",
-                      ((FunctionDescr) pkg.getFunctions().get( 0 )).getName() );
-        assertEquals( "uncheeseIt",
-                      ((FunctionDescr) pkg.getFunctions().get( 1 )).getName() );
+		assertEquals(2, pkg.getRules().size());
 
-        assertEquals( 4,
-                      pkg.getImports().size() );
-        assertEquals( "im.one",
-                      ((ImportDescr) pkg.getImports().get( 0 )).getTarget() );
-        assertEquals( "im.two",
-                      ((ImportDescr) pkg.getImports().get( 1 )).getTarget() );
-        assertEquals( "im.three",
-                      ((ImportDescr) pkg.getImports().get( 2 )).getTarget() );
-        assertEquals( "im.four",
-                      ((ImportDescr) pkg.getImports().get( 3 )).getTarget() );
-    }
+		assertEquals("foo", ((RuleDescr) pkg.getRules().get(0)).getName());
+		assertEquals("bar", ((RuleDescr) pkg.getRules().get(1)).getName());
 
-    public void testRuleNamesStartingWithNumbers() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "rule_names_number_prefix.drl" );
+		assertEquals(2, pkg.getFunctions().size());
 
-        final PackageDescr pkg = this.walker.getPackageDescr();
+		assertEquals("cheeseIt", ((FunctionDescr) pkg.getFunctions().get(0))
+				.getName());
+		assertEquals("uncheeseIt", ((FunctionDescr) pkg.getFunctions().get(1))
+				.getName());
 
-        assertEquals( 2,
-                      pkg.getRules().size() );
+		assertEquals(4, pkg.getImports().size());
+		assertEquals("im.one", ((ImportDescr) pkg.getImports().get(0))
+				.getTarget());
+		assertEquals("im.two", ((ImportDescr) pkg.getImports().get(1))
+				.getTarget());
+		assertEquals("im.three", ((ImportDescr) pkg.getImports().get(2))
+				.getTarget());
+		assertEquals("im.four", ((ImportDescr) pkg.getImports().get(3))
+				.getTarget());
+	}
 
-        assertEquals( "1. Do Stuff!",
-                      ((RuleDescr) pkg.getRules().get( 0 )).getName() );
-        assertEquals( "2. Do More Stuff!",
-                      ((RuleDescr) pkg.getRules().get( 1 )).getName() );
-    }
+	public void testRuleNamesStartingWithNumbers() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"rule_names_number_prefix.drl");
 
-    public void testEvalWithNewline() throws Exception {
-        parseResource("compilation_unit","compilation_unit", "eval_with_newline.drl" );
-    }
+		final PackageDescr pkg = this.walker.getPackageDescr();
 
-    public void testEndPosition() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "test_EndPosition.drl" );
-        final RuleDescr rule = (RuleDescr) this.walker.getPackageDescr().getRules().get( 0 );
-        final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-//        assertEquals( 6,
-//                      col.getLine() );
-//
-//        assertEquals( 8,
-//                      col.getEndLine() );
-    }
+		assertEquals(2, pkg.getRules().size());
 
-    public void testQualifiedClassname() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "qualified_classname.drl" );
+		assertEquals("1. Do Stuff!", ((RuleDescr) pkg.getRules().get(0))
+				.getName());
+		assertEquals("2. Do More Stuff!", ((RuleDescr) pkg.getRules().get(1))
+				.getName());
+	}
 
-        final PackageDescr pkg = this.walker.getPackageDescr();
-        final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
+	public void testEvalWithNewline() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"eval_with_newline.drl");
+	}
 
-        final PatternDescr p = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
+	public void testEndPosition() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"test_EndPosition.drl");
+		final RuleDescr rule = (RuleDescr) this.walker.getPackageDescr()
+				.getRules().get(0);
+		final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		// assertEquals( 6,
+		// col.getLine() );
+		//
+		// assertEquals( 8,
+		// col.getEndLine() );
+	}
 
-        assertEquals( "com.cheeseco.Cheese",
-                      p.getObjectType() );
-    }
+	public void testQualifiedClassname() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"qualified_classname.drl");
 
-    public void testAccumulate() throws Exception {
-        parseResource("compilation_unit","compilation_unit", "accumulate.drl" );
+		final PackageDescr pkg = this.walker.getPackageDescr();
+		final RuleDescr rule = (RuleDescr) pkg.getRules().get(0);
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		final PatternDescr p = (PatternDescr) rule.getLhs().getDescrs().get(0);
 
-        final PatternDescr outPattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final AccumulateDescr accum = (AccumulateDescr) outPattern.getSource();
-        assertEqualsIgnoreWhitespace( "int x = 0 ;",
-                                      accum.getInitCode() );
-        assertEqualsIgnoreWhitespace( "x++;",
-                                      accum.getActionCode() );
-        assertNull( accum.getReverseCode() );
-        assertEqualsIgnoreWhitespace( "new Integer(x)",
-                                      accum.getResultCode() );
+		assertEquals("com.cheeseco.Cheese", p.getObjectType());
+	}
 
-        assertFalse( accum.isExternalFunction() );
+	public void testAccumulate() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "accumulate.drl");
 
-        final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
-        assertEquals( "Person",
-                      pattern.getObjectType() );
-    }
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-    public void testAccumulateWithBindings() throws Exception {
-        parseResource("compilation_unit","compilation_unit",  "accumulate_with_bindings.drl" );
+		final PatternDescr outPattern = (PatternDescr) rule.getLhs()
+				.getDescrs().get(0);
+		final AccumulateDescr accum = (AccumulateDescr) outPattern.getSource();
+		assertEqualsIgnoreWhitespace("int x = 0 ;", accum.getInitCode());
+		assertEqualsIgnoreWhitespace("x++;", accum.getActionCode());
+		assertNull(accum.getReverseCode());
+		assertEqualsIgnoreWhitespace("new Integer(x)", accum.getResultCode());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		assertFalse(accum.isExternalFunction());
 
-        final PatternDescr outPattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final AccumulateDescr accum = (AccumulateDescr) outPattern.getSource();
-        assertEqualsIgnoreWhitespace( "$counter",
-                                      outPattern.getIdentifier() );
-        assertEqualsIgnoreWhitespace( "int x = 0 ;",
-                                      accum.getInitCode() );
-        assertEqualsIgnoreWhitespace( "x++;",
-                                      accum.getActionCode() );
-        assertEqualsIgnoreWhitespace( "new Integer(x)",
-                                      accum.getResultCode() );
+		final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
+		assertEquals("Person", pattern.getObjectType());
+	}
 
-        final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
-        assertEquals( "Person",
-                      pattern.getObjectType() );
-    }
+	public void testAccumulateWithBindings() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"accumulate_with_bindings.drl");
 
-    public void testCollect() throws Exception {
-        parseResource("compilation_unit","compilation_unit", "collect.drl" );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		final PatternDescr outPattern = (PatternDescr) rule.getLhs()
+				.getDescrs().get(0);
+		final AccumulateDescr accum = (AccumulateDescr) outPattern.getSource();
+		assertEqualsIgnoreWhitespace("$counter", outPattern.getIdentifier());
+		assertEqualsIgnoreWhitespace("int x = 0 ;", accum.getInitCode());
+		assertEqualsIgnoreWhitespace("x++;", accum.getActionCode());
+		assertEqualsIgnoreWhitespace("new Integer(x)", accum.getResultCode());
 
-        final PatternDescr outPattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final CollectDescr collect = (CollectDescr) outPattern.getSource();
+		final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
+		assertEquals("Person", pattern.getObjectType());
+	}
 
-        final PatternDescr pattern = (PatternDescr) collect.getInputPattern();
-        assertEquals( "Person",
-                      pattern.getObjectType() );
-    }
+	public void testCollect() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "collect.drl");
 
-    public void testPredicate() throws Exception {
-        final PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", "Foo ($var : attr -> ( $var.equals(\"xyz\") ))" );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        final List constraints = pattern.getConstraint().getDescrs();
-        assertEquals( 2,
-                      constraints.size() );
+		final PatternDescr outPattern = (PatternDescr) rule.getLhs()
+				.getDescrs().get(0);
+		final CollectDescr collect = (CollectDescr) outPattern.getSource();
 
-        final FieldBindingDescr field = (FieldBindingDescr) constraints.get( 0 );
-        final PredicateDescr predicate = (PredicateDescr) constraints.get( 1 );
-        assertEquals( "$var",
-                      field.getIdentifier() );
-        assertEquals( "attr",
-                      field.getFieldName() );
-        assertEquals( " $var.equals(\"xyz\") ",
-                      predicate.getContent() );
-    }
+		final PatternDescr pattern = (PatternDescr) collect.getInputPattern();
+		assertEquals("Person", pattern.getObjectType());
+	}
 
-    public void testPredicate2() throws Exception {
-        // predicates are also prefixed by the eval keyword
-        final PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern",  "Foo(eval( $var.equals(\"xyz\") ))" );
+	public void testPredicate() throws Exception {
+		final PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", "Foo ($var : attr -> ( $var.equals(\"xyz\") ))");
 
-        final List constraints = pattern.getConstraint().getDescrs();
-        assertEquals( 1,
-                      constraints.size() );
+		final List constraints = pattern.getConstraint().getDescrs();
+		assertEquals(2, constraints.size());
 
-        final PredicateDescr predicate = (PredicateDescr) constraints.get( 0 );
-        assertEquals( " $var.equals(\"xyz\") ",
-                      predicate.getContent() );
-    }
+		final FieldBindingDescr field = (FieldBindingDescr) constraints.get(0);
+		final PredicateDescr predicate = (PredicateDescr) constraints.get(1);
+		assertEquals("$var", field.getIdentifier());
+		assertEquals("attr", field.getFieldName());
+		assertEquals(" $var.equals(\"xyz\") ", predicate.getContent());
+	}
 
-    public void testEscapedStrings() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "escaped-string.drl" );
+	public void testPredicate2() throws Exception {
+		// predicates are also prefixed by the eval keyword
+		final PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", "Foo(eval( $var.equals(\"xyz\") ))");
 
-        assertNotNull( rule );
+		final List constraints = pattern.getConstraint().getDescrs();
+		assertEquals(1, constraints.size());
 
-        assertEquals( "test_Quotes",
-                      rule.getName() );
+		final PredicateDescr predicate = (PredicateDescr) constraints.get(0);
+		assertEquals(" $var.equals(\"xyz\") ", predicate.getContent());
+	}
 
-        final String expected = "String s = \"\\\"\\n\\t\\\\\";";
+	public void testEscapedStrings() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"escaped-string.drl");
 
-        assertEqualsIgnoreWhitespace( expected,
-                                      (String) rule.getConsequence() );
-    }
+		assertNotNull(rule);
 
-    public void testNestedCEs() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "nested_conditional_elements.drl" );
+		assertEquals("test_Quotes", rule.getName());
 
-        assertNotNull( rule );
+		final String expected = "String s = \"\\\"\\n\\t\\\\\";";
 
-        final AndDescr root = rule.getLhs();
-        final NotDescr not1 = (NotDescr) root.getDescrs().get( 0 );
-        final AndDescr and1 = (AndDescr) not1.getDescrs().get( 0 );
+		assertEqualsIgnoreWhitespace(expected, (String) rule.getConsequence());
+	}
 
-        final PatternDescr state = (PatternDescr) and1.getDescrs().get( 0 );
-        final NotDescr not2 = (NotDescr) and1.getDescrs().get( 1 );
-        final AndDescr and2 = (AndDescr) not2.getDescrs().get( 0 );
-        final PatternDescr person = (PatternDescr) and2.getDescrs().get( 0 );
-        final PatternDescr cheese = (PatternDescr) and2.getDescrs().get( 1 );
+	public void testNestedCEs() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"nested_conditional_elements.drl");
 
-        final PatternDescr person2 = (PatternDescr) root.getDescrs().get( 1 );
-        final OrDescr or = (OrDescr) root.getDescrs().get( 2 );
-        final PatternDescr cheese2 = (PatternDescr) or.getDescrs().get( 0 );
-        final PatternDescr cheese3 = (PatternDescr) or.getDescrs().get( 1 );
+		assertNotNull(rule);
 
-        assertEquals( state.getObjectType(),
-                      "State" );
-        assertEquals( person.getObjectType(),
-                      "Person" );
-        assertEquals( cheese.getObjectType(),
-                      "Cheese" );
-        assertEquals( person2.getObjectType(),
-                      "Person" );
-        assertEquals( cheese2.getObjectType(),
-                      "Cheese" );
-        assertEquals( cheese3.getObjectType(),
-                      "Cheese" );
-    }
+		final AndDescr root = rule.getLhs();
+		final NotDescr not1 = (NotDescr) root.getDescrs().get(0);
+		final AndDescr and1 = (AndDescr) not1.getDescrs().get(0);
 
-    public void testForall() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "forall.drl" );
+		final PatternDescr state = (PatternDescr) and1.getDescrs().get(0);
+		final NotDescr not2 = (NotDescr) and1.getDescrs().get(1);
+		final AndDescr and2 = (AndDescr) not2.getDescrs().get(0);
+		final PatternDescr person = (PatternDescr) and2.getDescrs().get(0);
+		final PatternDescr cheese = (PatternDescr) and2.getDescrs().get(1);
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		final PatternDescr person2 = (PatternDescr) root.getDescrs().get(1);
+		final OrDescr or = (OrDescr) root.getDescrs().get(2);
+		final PatternDescr cheese2 = (PatternDescr) or.getDescrs().get(0);
+		final PatternDescr cheese3 = (PatternDescr) or.getDescrs().get(1);
 
-        final ForallDescr forall = (ForallDescr) rule.getLhs().getDescrs().get( 0 );
+		assertEquals(state.getObjectType(), "State");
+		assertEquals(person.getObjectType(), "Person");
+		assertEquals(cheese.getObjectType(), "Cheese");
+		assertEquals(person2.getObjectType(), "Person");
+		assertEquals(cheese2.getObjectType(), "Cheese");
+		assertEquals(cheese3.getObjectType(), "Cheese");
+	}
 
-        assertEquals( 2,
-                      forall.getDescrs().size() );
-        final PatternDescr pattern = forall.getBasePattern();
-        assertEquals( "Person",
-                      pattern.getObjectType() );
-        final List remaining = forall.getRemainingPatterns();
-        assertEquals( 1,
-                      remaining.size() );
-        final PatternDescr cheese = (PatternDescr) remaining.get( 0 );
-        assertEquals( "Cheese",
-                      cheese.getObjectType() );
-    }
+	public void testForall() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "forall.drl");
 
-    public void testMemberof() throws Exception {
-        final String text = "Country( $cities : city )\nPerson( city memberOf $cities )\n";
-        AndDescr descrs = (AndDescr) parse("normal_lhs_block", "lhs_block", text);
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        assertEquals( 2,
-                      descrs.getDescrs().size() );
-        PatternDescr pat = (PatternDescr) descrs.getDescrs().get( 1 );
-        FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat.getConstraint().getDescrs().get( 0 );
-        VariableRestrictionDescr restr = (VariableRestrictionDescr) fieldConstr.getRestrictions().get( 0 );
+		final ForallDescr forall = (ForallDescr) rule.getLhs().getDescrs().get(
+				0);
 
-        assertEquals( "memberOf",
-                      restr.getEvaluator() );
-        assertFalse( restr.isNegated() );
-        assertEquals( "$cities",
-                      restr.getIdentifier() );
-    }
+		assertEquals(2, forall.getDescrs().size());
+		final PatternDescr pattern = forall.getBasePattern();
+		assertEquals("Person", pattern.getObjectType());
+		final List remaining = forall.getRemainingPatterns();
+		assertEquals(1, remaining.size());
+		final PatternDescr cheese = (PatternDescr) remaining.get(0);
+		assertEquals("Cheese", cheese.getObjectType());
+	}
 
-    public void testNotMemberof() throws Exception {
-        final String text = "Country( $cities : city )\nPerson( city not memberOf $cities )\n";
-        AndDescr descrs = (AndDescr) parse("normal_lhs_block", "lhs_block", text);
+	public void testMemberof() throws Exception {
+		final String text = "Country( $cities : city )\nPerson( city memberOf $cities )\n";
+		AndDescr descrs = (AndDescr) parse("normal_lhs_block", "lhs_block",
+				text);
 
-        assertEquals( 2,
-                      descrs.getDescrs().size() );
-        PatternDescr pat = (PatternDescr) descrs.getDescrs().get( 1 );
-        FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat.getConstraint().getDescrs().get( 0 );
-        VariableRestrictionDescr restr = (VariableRestrictionDescr) fieldConstr.getRestrictions().get( 0 );
+		assertEquals(2, descrs.getDescrs().size());
+		PatternDescr pat = (PatternDescr) descrs.getDescrs().get(1);
+		FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat
+				.getConstraint().getDescrs().get(0);
+		VariableRestrictionDescr restr = (VariableRestrictionDescr) fieldConstr
+				.getRestrictions().get(0);
 
-        assertEquals( "memberOf",
-                      restr.getEvaluator() );
-        assertTrue( restr.isNegated() );
-        assertEquals( "$cities",
-                      restr.getIdentifier() );
-    }
+		assertEquals("memberOf", restr.getEvaluator());
+		assertFalse(restr.isNegated());
+		assertEquals("$cities", restr.getIdentifier());
+	}
 
-    public void testInOperator() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",  "in_operator_test.drl" );
+	public void testNotMemberof() throws Exception {
+		final String text = "Country( $cities : city )\nPerson( city not memberOf $cities )\n";
+		AndDescr descrs = (AndDescr) parse("normal_lhs_block", "lhs_block",
+				text);
 
-        assertNotNull( rule );
+		assertEquals(2, descrs.getDescrs().size());
+		PatternDescr pat = (PatternDescr) descrs.getDescrs().get(1);
+		FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat
+				.getConstraint().getDescrs().get(0);
+		VariableRestrictionDescr restr = (VariableRestrictionDescr) fieldConstr
+				.getRestrictions().get(0);
 
-        assertEqualsIgnoreWhitespace( "consequence();",
-                                      (String) rule.getConsequence() );
-        assertEquals( "simple_rule",
-                      rule.getName() );
-        assertEquals( 2,
-                      rule.getLhs().getDescrs().size() );
+		assertEquals("memberOf", restr.getEvaluator());
+		assertTrue(restr.isNegated());
+		assertEquals("$cities", restr.getIdentifier());
+	}
 
-        //The first pattern, with 2 restrictions on a single field (plus a connective)
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( "Person",
-                      pattern.getObjectType() );
-        assertEquals( 1,
-                      pattern.getConstraint().getDescrs().size() );
+	public void testInOperator() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"in_operator_test.drl");
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
-        assertEquals( RestrictionConnectiveDescr.AND,
-                      fld.getRestriction().getConnective() );
-        assertEquals( 2,
-                      fld.getRestrictions().size() );
-        assertEquals( "age",
-                      fld.getFieldName() );
+		assertNotNull(rule);
 
-        LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
-        assertEquals( ">",
-                      lit.getEvaluator() );
-        assertEquals( "30",
-                      lit.getText() );
+		assertEqualsIgnoreWhitespace("consequence();", (String) rule
+				.getConsequence());
+		assertEquals("simple_rule", rule.getName());
+		assertEquals(2, rule.getLhs().getDescrs().size());
 
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 1 );
-        assertEquals( "<",
-                      lit.getEvaluator() );
-        assertEquals( "40",
-                      lit.getText() );
+		// The first pattern, with 2 restrictions on a single field (plus a
+		// connective)
+		PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
+		assertEquals("Person", pattern.getObjectType());
+		assertEquals(1, pattern.getConstraint().getDescrs().size());
 
-        //the second col, with 2 fields, the first with 2 restrictions, the second field with one
-        pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
-        assertEquals( "Vehicle",
-                      pattern.getObjectType() );
-        assertEquals( 2,
-                      pattern.getConstraint().getDescrs().size() );
+		FieldConstraintDescr fld = (FieldConstraintDescr) pattern
+				.getConstraint().getDescrs().get(0);
+		assertEquals(RestrictionConnectiveDescr.AND, fld.getRestriction()
+				.getConnective());
+		assertEquals(2, fld.getRestrictions().size());
+		assertEquals("age", fld.getFieldName());
 
-        fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
-        assertEquals( "type",
-                      fld.getFieldName() );
-        assertEquals( 1,
-                      fld.getRestrictions().size() );
+		LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld
+				.getRestrictions().get(0);
+		assertEquals(">", lit.getEvaluator());
+		assertEquals("30", lit.getText());
 
-        RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fld.getRestrictions().get( 0 );
-        assertEquals( RestrictionConnectiveDescr.OR,
-                      or.getConnective() );
-        assertEquals( 2,
-                      or.getRestrictions().size() );
+		lit = (LiteralRestrictionDescr) fld.getRestrictions().get(1);
+		assertEquals("<", lit.getEvaluator());
+		assertEquals("40", lit.getText());
 
-        lit = (LiteralRestrictionDescr) or.getRestrictions().get( 0 );
-        assertEquals( "==",
-                      lit.getEvaluator() );
-        assertEquals( "sedan",
-                      lit.getText() );
+		// the second col, with 2 fields, the first with 2 restrictions, the
+		// second field with one
+		pattern = (PatternDescr) rule.getLhs().getDescrs().get(1);
+		assertEquals("Vehicle", pattern.getObjectType());
+		assertEquals(2, pattern.getConstraint().getDescrs().size());
 
-        lit = (LiteralRestrictionDescr) or.getRestrictions().get( 1 );
-        assertEquals( "==",
-                      lit.getEvaluator() );
-        assertEquals( "wagon",
-                      lit.getText() );
+		fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get(0);
+		assertEquals("type", fld.getFieldName());
+		assertEquals(1, fld.getRestrictions().size());
 
-        //now the second field
-        fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 1 );
-        assertEquals( 1,
-                      fld.getRestrictions().size() );
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
-        assertEquals( "<",
-                      lit.getEvaluator() );
-        assertEquals( "3",
-                      lit.getText() );
+		RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fld
+				.getRestrictions().get(0);
+		assertEquals(RestrictionConnectiveDescr.OR, or.getConnective());
+		assertEquals(2, or.getRestrictions().size());
 
-    }
+		lit = (LiteralRestrictionDescr) or.getRestrictions().get(0);
+		assertEquals("==", lit.getEvaluator());
+		assertEquals("sedan", lit.getText());
 
-    public void testNotInOperator() throws Exception {
-        final RuleDescr rule = (RuleDescr) parseResource("rule","rule", "notin_operator_test.drl" );
+		lit = (LiteralRestrictionDescr) or.getRestrictions().get(1);
+		assertEquals("==", lit.getEvaluator());
+		assertEquals("wagon", lit.getText());
 
-        assertNotNull( rule );
+		// now the second field
+		fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get(1);
+		assertEquals(1, fld.getRestrictions().size());
+		lit = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
+		assertEquals("<", lit.getEvaluator());
+		assertEquals("3", lit.getText());
 
-        assertEqualsIgnoreWhitespace( "consequence();",
-                                      (String) rule.getConsequence() );
-        assertEquals( "simple_rule",
-                      rule.getName() );
-        assertEquals( 2,
-                      rule.getLhs().getDescrs().size() );
+	}
 
-        //The first pattern, with 2 restrictions on a single field (plus a connective)
-        PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( "Person",
-                      pattern.getObjectType() );
-        assertEquals( 1,
-                      pattern.getConstraint().getDescrs().size() );
+	public void testNotInOperator() throws Exception {
+		final RuleDescr rule = (RuleDescr) parseResource("rule", "rule",
+				"notin_operator_test.drl");
 
-        FieldConstraintDescr fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
-        assertEquals( 2,
-                      fld.getRestrictions().size() );
-        assertEquals( "age",
-                      fld.getFieldName() );
+		assertNotNull(rule);
 
-        LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
-        assertEquals( ">",
-                      lit.getEvaluator() );
-        assertEquals( "30",
-                      lit.getText() );
+		assertEqualsIgnoreWhitespace("consequence();", (String) rule
+				.getConsequence());
+		assertEquals("simple_rule", rule.getName());
+		assertEquals(2, rule.getLhs().getDescrs().size());
 
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 1 );
-        assertEquals( "<",
-                      lit.getEvaluator() );
-        assertEquals( "40",
-                      lit.getText() );
+		// The first pattern, with 2 restrictions on a single field (plus a
+		// connective)
+		PatternDescr pattern = (PatternDescr) rule.getLhs().getDescrs().get(0);
+		assertEquals("Person", pattern.getObjectType());
+		assertEquals(1, pattern.getConstraint().getDescrs().size());
 
-        //the second col, with 2 fields, the first with 2 restrictions, the second field with one
-        pattern = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
-        assertEquals( "Vehicle",
-                      pattern.getObjectType() );
-        assertEquals( 2,
-                      pattern.getConstraint().getDescrs().size() );
+		FieldConstraintDescr fld = (FieldConstraintDescr) pattern
+				.getConstraint().getDescrs().get(0);
+		assertEquals(2, fld.getRestrictions().size());
+		assertEquals("age", fld.getFieldName());
 
-        fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
-        assertEquals( 2,
-                      fld.getRestrictions().size() );
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
-        assertEquals( "type",
-                      fld.getFieldName() );
-        assertEquals( "!=",
-                      lit.getEvaluator() );
-        assertEquals( "sedan",
-                      lit.getText() );
+		LiteralRestrictionDescr lit = (LiteralRestrictionDescr) fld
+				.getRestrictions().get(0);
+		assertEquals(">", lit.getEvaluator());
+		assertEquals("30", lit.getText());
 
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 1 );
-        assertEquals( "!=",
-                      lit.getEvaluator() );
-        assertEquals( "wagon",
-                      lit.getText() );
+		lit = (LiteralRestrictionDescr) fld.getRestrictions().get(1);
+		assertEquals("<", lit.getEvaluator());
+		assertEquals("40", lit.getText());
 
-        //now the second field
-        fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 1 );
-        assertEquals( 1,
-                      fld.getRestrictions().size() );
-        lit = (LiteralRestrictionDescr) fld.getRestrictions().get( 0 );
-        assertEquals( "<",
-                      lit.getEvaluator() );
-        assertEquals( "3",
-                      lit.getText() );
+		// the second col, with 2 fields, the first with 2 restrictions, the
+		// second field with one
+		pattern = (PatternDescr) rule.getLhs().getDescrs().get(1);
+		assertEquals("Vehicle", pattern.getObjectType());
+		assertEquals(2, pattern.getConstraint().getDescrs().size());
 
-    }
+		fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get(0);
+		assertEquals(2, fld.getRestrictions().size());
+		lit = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
+		assertEquals("type", fld.getFieldName());
+		assertEquals("!=", lit.getEvaluator());
+		assertEquals("sedan", lit.getText());
 
-    public void testCheckOrDescr() throws Exception {
-        final String text = "Person( eval( age == 25 ) || ( eval( name.equals( \"bob\" ) ) && eval( age == 30 ) ) )";
-        PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", text);
+		lit = (LiteralRestrictionDescr) fld.getRestrictions().get(1);
+		assertEquals("!=", lit.getEvaluator());
+		assertEquals("wagon", lit.getText());
 
-        assertEquals( 1,
-                      pattern.getDescrs().size() );
-        assertEquals(pattern.getConstraint().getClass(), org.drools.lang.descr.AndDescr.class);
+		// now the second field
+		fld = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get(1);
+		assertEquals(1, fld.getRestrictions().size());
+		lit = (LiteralRestrictionDescr) fld.getRestrictions().get(0);
+		assertEquals("<", lit.getEvaluator());
+		assertEquals("3", lit.getText());
 
-        assertEquals(pattern.getConstraint().getDescrs().get(0).getClass(), org.drools.lang.descr.OrDescr.class);
+	}
 
-        OrDescr orDescr = (OrDescr) pattern.getConstraint().getDescrs().get(0);
-        assertEquals(orDescr.getDescrs().get(0).getClass(), org.drools.lang.descr.PredicateDescr.class);
-    }
+	public void testCheckOrDescr() throws Exception {
+		final String text = "Person( eval( age == 25 ) || ( eval( name.equals( \"bob\" ) ) && eval( age == 30 ) ) )";
+		PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", text);
 
-    public void testConstraintAndConnective() throws Exception {
-        final String text = "Person( age < 42 && location==\"atlanta\")";
-        PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", text);
+		assertEquals(1, pattern.getDescrs().size());
+		assertEquals(pattern.getConstraint().getClass(),
+				org.drools.lang.descr.AndDescr.class);
 
-        assertEquals( 2,
-                      pattern.getDescrs().size() );
-        FieldConstraintDescr fcd = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
-        fcd = (FieldConstraintDescr) pattern.getDescrs().get( 1 );
-        assertEquals( "location",
-                      fcd.getFieldName() );
-    }
+		assertEquals(pattern.getConstraint().getDescrs().get(0).getClass(),
+				org.drools.lang.descr.OrDescr.class);
 
-    public void testConstraintOrConnective() throws Exception {
-        final String text = "Person( age < 42 || location==\"atlanta\")";
-        PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", text);
+		OrDescr orDescr = (OrDescr) pattern.getConstraint().getDescrs().get(0);
+		assertEquals(orDescr.getDescrs().get(0).getClass(),
+				org.drools.lang.descr.PredicateDescr.class);
+	}
 
-        assertEquals( 1,
-                      pattern.getDescrs().size() );
-        OrDescr or = (OrDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 2,
-                      or.getDescrs().size() );
-        FieldConstraintDescr fcd = (FieldConstraintDescr) or.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
-        fcd = (FieldConstraintDescr) or.getDescrs().get( 1 );
-        assertEquals( "location",
-                      fcd.getFieldName() );
-    }
+	public void testConstraintAndConnective() throws Exception {
+		final String text = "Person( age < 42 && location==\"atlanta\")";
+		PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", text);
 
-    public void testConstraintConnectivesPrecedence() throws Exception {
-        final String text = "Person( age < 42 && location==\"atlanta\" || age > 20 && location==\"Seatle\" || location == \"Chicago\")";
+		assertEquals(2, pattern.getDescrs().size());
+		FieldConstraintDescr fcd = (FieldConstraintDescr) pattern.getDescrs()
+				.get(0);
+		assertEquals("age", fcd.getFieldName());
+		fcd = (FieldConstraintDescr) pattern.getDescrs().get(1);
+		assertEquals("location", fcd.getFieldName());
+	}
 
-        PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", text);
+	public void testConstraintOrConnective() throws Exception {
+		final String text = "Person( age < 42 || location==\"atlanta\")";
+		PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", text);
 
-        assertEquals( 1,
-                      pattern.getDescrs().size() );
-        OrDescr or = (OrDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 3,
-                      or.getDescrs().size() );
+		assertEquals(1, pattern.getDescrs().size());
+		OrDescr or = (OrDescr) pattern.getDescrs().get(0);
+		assertEquals(2, or.getDescrs().size());
+		FieldConstraintDescr fcd = (FieldConstraintDescr) or.getDescrs().get(0);
+		assertEquals("age", fcd.getFieldName());
+		fcd = (FieldConstraintDescr) or.getDescrs().get(1);
+		assertEquals("location", fcd.getFieldName());
+	}
 
-        AndDescr and = (AndDescr) or.getDescrs().get( 0 );
-        assertEquals( 2,
-                      and.getDescrs().size() );
-        FieldConstraintDescr fcd = (FieldConstraintDescr) and.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
-        assertEquals( "<",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "42",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
-        fcd = (FieldConstraintDescr) and.getDescrs().get( 1 );
-        assertEquals( "location",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "atlanta",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+	public void testConstraintConnectivesPrecedence() throws Exception {
+		final String text = "Person( age < 42 && location==\"atlanta\" || age > 20 && location==\"Seatle\" || location == \"Chicago\")";
 
-        and = (AndDescr) or.getDescrs().get( 1 );
-        assertEquals( 2,
-                      and.getDescrs().size() );
-        fcd = (FieldConstraintDescr) and.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
-        assertEquals( ">",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "20",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
-        fcd = (FieldConstraintDescr) and.getDescrs().get( 1 );
-        assertEquals( "location",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "Seatle",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+		PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", text);
 
-        fcd = (FieldConstraintDescr) or.getDescrs().get( 2 );
-        assertEquals( "location",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "Chicago",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+		assertEquals(1, pattern.getDescrs().size());
+		OrDescr or = (OrDescr) pattern.getDescrs().get(0);
+		assertEquals(3, or.getDescrs().size());
 
-    }
+		AndDescr and = (AndDescr) or.getDescrs().get(0);
+		assertEquals(2, and.getDescrs().size());
+		FieldConstraintDescr fcd = (FieldConstraintDescr) and.getDescrs()
+				.get(0);
+		assertEquals("age", fcd.getFieldName());
+		assertEquals("<", ((LiteralRestrictionDescr) fcd.getRestrictions().get(
+				0)).getEvaluator());
+		assertEquals("42", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
+		fcd = (FieldConstraintDescr) and.getDescrs().get(1);
+		assertEquals("location", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("atlanta", ((LiteralRestrictionDescr) fcd
+				.getRestrictions().get(0)).getText());
 
-    public void testConstraintConnectivesPrecedenceWithBracks() throws Exception {
-        final String text = "Person( age < 42 && ( location==\"atlanta\" || age > 20 && location==\"Seatle\") || location == \"Chicago\")";
-        
-        PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", text);
+		and = (AndDescr) or.getDescrs().get(1);
+		assertEquals(2, and.getDescrs().size());
+		fcd = (FieldConstraintDescr) and.getDescrs().get(0);
+		assertEquals("age", fcd.getFieldName());
+		assertEquals(">", ((LiteralRestrictionDescr) fcd.getRestrictions().get(
+				0)).getEvaluator());
+		assertEquals("20", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
+		fcd = (FieldConstraintDescr) and.getDescrs().get(1);
+		assertEquals("location", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("Seatle", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( 1,
-                      pattern.getDescrs().size() );
-        OrDescr or1 = (OrDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 2,
-                      or1.getDescrs().size() );
+		fcd = (FieldConstraintDescr) or.getDescrs().get(2);
+		assertEquals("location", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("Chicago", ((LiteralRestrictionDescr) fcd
+				.getRestrictions().get(0)).getText());
 
-        AndDescr and1 = (AndDescr) or1.getDescrs().get( 0 );
-        assertEquals( 2,
-                      and1.getDescrs().size() );
-        FieldConstraintDescr fcd = (FieldConstraintDescr) and1.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
-        assertEquals( "<",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "42",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+	}
 
-        OrDescr or2 = (OrDescr) and1.getDescrs().get( 1 );
-        fcd = (FieldConstraintDescr) or2.getDescrs().get( 0 );
-        assertEquals( "location",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "atlanta",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+	public void testConstraintConnectivesPrecedenceWithBracks()
+			throws Exception {
+		final String text = "Person( age < 42 && ( location==\"atlanta\" || age > 20 && location==\"Seatle\") || location == \"Chicago\")";
 
-        AndDescr and2 = (AndDescr) or2.getDescrs().get( 1 );
-        assertEquals( 2,
-                      and2.getDescrs().size() );
-        fcd = (FieldConstraintDescr) and2.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
-        assertEquals( ">",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "20",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
-        fcd = (FieldConstraintDescr) and2.getDescrs().get( 1 );
-        assertEquals( "location",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "Seatle",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+		PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", text);
 
-        fcd = (FieldConstraintDescr) or1.getDescrs().get( 1 );
-        assertEquals( "location",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "Chicago",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
-    }
+		assertEquals(1, pattern.getDescrs().size());
+		OrDescr or1 = (OrDescr) pattern.getDescrs().get(0);
+		assertEquals(2, or1.getDescrs().size());
 
-    public void testConstraintConnectivesPrecedenceWithBracks2() throws Exception {
-        final String text = "Person( ( age == 70 && hair == \"black\" ) || ( age == 40 && hair == \"pink\" ) || ( age == 12 && ( hair == \"yellow\" || hair == \"blue\" ) ) )";
-        
-        PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", text);
+		AndDescr and1 = (AndDescr) or1.getDescrs().get(0);
+		assertEquals(2, and1.getDescrs().size());
+		FieldConstraintDescr fcd = (FieldConstraintDescr) and1.getDescrs().get(
+				0);
+		assertEquals("age", fcd.getFieldName());
+		assertEquals("<", ((LiteralRestrictionDescr) fcd.getRestrictions().get(
+				0)).getEvaluator());
+		assertEquals("42", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( 1,
-                      pattern.getDescrs().size() );
-        OrDescr or1 = (OrDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 3,
-                      or1.getDescrs().size() );
+		OrDescr or2 = (OrDescr) and1.getDescrs().get(1);
+		fcd = (FieldConstraintDescr) or2.getDescrs().get(0);
+		assertEquals("location", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("atlanta", ((LiteralRestrictionDescr) fcd
+				.getRestrictions().get(0)).getText());
 
-        AndDescr and1 = (AndDescr) or1.getDescrs().get( 0 );
-        AndDescr and2 = (AndDescr) or1.getDescrs().get( 1 );
-        AndDescr and3 = (AndDescr) or1.getDescrs().get( 2 );
+		AndDescr and2 = (AndDescr) or2.getDescrs().get(1);
+		assertEquals(2, and2.getDescrs().size());
+		fcd = (FieldConstraintDescr) and2.getDescrs().get(0);
+		assertEquals("age", fcd.getFieldName());
+		assertEquals(">", ((LiteralRestrictionDescr) fcd.getRestrictions().get(
+				0)).getEvaluator());
+		assertEquals("20", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
+		fcd = (FieldConstraintDescr) and2.getDescrs().get(1);
+		assertEquals("location", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("Seatle", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( 2,
-                      and1.getDescrs().size() );
-        FieldConstraintDescr fcd = (FieldConstraintDescr) and1.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "70",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
-        fcd = (FieldConstraintDescr) and1.getDescrs().get( 1 );
-        assertEquals( "hair",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "black",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+		fcd = (FieldConstraintDescr) or1.getDescrs().get(1);
+		assertEquals("location", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("Chicago", ((LiteralRestrictionDescr) fcd
+				.getRestrictions().get(0)).getText());
+	}
 
-        assertEquals( 2,
-                      and2.getDescrs().size() );
-        fcd = (FieldConstraintDescr) and2.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "40",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
-        fcd = (FieldConstraintDescr) and2.getDescrs().get( 1 );
-        assertEquals( "hair",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "pink",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+	public void testConstraintConnectivesPrecedenceWithBracks2()
+			throws Exception {
+		final String text = "Person( ( age == 70 && hair == \"black\" ) || ( age == 40 && hair == \"pink\" ) || ( age == 12 && ( hair == \"yellow\" || hair == \"blue\" ) ) )";
 
-        assertEquals( 2,
-                      and3.getDescrs().size() );
-        fcd = (FieldConstraintDescr) and3.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "12",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
-        OrDescr or2 = (OrDescr) and3.getDescrs().get( 1 );
-        fcd = (FieldConstraintDescr) or2.getDescrs().get( 0 );
-        assertEquals( "hair",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "yellow",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
-        fcd = (FieldConstraintDescr) or2.getDescrs().get( 1 );
-        assertEquals( "hair",
-                      fcd.getFieldName() );
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "blue",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
-    }
+		PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", text);
 
-    public void testRestrictionConnectives() throws Exception {
+		assertEquals(1, pattern.getDescrs().size());
+		OrDescr or1 = (OrDescr) pattern.getDescrs().get(0);
+		assertEquals(3, or1.getDescrs().size());
 
-        // the expression bellow must generate the following tree:
-        //
-        //                       AND
-        //                        |
-        //                       OR
-        //        /---------------+-------------------\
-        //       AND             AND                 AND
-        //    /---+---\       /---+---\           /---+---\
-        //   FC       FC     FC       FC         FC       OR
-        //                                             /---+---\
-        //                                            FC       FC
-        //
-        final String text = "Person( ( age ( > 60 && < 70 ) || ( > 50 && < 55 ) && hair == \"black\" ) || ( age == 40 && hair == \"pink\" ) || ( age == 12 && ( hair == \"yellow\" || hair == \"blue\" ) ))";
-        
-        PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", text);
+		AndDescr and1 = (AndDescr) or1.getDescrs().get(0);
+		AndDescr and2 = (AndDescr) or1.getDescrs().get(1);
+		AndDescr and3 = (AndDescr) or1.getDescrs().get(2);
 
-        assertEquals( 1,
-                      pattern.getDescrs().size() );
+		assertEquals(2, and1.getDescrs().size());
+		FieldConstraintDescr fcd = (FieldConstraintDescr) and1.getDescrs().get(
+				0);
+		assertEquals("age", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("70", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
+		fcd = (FieldConstraintDescr) and1.getDescrs().get(1);
+		assertEquals("hair", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("black", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-        OrDescr orConstr = (OrDescr) pattern.getDescrs().get( 0 );
+		assertEquals(2, and2.getDescrs().size());
+		fcd = (FieldConstraintDescr) and2.getDescrs().get(0);
+		assertEquals("age", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("40", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
+		fcd = (FieldConstraintDescr) and2.getDescrs().get(1);
+		assertEquals("hair", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("pink", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( 3,
-                      orConstr.getDescrs().size() );
+		assertEquals(2, and3.getDescrs().size());
+		fcd = (FieldConstraintDescr) and3.getDescrs().get(0);
+		assertEquals("age", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("12", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
+		OrDescr or2 = (OrDescr) and3.getDescrs().get(1);
+		fcd = (FieldConstraintDescr) or2.getDescrs().get(0);
+		assertEquals("hair", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("yellow", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
+		fcd = (FieldConstraintDescr) or2.getDescrs().get(1);
+		assertEquals("hair", fcd.getFieldName());
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("blue", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
+	}
 
-        AndDescr andConstr1 = (AndDescr) orConstr.getDescrs().get( 0 );
+	public void testRestrictionConnectives() throws Exception {
 
-        FieldConstraintDescr fcd = (FieldConstraintDescr) andConstr1.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
-        RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fcd.getRestriction().getRestrictions().get( 0 );
-        RestrictionConnectiveDescr and1 = (RestrictionConnectiveDescr) or.getRestrictions().get( 0 );
-        RestrictionConnectiveDescr and2 = (RestrictionConnectiveDescr) or.getRestrictions().get( 1 );
+		// the expression bellow must generate the following tree:
+		//
+		// AND
+		// |
+		// OR
+		// /---------------+-------------------\
+		// AND AND AND
+		// /---+---\ /---+---\ /---+---\
+		// FC FC FC FC FC OR
+		// /---+---\
+		// FC FC
+		//
+		final String text = "Person( ( age ( > 60 && < 70 ) || ( > 50 && < 55 ) && hair == \"black\" ) || ( age == 40 && hair == \"pink\" ) || ( age == 12 && ( hair == \"yellow\" || hair == \"blue\" ) ))";
 
-        assertEquals( ">",
-                      ((LiteralRestrictionDescr) and1.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "60",
-                      ((LiteralRestrictionDescr) and1.getRestrictions().get( 0 )).getText() );
+		PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", text);
 
-        assertEquals( "<",
-                      ((LiteralRestrictionDescr) and1.getRestrictions().get( 1 )).getEvaluator() );
-        assertEquals( "70",
-                      ((LiteralRestrictionDescr) and1.getRestrictions().get( 1 )).getText() );
+		assertEquals(1, pattern.getDescrs().size());
 
-        assertEquals( ">",
-                      ((LiteralRestrictionDescr) and2.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "50",
-                      ((LiteralRestrictionDescr) and2.getRestrictions().get( 0 )).getText() );
+		OrDescr orConstr = (OrDescr) pattern.getDescrs().get(0);
 
-        assertEquals( "<",
-                      ((LiteralRestrictionDescr) and2.getRestrictions().get( 1 )).getEvaluator() );
-        assertEquals( "55",
-                      ((LiteralRestrictionDescr) and2.getRestrictions().get( 1 )).getText() );
+		assertEquals(3, orConstr.getDescrs().size());
 
-        fcd = (FieldConstraintDescr) andConstr1.getDescrs().get( 1 );
-        assertEquals( "hair",
-                      fcd.getFieldName() );
+		AndDescr andConstr1 = (AndDescr) orConstr.getDescrs().get(0);
 
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "black",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+		FieldConstraintDescr fcd = (FieldConstraintDescr) andConstr1
+				.getDescrs().get(0);
+		assertEquals("age", fcd.getFieldName());
+		RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fcd
+				.getRestriction().getRestrictions().get(0);
+		RestrictionConnectiveDescr and1 = (RestrictionConnectiveDescr) or
+				.getRestrictions().get(0);
+		RestrictionConnectiveDescr and2 = (RestrictionConnectiveDescr) or
+				.getRestrictions().get(1);
 
-        AndDescr andConstr2 = (AndDescr) orConstr.getDescrs().get( 1 );
-        assertEquals( 2,
-                      andConstr2.getDescrs().size() );
-        fcd = (FieldConstraintDescr) andConstr2.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
+		assertEquals(">", ((LiteralRestrictionDescr) and1.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("60", ((LiteralRestrictionDescr) and1.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "40",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+		assertEquals("<", ((LiteralRestrictionDescr) and1.getRestrictions()
+				.get(1)).getEvaluator());
+		assertEquals("70", ((LiteralRestrictionDescr) and1.getRestrictions()
+				.get(1)).getText());
 
-        fcd = (FieldConstraintDescr) andConstr2.getDescrs().get( 1 );
-        assertEquals( "hair",
-                      fcd.getFieldName() );
+		assertEquals(">", ((LiteralRestrictionDescr) and2.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("50", ((LiteralRestrictionDescr) and2.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "pink",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+		assertEquals("<", ((LiteralRestrictionDescr) and2.getRestrictions()
+				.get(1)).getEvaluator());
+		assertEquals("55", ((LiteralRestrictionDescr) and2.getRestrictions()
+				.get(1)).getText());
 
-        AndDescr andConstr3 = (AndDescr) orConstr.getDescrs().get( 2 );
-        assertEquals( 2,
-                      andConstr3.getDescrs().size() );
-        fcd = (FieldConstraintDescr) andConstr3.getDescrs().get( 0 );
-        assertEquals( "age",
-                      fcd.getFieldName() );
+		fcd = (FieldConstraintDescr) andConstr1.getDescrs().get(1);
+		assertEquals("hair", fcd.getFieldName());
 
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "12",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("black", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-        OrDescr orConstr2 = (OrDescr) andConstr3.getDescrs().get( 1 );
+		AndDescr andConstr2 = (AndDescr) orConstr.getDescrs().get(1);
+		assertEquals(2, andConstr2.getDescrs().size());
+		fcd = (FieldConstraintDescr) andConstr2.getDescrs().get(0);
+		assertEquals("age", fcd.getFieldName());
 
-        fcd = (FieldConstraintDescr) orConstr2.getDescrs().get( 0 );
-        assertEquals( "hair",
-                      fcd.getFieldName() );
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("40", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "yellow",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+		fcd = (FieldConstraintDescr) andConstr2.getDescrs().get(1);
+		assertEquals("hair", fcd.getFieldName());
 
-        fcd = (FieldConstraintDescr) orConstr2.getDescrs().get( 1 );
-        assertEquals( "hair",
-                      fcd.getFieldName() );
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("pink", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( "==",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "blue",
-                      ((LiteralRestrictionDescr) fcd.getRestrictions().get( 0 )).getText() );
+		AndDescr andConstr3 = (AndDescr) orConstr.getDescrs().get(2);
+		assertEquals(2, andConstr3.getDescrs().size());
+		fcd = (FieldConstraintDescr) andConstr3.getDescrs().get(0);
+		assertEquals("age", fcd.getFieldName());
 
-    }
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("12", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-    public void testConstraintConnectivesMatches() throws Exception {
-        final String text = "Person( name matches \"mark\" || matches \"bob\" )";
-        PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", text);
+		OrDescr orConstr2 = (OrDescr) andConstr3.getDescrs().get(1);
 
-        assertEquals( 1,
-                      pattern.getDescrs().size() );
-        FieldConstraintDescr fcd = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
-        assertEquals( "name",
-                      fcd.getFieldName() );
+		fcd = (FieldConstraintDescr) orConstr2.getDescrs().get(0);
+		assertEquals("hair", fcd.getFieldName());
 
-        RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fcd.getRestrictions().get( 0 );
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("yellow", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( 2,
-                      or.getRestrictions().size() );
+		fcd = (FieldConstraintDescr) orConstr2.getDescrs().get(1);
+		assertEquals("hair", fcd.getFieldName());
 
-        assertEquals( "matches",
-                      ((LiteralRestrictionDescr) or.getRestrictions().get( 0 )).getEvaluator() );
-        assertEquals( "mark",
-                      ((LiteralRestrictionDescr) or.getRestrictions().get( 0 )).getText() );
+		assertEquals("==", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("blue", ((LiteralRestrictionDescr) fcd.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( "matches",
-                      ((LiteralRestrictionDescr) or.getRestrictions().get( 1 )).getEvaluator() );
-        assertEquals( "bob",
-                      ((LiteralRestrictionDescr) or.getRestrictions().get( 1 )).getText() );
+	}
 
-    }
+	public void testConstraintConnectivesMatches() throws Exception {
+		final String text = "Person( name matches \"mark\" || matches \"bob\" )";
+		PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", text);
 
-    public void testNotContains() throws Exception {
-        final String text = "City( $city : city )\nCountry( cities not contains $city )\n";
-        AndDescr descrs = (AndDescr) parse("normal_lhs_block", "lhs_block", text);
+		assertEquals(1, pattern.getDescrs().size());
+		FieldConstraintDescr fcd = (FieldConstraintDescr) pattern.getDescrs()
+				.get(0);
+		assertEquals("name", fcd.getFieldName());
 
-        assertEquals( 2,
-                      descrs.getDescrs().size() );
-        PatternDescr pat = (PatternDescr) descrs.getDescrs().get( 1 );
-        FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat.getConstraint().getDescrs().get( 0 );
-        VariableRestrictionDescr restr = (VariableRestrictionDescr) fieldConstr.getRestrictions().get( 0 );
+		RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fcd
+				.getRestrictions().get(0);
 
-        assertEquals( "contains",
-                      restr.getEvaluator() );
-        assertTrue( restr.isNegated() );
-        assertEquals( "$city",
-                      restr.getIdentifier() );
-    }
+		assertEquals(2, or.getRestrictions().size());
 
-    public void testNotMatches() throws Exception {
-        final String text = "Message( text not matches '[abc]*' )\n";
-        AndDescr descrs = (AndDescr) parse("normal_lhs_block", "lhs_block", text);
+		assertEquals("matches", ((LiteralRestrictionDescr) or.getRestrictions()
+				.get(0)).getEvaluator());
+		assertEquals("mark", ((LiteralRestrictionDescr) or.getRestrictions()
+				.get(0)).getText());
 
-        assertEquals( 1,
-                      descrs.getDescrs().size() );
-        PatternDescr pat = (PatternDescr) descrs.getDescrs().get( 0 );
-        FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat.getConstraint().getDescrs().get( 0 );
-        LiteralRestrictionDescr restr = (LiteralRestrictionDescr) fieldConstr.getRestrictions().get( 0 );
+		assertEquals("matches", ((LiteralRestrictionDescr) or.getRestrictions()
+				.get(1)).getEvaluator());
+		assertEquals("bob", ((LiteralRestrictionDescr) or.getRestrictions()
+				.get(1)).getText());
 
-        assertEquals( "matches",
-                      restr.getEvaluator() );
-        assertTrue( restr.isNegated() );
-        assertEquals( "[abc]*",
-                      restr.getText() );
-    }
+	}
 
-    public void testRestrictions() throws Exception {
-        final String text = "Foo( bar > 1 || == 1 )\n";
+	public void testNotContains() throws Exception {
+		final String text = "City( $city : city )\nCountry( cities not contains $city )\n";
+		AndDescr descrs = (AndDescr) parse("normal_lhs_block", "lhs_block",
+				text);
 
-        AndDescr descrs = (AndDescr) parse("normal_lhs_block", "lhs_block", text);
+		assertEquals(2, descrs.getDescrs().size());
+		PatternDescr pat = (PatternDescr) descrs.getDescrs().get(1);
+		FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat
+				.getConstraint().getDescrs().get(0);
+		VariableRestrictionDescr restr = (VariableRestrictionDescr) fieldConstr
+				.getRestrictions().get(0);
 
-        assertEquals( 1,
-                      descrs.getDescrs().size() );
-        PatternDescr pat = (PatternDescr) descrs.getDescrs().get( 0 );
-        FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat.getConstraint().getDescrs().get( 0 );
-        RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fieldConstr.getRestrictions().get( 0 );
-        LiteralRestrictionDescr gt1 = (LiteralRestrictionDescr) or.getRestrictions().get( 0 );
-        LiteralRestrictionDescr eq1 = (LiteralRestrictionDescr) or.getRestrictions().get( 1 );
+		assertEquals("contains", restr.getEvaluator());
+		assertTrue(restr.isNegated());
+		assertEquals("$city", restr.getIdentifier());
+	}
 
-        assertEquals( ">",
-                      gt1.getEvaluator() );
-        assertEquals( false,
-                      gt1.isNegated() );
-        assertEquals( 1,
-                      ((Number) eq1.getValue()).intValue() );
-        assertEquals( "==",
-                      eq1.getEvaluator() );
-        assertEquals( false,
-                      eq1.isNegated() );
-        assertEquals( 1,
-                      ((Number) eq1.getValue()).intValue() );
+	public void testNotMatches() throws Exception {
+		final String text = "Message( text not matches '[abc]*' )\n";
+		AndDescr descrs = (AndDescr) parse("normal_lhs_block", "lhs_block",
+				text);
 
-    }
+		assertEquals(1, descrs.getDescrs().size());
+		PatternDescr pat = (PatternDescr) descrs.getDescrs().get(0);
+		FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat
+				.getConstraint().getDescrs().get(0);
+		LiteralRestrictionDescr restr = (LiteralRestrictionDescr) fieldConstr
+				.getRestrictions().get(0);
 
-    public void testSemicolon() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "semicolon.drl" );
+		assertEquals("matches", restr.getEvaluator());
+		assertTrue(restr.isNegated());
+		assertEquals("[abc]*", restr.getText());
+	}
 
-        final PackageDescr pkg = this.walker.getPackageDescr();
-        assertEquals( "org.drools",
-                      pkg.getName() );
-        assertEquals( 1,
-                      pkg.getGlobals().size() );
-        assertEquals( 3,
-                      pkg.getRules().size() );
+	public void testRestrictions() throws Exception {
+		final String text = "Foo( bar > 1 || == 1 )\n";
 
-        final RuleDescr rule1 = (RuleDescr) pkg.getRules().get( 0 );
-        assertEquals( 2,
-                      rule1.getLhs().getDescrs().size() );
+		AndDescr descrs = (AndDescr) parse("normal_lhs_block", "lhs_block",
+				text);
 
-        final RuleDescr query1 = (RuleDescr) pkg.getRules().get( 1 );
-        assertEquals( 3,
-                      query1.getLhs().getDescrs().size() );
+		assertEquals(1, descrs.getDescrs().size());
+		PatternDescr pat = (PatternDescr) descrs.getDescrs().get(0);
+		FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pat
+				.getConstraint().getDescrs().get(0);
+		RestrictionConnectiveDescr or = (RestrictionConnectiveDescr) fieldConstr
+				.getRestrictions().get(0);
+		LiteralRestrictionDescr gt1 = (LiteralRestrictionDescr) or
+				.getRestrictions().get(0);
+		LiteralRestrictionDescr eq1 = (LiteralRestrictionDescr) or
+				.getRestrictions().get(1);
 
-        final RuleDescr rule2 = (RuleDescr) pkg.getRules().get( 2 );
-        assertEquals( 2,
-                      rule2.getLhs().getDescrs().size() );
-    }
+		assertEquals(">", gt1.getEvaluator());
+		assertEquals(false, gt1.isNegated());
+		assertEquals(1, ((Number) eq1.getValue()).intValue());
+		assertEquals("==", eq1.getEvaluator());
+		assertEquals(false, eq1.isNegated());
+		assertEquals(1, ((Number) eq1.getValue()).intValue());
 
-    public void testEval() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "eval_parsing.drl" );
+	}
 
-        final PackageDescr pkg = this.walker.getPackageDescr();
-        assertEquals( "org.drools",
-                      pkg.getName() );
-        assertEquals( 1,
-                      pkg.getRules().size() );
+	public void testSemicolon() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "semicolon.drl");
 
-        final RuleDescr rule1 = (RuleDescr) pkg.getRules().get( 0 );
-        assertEquals( 1,
-                      rule1.getLhs().getDescrs().size() );
-    }
+		final PackageDescr pkg = this.walker.getPackageDescr();
+		assertEquals("org.drools", pkg.getName());
+		assertEquals(1, pkg.getGlobals().size());
+		assertEquals(3, pkg.getRules().size());
 
-    public void testAccumulateReverse() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "accumulateReverse.drl" );
+		final RuleDescr rule1 = (RuleDescr) pkg.getRules().get(0);
+		assertEquals(2, rule1.getLhs().getDescrs().size());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		final RuleDescr query1 = (RuleDescr) pkg.getRules().get(1);
+		assertEquals(3, query1.getLhs().getDescrs().size());
 
-        final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final AccumulateDescr accum = (AccumulateDescr) out.getSource();
-        assertEqualsIgnoreWhitespace( "int x = 0 ;",
-                                      accum.getInitCode() );
-        assertEqualsIgnoreWhitespace( "x++;",
-                                      accum.getActionCode() );
-        assertEqualsIgnoreWhitespace( "x--;",
-                                      accum.getReverseCode() );
-        assertEqualsIgnoreWhitespace( "new Integer(x)",
-                                      accum.getResultCode() );
-        assertFalse( accum.isExternalFunction() );
+		final RuleDescr rule2 = (RuleDescr) pkg.getRules().get(2);
+		assertEquals(2, rule2.getLhs().getDescrs().size());
+	}
 
-        final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
-        assertEquals( "Person",
-                      pattern.getObjectType() );
-    }
+	public void testEval() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"eval_parsing.drl");
 
-    public void testAccumulateExternalFunction() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "accumulateExternalFunction.drl" );
+		final PackageDescr pkg = this.walker.getPackageDescr();
+		assertEquals("org.drools", pkg.getName());
+		assertEquals(1, pkg.getRules().size());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		final RuleDescr rule1 = (RuleDescr) pkg.getRules().get(0);
+		assertEquals(1, rule1.getLhs().getDescrs().size());
+	}
 
-        final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final AccumulateDescr accum = (AccumulateDescr) out.getSource();
-        assertEqualsIgnoreWhitespace( "$age",
-                                      accum.getExpression() );
-        assertEqualsIgnoreWhitespace( "average",
-                                      accum.getFunctionIdentifier() );
-        assertTrue( accum.isExternalFunction() );
+	public void testAccumulateReverse() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"accumulateReverse.drl");
 
-        final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
-        assertEquals( "Person",
-                      pattern.getObjectType() );
-    }
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-    public void testCollectWithNestedFrom() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "collect_with_nested_from.drl" );
+		final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		final AccumulateDescr accum = (AccumulateDescr) out.getSource();
+		assertEqualsIgnoreWhitespace("int x = 0 ;", accum.getInitCode());
+		assertEqualsIgnoreWhitespace("x++;", accum.getActionCode());
+		assertEqualsIgnoreWhitespace("x--;", accum.getReverseCode());
+		assertEqualsIgnoreWhitespace("new Integer(x)", accum.getResultCode());
+		assertFalse(accum.isExternalFunction());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
+		assertEquals("Person", pattern.getObjectType());
+	}
 
-        final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final CollectDescr collect = (CollectDescr) out.getSource();
+	public void testAccumulateExternalFunction() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"accumulateExternalFunction.drl");
 
-        PatternDescr person = (PatternDescr) collect.getInputPattern();
-        assertEquals( "Person",
-                      person.getObjectType() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        final CollectDescr collect2 = (CollectDescr) person.getSource();
+		final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		final AccumulateDescr accum = (AccumulateDescr) out.getSource();
+		assertEqualsIgnoreWhitespace("$age", accum.getExpression());
+		assertEqualsIgnoreWhitespace("average", accum.getFunctionIdentifier());
+		assertTrue(accum.isExternalFunction());
 
-        final PatternDescr people = collect2.getInputPattern();
-        assertEquals( "People",
-                      people.getObjectType() );
-    }
+		final PatternDescr pattern = (PatternDescr) accum.getInputPattern();
+		assertEquals("Person", pattern.getObjectType());
+	}
 
-    public void testAccumulateWithNestedFrom() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "accumulate_with_nested_from.drl" );
+	public void testCollectWithNestedFrom() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"collect_with_nested_from.drl");
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final AccumulateDescr accumulate = (AccumulateDescr) out.getSource();
+		final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		final CollectDescr collect = (CollectDescr) out.getSource();
 
-        PatternDescr person = (PatternDescr) accumulate.getInputPattern();
-        assertEquals( "Person",
-                      person.getObjectType() );
+		PatternDescr person = (PatternDescr) collect.getInputPattern();
+		assertEquals("Person", person.getObjectType());
 
-        final CollectDescr collect2 = (CollectDescr) person.getSource();
+		final CollectDescr collect2 = (CollectDescr) person.getSource();
 
-        final PatternDescr people = collect2.getInputPattern();
-        assertEquals( "People",
-                      people.getObjectType() );
-    }
+		final PatternDescr people = collect2.getInputPattern();
+		assertEquals("People", people.getObjectType());
+	}
 
-    public void testAccessorPaths() throws Exception {
-        final String text = "org   .   drools/*comment*/\t  .Message( text not matches $c#comment\n. property )\n";
+	public void testAccumulateWithNestedFrom() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"accumulate_with_nested_from.drl");
 
-        PatternDescr pattern = (PatternDescr) parse("lhs_pattern", "lhs_pattern", text);
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        assertEquals( "org.drools.Message",
-        		pattern.getObjectType() );
+		final PatternDescr out = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		final AccumulateDescr accumulate = (AccumulateDescr) out.getSource();
 
-        FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pattern.getConstraint().getDescrs().get( 0 );
-        QualifiedIdentifierRestrictionDescr restr = (QualifiedIdentifierRestrictionDescr) fieldConstr.getRestrictions().get( 0 );
+		PatternDescr person = (PatternDescr) accumulate.getInputPattern();
+		assertEquals("Person", person.getObjectType());
 
-        assertEquals( "matches",
-                      restr.getEvaluator() );
-        assertTrue( restr.isNegated() );
-        assertEquals( "$c.property",
-                      restr.getText() );
-    }
+		final CollectDescr collect2 = (CollectDescr) person.getSource();
 
-    public void testOrCE() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "or_ce.drl" );
+		final PatternDescr people = collect2.getInputPattern();
+		assertEquals("People", people.getObjectType());
+	}
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 2,
-                      rule.getLhs().getDescrs().size() );
+	public void testAccessorPaths() throws Exception {
+		final String text = "org   .   drools/*comment*/\t  .Message( text not matches $c#comment\n. property )\n";
 
-        final PatternDescr person = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( "Person",
-                      person.getObjectType() );
-        assertEquals( "$p",
-                      person.getIdentifier() );
+		PatternDescr pattern = (PatternDescr) parse("lhs_pattern",
+				"lhs_pattern", text);
 
-        final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get( 1 );
-        assertEquals( 2,
-                      or.getDescrs().size() );
+		assertEquals("org.drools.Message", pattern.getObjectType());
 
-        final PatternDescr cheese1 = (PatternDescr) or.getDescrs().get( 0 );
-        assertEquals( "Cheese",
-                      cheese1.getObjectType() );
-        assertEquals( "$c",
-                      cheese1.getIdentifier() );
-        final PatternDescr cheese2 = (PatternDescr) or.getDescrs().get( 1 );
-        assertEquals( "Cheese",
-                      cheese2.getObjectType() );
-        assertNull( cheese2.getIdentifier() );
-    }
+		FieldConstraintDescr fieldConstr = (FieldConstraintDescr) pattern
+				.getConstraint().getDescrs().get(0);
+		QualifiedIdentifierRestrictionDescr restr = (QualifiedIdentifierRestrictionDescr) fieldConstr
+				.getRestrictions().get(0);
 
-    public void testRuleSingleLine() throws Exception {
-        final String text = "rule \"another test\" salience 10 when eval( true ) then System.out.println(1); end";
-        RuleDescr rule = (RuleDescr) parse("rule", "rule", text);
-        
-        assertEquals( "another test",
-                      rule.getName() );
-        assertEquals( "System.out.println(1); ",
-                      rule.getConsequence() );
-    }
+		assertEquals("matches", restr.getEvaluator());
+		assertTrue(restr.isNegated());
+		assertEquals("$c.property", restr.getText());
+	}
 
-    public void testRuleTwoLines() throws Exception {
-        final String text = "rule \"another test\" salience 10 when eval( true ) then System.out.println(1);\n end";
-        RuleDescr rule = (RuleDescr) parse("rule", "rule", text);
+	public void testOrCE() throws Exception {
+		parseResource("compilation_unit", "compilation_unit", "or_ce.drl");
 
-        assertEquals( "another test",
-                      rule.getName() );
-        assertEquals( "System.out.println(1);\n ",
-                      rule.getConsequence() );
-    }
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(2, rule.getLhs().getDescrs().size());
 
-    public void testRuleParseLhs3() throws Exception {
-        final String text = "(or\nnot Person()\n(and Cheese()\nMeat()\nWine()))";
-        AndDescr pattern = (AndDescr) parse("normal_lhs_block", "lhs_block", text);
+		final PatternDescr person = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		assertEquals("Person", person.getObjectType());
+		assertEquals("$p", person.getIdentifier());
 
-        assertEquals( 1,
-        		pattern.getDescrs().size() );
-        OrDescr or = (OrDescr) pattern.getDescrs().get( 0 );
-        assertEquals( 2,
-                      or.getDescrs().size() );
-        NotDescr not = (NotDescr) or.getDescrs().get( 0 );
-        AndDescr and = (AndDescr) or.getDescrs().get( 1 );
-        assertEquals( 1,
-                      not.getDescrs().size() );
-        PatternDescr person = (PatternDescr) not.getDescrs().get( 0 );
-        assertEquals( "Person",
-                      person.getObjectType() );
-        assertEquals( 3,
-                      and.getDescrs().size() );
-        PatternDescr cheese = (PatternDescr) and.getDescrs().get( 0 );
-        assertEquals( "Cheese",
-                      cheese.getObjectType() );
-        PatternDescr meat = (PatternDescr) and.getDescrs().get( 1 );
-        assertEquals( "Meat",
-                      meat.getObjectType() );
-        PatternDescr wine = (PatternDescr) and.getDescrs().get( 2 );
-        assertEquals( "Wine",
-                      wine.getObjectType() );
+		final OrDescr or = (OrDescr) rule.getLhs().getDescrs().get(1);
+		assertEquals(2, or.getDescrs().size());
 
-    }
+		final PatternDescr cheese1 = (PatternDescr) or.getDescrs().get(0);
+		assertEquals("Cheese", cheese1.getObjectType());
+		assertEquals("$c", cheese1.getIdentifier());
+		final PatternDescr cheese2 = (PatternDescr) or.getDescrs().get(1);
+		assertEquals("Cheese", cheese2.getObjectType());
+		assertNull(cheese2.getIdentifier());
+	}
 
-    public void testAccumulateMultiPattern() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "accumulate_multi_pattern.drl" );
+	public void testRuleSingleLine() throws Exception {
+		final String text = "rule \"another test\" salience 10 when eval( true ) then System.out.println(1); end";
+		RuleDescr rule = (RuleDescr) parse("rule", "rule", text);
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 1,
-                      rule.getLhs().getDescrs().size() );
+		assertEquals("another test", rule.getName());
+		assertEquals("System.out.println(1); ", rule.getConsequence());
+	}
 
-        final PatternDescr outPattern = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        final AccumulateDescr accum = (AccumulateDescr) outPattern.getSource();
-        assertEqualsIgnoreWhitespace( "$counter",
-                                      outPattern.getIdentifier() );
-        assertEqualsIgnoreWhitespace( "int x = 0 ;",
-                                      accum.getInitCode() );
-        assertEqualsIgnoreWhitespace( "x++;",
-                                      accum.getActionCode() );
-        assertEqualsIgnoreWhitespace( "new Integer(x)",
-                                      accum.getResultCode() );
+	public void testRuleTwoLines() throws Exception {
+		final String text = "rule \"another test\" salience 10 when eval( true ) then System.out.println(1);\n end";
+		RuleDescr rule = (RuleDescr) parse("rule", "rule", text);
 
-        final AndDescr and = (AndDescr) accum.getInput();
-        assertEquals( 2,
-                      and.getDescrs().size() );
-        final PatternDescr person = (PatternDescr) and.getDescrs().get( 0 );
-        final PatternDescr cheese = (PatternDescr) and.getDescrs().get( 1 );
-        assertEquals( "Person",
-                      person.getObjectType() );
-        assertEquals( "Cheese",
-                      cheese.getObjectType() );
-    }
+		assertEquals("another test", rule.getName());
+		assertEquals("System.out.println(1);\n ", rule.getConsequence());
+	}
 
+	public void testRuleParseLhs3() throws Exception {
+		final String text = "(or\nnot Person()\n(and Cheese()\nMeat()\nWine()))";
+		AndDescr pattern = (AndDescr) parse("normal_lhs_block", "lhs_block",
+				text);
 
-    public void testPluggableOperators() throws Exception {
-        parseResource("compilation_unit", "compilation_unit", "pluggable_operators.drl" );
+		assertEquals(1, pattern.getDescrs().size());
+		OrDescr or = (OrDescr) pattern.getDescrs().get(0);
+		assertEquals(2, or.getDescrs().size());
+		NotDescr not = (NotDescr) or.getDescrs().get(0);
+		AndDescr and = (AndDescr) or.getDescrs().get(1);
+		assertEquals(1, not.getDescrs().size());
+		PatternDescr person = (PatternDescr) not.getDescrs().get(0);
+		assertEquals("Person", person.getObjectType());
+		assertEquals(3, and.getDescrs().size());
+		PatternDescr cheese = (PatternDescr) and.getDescrs().get(0);
+		assertEquals("Cheese", cheese.getObjectType());
+		PatternDescr meat = (PatternDescr) and.getDescrs().get(1);
+		assertEquals("Meat", meat.getObjectType());
+		PatternDescr wine = (PatternDescr) and.getDescrs().get(2);
+		assertEquals("Wine", wine.getObjectType());
 
-        final PackageDescr pack = walker.getPackageDescr();
-        assertEquals( 1,
-                      pack.getRules().size() );
-        final RuleDescr rule = (RuleDescr) pack.getRules().get( 0 );
-        assertEquals( 5,
-                      rule.getLhs().getDescrs().size() );
+	}
 
-        final PatternDescr eventA = (PatternDescr) rule.getLhs().getDescrs().get( 0 );
-        assertEquals( "$a",
-                      eventA.getIdentifier() );
-        assertEquals( "EventA",
-                      eventA.getObjectType() );
+	public void testAccumulateMultiPattern() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"accumulate_multi_pattern.drl");
 
-        final PatternDescr eventB = (PatternDescr) rule.getLhs().getDescrs().get( 1 );
-        assertEquals( "$b",
-                      eventB.getIdentifier() );
-        assertEquals( "EventB",
-                      eventB.getObjectType() );
-        assertEquals( 1,
-                      eventB.getConstraint().getDescrs().size() );
-        final FieldConstraintDescr fcdB = (FieldConstraintDescr) eventB.getConstraint().getDescrs().get( 0 );
-        assertEquals( 1,
-                      fcdB.getRestrictions().size() );
-        assertTrue( fcdB.getRestrictions().get( 0 ) instanceof VariableRestrictionDescr );
-        final VariableRestrictionDescr rb = (VariableRestrictionDescr) fcdB.getRestrictions().get( 0 );
-        assertEquals( "after",
-                      rb.getEvaluator() );
-        assertEquals( "$a",
-                      rb.getText() );
-        assertEquals( "1,10",
-                      rb.getParameterText() );
-        assertFalse( rb.isNegated() );
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(1, rule.getLhs().getDescrs().size());
 
-        final PatternDescr eventC = (PatternDescr) rule.getLhs().getDescrs().get( 2 );
-        assertEquals( "$c",
-                      eventC.getIdentifier() );
-        assertEquals( "EventC",
-                      eventC.getObjectType() );
-        assertEquals( 1,
-                      eventC.getConstraint().getDescrs().size() );
-        final FieldConstraintDescr fcdC = (FieldConstraintDescr) eventC.getConstraint().getDescrs().get( 0 );
-        assertEquals( 1,
-                      fcdC.getRestrictions().size() );
-        assertTrue( fcdC.getRestrictions().get( 0 ) instanceof VariableRestrictionDescr );
-        final VariableRestrictionDescr rc = (VariableRestrictionDescr) fcdC.getRestrictions().get( 0 );
-        assertEquals( "finishes",
-                      rc.getEvaluator() );
-        assertEquals( "$b",
-                      rc.getText() );
-        assertNull( rc.getParameterText() );
-        assertFalse( rc.isNegated() );
+		final PatternDescr outPattern = (PatternDescr) rule.getLhs()
+				.getDescrs().get(0);
+		final AccumulateDescr accum = (AccumulateDescr) outPattern.getSource();
+		assertEqualsIgnoreWhitespace("$counter", outPattern.getIdentifier());
+		assertEqualsIgnoreWhitespace("int x = 0 ;", accum.getInitCode());
+		assertEqualsIgnoreWhitespace("x++;", accum.getActionCode());
+		assertEqualsIgnoreWhitespace("new Integer(x)", accum.getResultCode());
 
-        final PatternDescr eventD = (PatternDescr) rule.getLhs().getDescrs().get( 3 );
-        assertEquals( "$d",
-                      eventD.getIdentifier() );
-        assertEquals( "EventD",
-                      eventD.getObjectType() );
-        assertEquals( 1,
-                      eventD.getConstraint().getDescrs().size() );
-        final FieldConstraintDescr fcdD = (FieldConstraintDescr) eventD.getConstraint().getDescrs().get( 0 );
-        assertEquals( 1,
-                      fcdD.getRestrictions().size() );
-        assertTrue( fcdD.getRestrictions().get( 0 ) instanceof VariableRestrictionDescr );
-        final VariableRestrictionDescr rd = (VariableRestrictionDescr) fcdD.getRestrictions().get( 0 );
-        assertEquals( "starts",
-                      rd.getEvaluator() );
-        assertEquals( "$a",
-                      rd.getText() );
-        assertNull( rd.getParameterText() );
-        assertTrue( rd.isNegated() );
+		final AndDescr and = (AndDescr) accum.getInput();
+		assertEquals(2, and.getDescrs().size());
+		final PatternDescr person = (PatternDescr) and.getDescrs().get(0);
+		final PatternDescr cheese = (PatternDescr) and.getDescrs().get(1);
+		assertEquals("Person", person.getObjectType());
+		assertEquals("Cheese", cheese.getObjectType());
+	}
 
-        final PatternDescr eventE = (PatternDescr) rule.getLhs().getDescrs().get( 4 );
-        assertEquals( "$e",
-                      eventE.getIdentifier() );
-        assertEquals( "EventE",
-                      eventE.getObjectType() );
-        assertEquals( 1,
-                      eventE.getConstraint().getDescrs().size() );
-        final FieldConstraintDescr fcdE = (FieldConstraintDescr) eventE.getConstraint().getDescrs().get( 0 );
-        assertEquals( 1,
-                      fcdE.getRestrictions().size() );
-        assertTrue( fcdE.getRestrictions().get( 0 ) instanceof VariableRestrictionDescr );
-        final VariableRestrictionDescr re = (VariableRestrictionDescr) fcdE.getRestrictions().get( 0 );
-        assertEquals( "before",
-                      re.getEvaluator() );
-        assertEquals( "$b",
-                      re.getText() );
-        assertEquals( "1, 10",
-                      re.getParameterText() );
-        assertTrue( re.isNegated() );
-    }
+	public void testPluggableOperators() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"pluggable_operators.drl");
 
-    public void testEntryPoint() throws Exception {
-        final String text = "StockTick( symbol==\"ACME\") from entry-point StreamA";
+		final PackageDescr pack = walker.getPackageDescr();
+		assertEquals(1, pack.getRules().size());
+		final RuleDescr rule = (RuleDescr) pack.getRules().get(0);
+		assertEquals(5, rule.getLhs().getDescrs().size());
 
-        PatternDescr pattern = (PatternDescr) parse("pattern_source", "lhs", text);
+		final PatternDescr eventA = (PatternDescr) rule.getLhs().getDescrs()
+				.get(0);
+		assertEquals("$a", eventA.getIdentifier());
+		assertEquals("EventA", eventA.getObjectType());
 
-        assertEquals( 1,
-                      pattern.getDescrs().size() );
-        FieldConstraintDescr fcd = (FieldConstraintDescr) pattern.getDescrs().get( 0 );
-        assertEquals( "symbol",
-                      fcd.getFieldName() );
+		final PatternDescr eventB = (PatternDescr) rule.getLhs().getDescrs()
+				.get(1);
+		assertEquals("$b", eventB.getIdentifier());
+		assertEquals("EventB", eventB.getObjectType());
+		assertEquals(1, eventB.getConstraint().getDescrs().size());
+		final FieldConstraintDescr fcdB = (FieldConstraintDescr) eventB
+				.getConstraint().getDescrs().get(0);
+		assertEquals(1, fcdB.getRestrictions().size());
+		assertTrue(fcdB.getRestrictions().get(0) instanceof VariableRestrictionDescr);
+		final VariableRestrictionDescr rb = (VariableRestrictionDescr) fcdB
+				.getRestrictions().get(0);
+		assertEquals("after", rb.getEvaluator());
+		assertEquals("$a", rb.getText());
+		assertEquals("1,10", rb.getParameterText());
+		assertFalse(rb.isNegated());
 
-        assertNotNull( pattern.getSource() );
-        EntryPointDescr entry = (EntryPointDescr) pattern.getSource();
-        assertEquals( "StreamA",
-                      entry.getEntryId() );
-    }
+		final PatternDescr eventC = (PatternDescr) rule.getLhs().getDescrs()
+				.get(2);
+		assertEquals("$c", eventC.getIdentifier());
+		assertEquals("EventC", eventC.getObjectType());
+		assertEquals(1, eventC.getConstraint().getDescrs().size());
+		final FieldConstraintDescr fcdC = (FieldConstraintDescr) eventC
+				.getConstraint().getDescrs().get(0);
+		assertEquals(1, fcdC.getRestrictions().size());
+		assertTrue(fcdC.getRestrictions().get(0) instanceof VariableRestrictionDescr);
+		final VariableRestrictionDescr rc = (VariableRestrictionDescr) fcdC
+				.getRestrictions().get(0);
+		assertEquals("finishes", rc.getEvaluator());
+		assertEquals("$b", rc.getText());
+		assertNull(rc.getParameterText());
+		assertFalse(rc.isNegated());
 
-    public void testNesting() throws Exception {
-    	 parseResource("compilation_unit","compilation_unit", "not_pluggable_operator.drl" );
+		final PatternDescr eventD = (PatternDescr) rule.getLhs().getDescrs()
+				.get(3);
+		assertEquals("$d", eventD.getIdentifier());
+		assertEquals("EventD", eventD.getObjectType());
+		assertEquals(1, eventD.getConstraint().getDescrs().size());
+		final FieldConstraintDescr fcdD = (FieldConstraintDescr) eventD
+				.getConstraint().getDescrs().get(0);
+		assertEquals(1, fcdD.getRestrictions().size());
+		assertTrue(fcdD.getRestrictions().get(0) instanceof VariableRestrictionDescr);
+		final VariableRestrictionDescr rd = (VariableRestrictionDescr) fcdD
+				.getRestrictions().get(0);
+		assertEquals("starts", rd.getEvaluator());
+		assertEquals("$a", rd.getText());
+		assertNull(rd.getParameterText());
+		assertTrue(rd.isNegated());
 
-         assertNotNull(walker);
-    }
+		final PatternDescr eventE = (PatternDescr) rule.getLhs().getDescrs()
+				.get(4);
+		assertEquals("$e", eventE.getIdentifier());
+		assertEquals("EventE", eventE.getObjectType());
+		assertEquals(1, eventE.getConstraint().getDescrs().size());
+		final FieldConstraintDescr fcdE = (FieldConstraintDescr) eventE
+				.getConstraint().getDescrs().get(0);
+		assertEquals(1, fcdE.getRestrictions().size());
+		assertTrue(fcdE.getRestrictions().get(0) instanceof VariableRestrictionDescr);
+		final VariableRestrictionDescr re = (VariableRestrictionDescr) fcdE
+				.getRestrictions().get(0);
+		assertEquals("before", re.getEvaluator());
+		assertEquals("$b", re.getText());
+		assertEquals("1, 10", re.getParameterText());
+		assertTrue(re.isNegated());
+	}
 
-    
+	public void testEntryPoint() throws Exception {
+		final String text = "StockTick( symbol==\"ACME\") from entry-point StreamA";
+
+		PatternDescr pattern = (PatternDescr) parse("pattern_source", "lhs",
+				text);
+
+		assertEquals(1, pattern.getDescrs().size());
+		FieldConstraintDescr fcd = (FieldConstraintDescr) pattern.getDescrs()
+				.get(0);
+		assertEquals("symbol", fcd.getFieldName());
+
+		assertNotNull(pattern.getSource());
+		EntryPointDescr entry = (EntryPointDescr) pattern.getSource();
+		assertEquals("StreamA", entry.getEntryId());
+	}
+
+	public void testNesting() throws Exception {
+		parseResource("compilation_unit", "compilation_unit",
+				"not_pluggable_operator.drl");
+
+		assertNotNull(walker);
+	}
+
 	private Object parse(String parserRuleName, String treeRuleName,
 			final String text) throws Exception {
 		return newParser(parserRuleName, treeRuleName, newCharStream(text));
@@ -3357,8 +3007,8 @@
 
 			/** Invoke grammar rule, and get the return value */
 			Object ruleReturn = ruleName.invoke(parser);
-			
-			if (!parser.hasErrors()){
+
+			if (!parser.hasErrors()) {
 				Class _return = Class.forName("org.drools.lang.DRLParser" + "$"
 						+ testRuleName + "_return");
 				Method returnName = _return.getMethod("getTree");
@@ -3374,7 +3024,7 @@
 				Method treeRuleName = Class.forName(
 						"org.drools.lang.DescrBuilderTree").getMethod(
 						testTreeRuleName);
-				treeRuleReturn = treeRuleName.invoke(walker);				
+				treeRuleReturn = treeRuleName.invoke(walker);
 			}
 
 			if (treeRuleReturn != null) {
@@ -3413,14 +3063,11 @@
 		return treeRuleReturn;
 	}
 
-    private void assertEqualsIgnoreWhitespace(final String expected,
-                                              final String actual) {
-        final String cleanExpected = expected.replaceAll( "\\s+",
-                                                          "" );
-        final String cleanActual = actual.replaceAll( "\\s+",
-                                                      "" );
+	private void assertEqualsIgnoreWhitespace(final String expected,
+			final String actual) {
+		final String cleanExpected = expected.replaceAll("\\s+", "");
+		final String cleanActual = actual.replaceAll("\\s+", "");
 
-        assertEquals( cleanExpected,
-                      cleanActual );
-    }
+		assertEquals(cleanExpected, cleanActual);
+	}
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list