[jboss-svn-commits] JBL Code SVN: r20082 - in labs/jbossrules/branches/parser-rewrite/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
Tue May 20 09:44:39 EDT 2008


Author: porcelli
Date: 2008-05-20 09:44:37 -0400 (Tue, 20 May 2008)
New Revision: 20082

Modified:
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DRL.g
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/TestDRL.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java
   labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/gUnitTest.testsuite
Log:
Added a new Token/Tree type: VT_PATTERN_TYPE.
It is the same structure that we have on VT_DATA_TYPE

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-05-20 12:50:33 UTC (rev 20081)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-05-20 13:44:37 UTC (rev 20082)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-05-19 14:24:15
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-05-19 18:02:42
 
 	package org.drools.lang;
 
@@ -10,126 +10,127 @@
 import java.util.Map;
 import java.util.HashMap;
 public class DRLLexer extends Lexer {
-    public static final int COMMA=91;
+    public static final int COMMA=92;
+    public static final int VT_PATTERN_TYPE=37;
     public static final int VT_ACCUMULATE_ID_CLAUSE=26;
-    public static final int VK_FUNCTION=62;
-    public static final int VK_DIALECT=51;
-    public static final int END=88;
-    public static final int HexDigit=116;
-    public static final int VK_ATTRIBUTES=54;
+    public static final int VK_DIALECT=52;
+    public static final int VK_FUNCTION=63;
+    public static final int END=89;
+    public static final int HexDigit=117;
+    public static final int VK_ATTRIBUTES=55;
     public static final int VT_EXPRESSION_CHAIN=28;
-    public static final int VK_ACCUMULATE=78;
-    public static final int MISC=112;
+    public static final int VK_ACCUMULATE=79;
+    public static final int MISC=113;
     public static final int VT_AND_PREFIX=21;
-    public static final int VK_QUERY=60;
-    public static final int THEN=109;
-    public static final int VK_AUTO_FOCUS=46;
-    public static final int DOT=86;
-    public static final int VK_IMPORT=57;
+    public static final int VK_QUERY=61;
+    public static final int THEN=110;
+    public static final int VK_AUTO_FOCUS=47;
+    public static final int DOT=87;
+    public static final int VK_IMPORT=58;
     public static final int VT_SLOT=14;
-    public static final int VT_PACKAGE_ID=37;
-    public static final int LEFT_SQUARE=107;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=119;
+    public static final int VT_PACKAGE_ID=38;
+    public static final int LEFT_SQUARE=108;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=120;
     public static final int VT_DATA_TYPE=36;
-    public static final int VK_MATCHES=66;
+    public static final int VK_MATCHES=67;
     public static final int VT_FACT=6;
-    public static final int LEFT_CURLY=110;
-    public static final int LEFT_PAREN=90;
-    public static final int DOUBLE_AMPER=97;
+    public static final int LEFT_CURLY=111;
+    public static final int LEFT_PAREN=91;
+    public static final int DOUBLE_AMPER=98;
     public static final int VT_QUERY_ID=9;
     public static final int VT_ACCESSOR_PATH=34;
     public static final int VT_LABEL=8;
     public static final int VT_ENTRYPOINT_ID=12;
-    public static final int VK_SOUNDSLIKE=68;
-    public static final int VK_SALIENCE=52;
+    public static final int VK_SOUNDSLIKE=69;
+    public static final int VK_SALIENCE=53;
     public static final int VT_FIELD=33;
-    public static final int WS=114;
-    public static final int STRING=89;
-    public static final int VK_AND=74;
+    public static final int WS=115;
+    public static final int STRING=90;
+    public static final int VK_AND=75;
     public static final int VT_ACCESSOR_ELEMENT=35;
-    public static final int VK_REVERSE=81;
-    public static final int VK_GLOBAL=63;
+    public static final int VK_GLOBAL=64;
     public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
-    public static final int VK_DURATION=50;
+    public static final int VK_REVERSE=82;
+    public static final int VK_DURATION=51;
     public static final int VT_SQUARE_CHUNK=18;
-    public static final int VK_FORALL=76;
+    public static final int VK_FORALL=77;
     public static final int VT_COMPILATION_UNIT=4;
     public static final int VT_PAREN_CHUNK=19;
-    public static final int VK_ENABLED=53;
-    public static final int VK_RESULT=82;
-    public static final int UnicodeEscape=117;
-    public static final int VK_PACKAGE=58;
+    public static final int VK_ENABLED=54;
+    public static final int VK_RESULT=83;
+    public static final int UnicodeEscape=118;
+    public static final int VK_PACKAGE=59;
     public static final int VT_RULE_ID=11;
-    public static final int EQUAL=99;
-    public static final int VK_NO_LOOP=45;
-    public static final int SEMICOLON=84;
-    public static final int VK_TEMPLATE=59;
+    public static final int EQUAL=100;
+    public static final int VK_NO_LOOP=46;
+    public static final int SEMICOLON=85;
+    public static final int VK_TEMPLATE=60;
     public static final int VT_AND_IMPLICIT=20;
-    public static final int NULL=106;
-    public static final int COLON=93;
-    public static final int MULTI_LINE_COMMENT=121;
+    public static final int NULL=107;
+    public static final int COLON=94;
+    public static final int MULTI_LINE_COMMENT=122;
     public static final int VT_RULE_ATTRIBUTES=15;
-    public static final int RIGHT_SQUARE=108;
-    public static final int VK_AGENDA_GROUP=48;
+    public static final int RIGHT_SQUARE=109;
+    public static final int VK_AGENDA_GROUP=49;
     public static final int VT_FACT_OR=31;
-    public static final int VK_NOT=71;
-    public static final int VK_DATE_EXPIRES=43;
-    public static final int ARROW=98;
-    public static final int FLOAT=105;
+    public static final int VK_NOT=72;
+    public static final int VK_DATE_EXPIRES=44;
+    public static final int ARROW=99;
+    public static final int FLOAT=106;
     public static final int VT_SLOT_ID=13;
     public static final int VT_CURLY_CHUNK=17;
     public static final int VT_OR_PREFIX=22;
-    public static final int DOUBLE_PIPE=96;
-    public static final int LESS=102;
+    public static final int DOUBLE_PIPE=97;
+    public static final int LESS=103;
     public static final int VT_PATTERN=29;
-    public static final int VK_DATE_EFFECTIVE=42;
-    public static final int EscapeSequence=115;
-    public static final int VK_EXISTS=75;
-    public static final int INT=95;
+    public static final int VK_DATE_EFFECTIVE=43;
+    public static final int EscapeSequence=116;
+    public static final int VK_EXISTS=76;
+    public static final int INT=96;
     public static final int VT_BIND_FIELD=32;
-    public static final int VK_RULE=56;
-    public static final int VK_EVAL=64;
-    public static final int VK_COLLECT=83;
-    public static final int GREATER=100;
+    public static final int VK_RULE=57;
+    public static final int VK_EVAL=65;
+    public static final int VK_COLLECT=84;
+    public static final int GREATER=101;
     public static final int VT_FACT_BINDING=30;
-    public static final int ID=85;
-    public static final int NOT_EQUAL=104;
-    public static final int RIGHT_CURLY=111;
-    public static final int VK_ENTRY_POINT=70;
-    public static final int BOOL=94;
-    public static final int VT_PARAM_LIST=41;
+    public static final int ID=86;
+    public static final int NOT_EQUAL=105;
+    public static final int RIGHT_CURLY=112;
+    public static final int VK_ENTRY_POINT=71;
     public static final int VT_AND_INFIX=23;
+    public static final int BOOL=95;
+    public static final int VT_PARAM_LIST=42;
     public static final int VT_FROM_SOURCE=27;
-    public static final int VK_CONTAINS=65;
-    public static final int VK_LOCK_ON_ACTIVE=44;
+    public static final int VK_CONTAINS=66;
+    public static final int VK_LOCK_ON_ACTIVE=45;
     public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VK_IN=72;
+    public static final int VK_IN=73;
     public static final int VT_RHS_CHUNK=16;
-    public static final int VK_MEMBEROF=69;
-    public static final int GREATER_EQUAL=101;
+    public static final int VK_MEMBEROF=70;
+    public static final int GREATER_EQUAL=102;
     public static final int VT_OR_INFIX=24;
-    public static final int DOT_STAR=87;
-    public static final int VK_OR=73;
-    public static final int VT_GLOBAL_ID=39;
-    public static final int LESS_EQUAL=103;
-    public static final int VK_WHEN=55;
-    public static final int VK_RULEFLOW_GROUP=49;
-    public static final int VT_FUNCTION_ID=40;
+    public static final int DOT_STAR=88;
+    public static final int VK_OR=74;
+    public static final int VT_GLOBAL_ID=40;
+    public static final int LESS_EQUAL=104;
+    public static final int VK_WHEN=56;
+    public static final int VK_RULEFLOW_GROUP=50;
+    public static final int VT_FUNCTION_ID=41;
     public static final int EOF=-1;
     public static final int VT_CONSTRAINTS=7;
-    public static final int VT_IMPORT_ID=38;
-    public static final int EOL=113;
-    public static final int VK_INIT=79;
-    public static final int VK_ACTIVATION_GROUP=47;
-    public static final int Tokens=122;
-    public static final int OctalEscape=118;
-    public static final int VK_ACTION=80;
-    public static final int VK_FROM=77;
-    public static final int VK_EXCLUDES=67;
-    public static final int RIGHT_PAREN=92;
+    public static final int VT_IMPORT_ID=39;
+    public static final int EOL=114;
+    public static final int VK_INIT=80;
+    public static final int VK_ACTIVATION_GROUP=48;
+    public static final int Tokens=123;
+    public static final int OctalEscape=119;
+    public static final int VK_ACTION=81;
+    public static final int VK_FROM=78;
+    public static final int VK_EXCLUDES=68;
+    public static final int RIGHT_PAREN=93;
     public static final int VT_TEMPLATE_ID=10;
-    public static final int VK_DECLARE=61;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=120;
+    public static final int VK_DECLARE=62;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=121;
 
     	/** The standard method called to automatically emit a token at the
     	 *  outermost lexical rule.  The token object should point into the
@@ -157,10 +158,10 @@
     public final void mWS() throws RecognitionException {
         try {
             int _type = WS;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:989:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:989:17: ( ' ' | '\\t' | '\\f' | EOL )+
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:989:17: ( ' ' | '\\t' | '\\f' | EOL )+
             int cnt1=0;
             loop1:
             do {
@@ -192,28 +193,28 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:19: ' '
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:989:19: ' '
             	    {
             	    match(' '); if (failed) return ;
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:984:19: '\\t'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:19: '\\t'
             	    {
             	    match('\t'); if (failed) return ;
 
             	    }
             	    break;
             	case 3 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:985:19: '\\f'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:19: '\\f'
             	    {
             	    match('\f'); if (failed) return ;
 
             	    }
             	    break;
             	case 4 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:19: EOL
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:992:19: EOL
             	    {
             	    mEOL(); if (failed) return ;
 
@@ -246,10 +247,10 @@
     // $ANTLR start EOL
     public final void mEOL() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:992:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:998:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
@@ -268,13 +269,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("993:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("999:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
 
                 throw nvae;
             }
             switch (alt2) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:14: ( '\\r\\n' )=> '\\r\\n'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:14: ( '\\r\\n' )=> '\\r\\n'
                     {
                     match("\r\n"); if (failed) return ;
 
@@ -282,14 +283,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:25: '\\r'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:25: '\\r'
                     {
                     match('\r'); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:995:25: '\\n'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1001:25: '\\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -311,10 +312,10 @@
     public final void mINT() throws RecognitionException {
         try {
             int _type = INT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:2: ( ( '-' )? ( '0' .. '9' )+ )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:4: ( '-' )? ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:2: ( ( '-' )? ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:4: ( '-' )? ( '0' .. '9' )+
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:4: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -323,7 +324,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:5: '-'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -332,7 +333,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:10: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -346,7 +347,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1006:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -377,10 +378,10 @@
     public final void mFLOAT() throws RecognitionException {
         try {
             int _type = FLOAT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:4: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -389,7 +390,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:5: '-'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -398,7 +399,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:10: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -412,7 +413,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -430,7 +431,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:26: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:26: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -444,7 +445,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:27: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:27: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -475,7 +476,7 @@
     public final void mSTRING() throws RecognitionException {
         try {
             int _type = STRING;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -488,19 +489,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1007:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("1013:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
 
                 throw nvae;
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
                     {
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -516,14 +517,14 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:15: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:15: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1008:32: ~ ( '\\\\' | '\"' )
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:32: ~ ( '\\\\' | '\"' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -553,13 +554,13 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
                     {
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
                     loop9:
                     do {
                         int alt9=3;
@@ -575,14 +576,14 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:16: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:16: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1009:33: ~ ( '\\\\' | '\\'' )
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:33: ~ ( '\\\\' | '\\'' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -623,8 +624,8 @@
     // $ANTLR start HexDigit
     public final void mHexDigit() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1013:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1013:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019: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();
@@ -649,7 +650,7 @@
     // $ANTLR start EscapeSequence
     public final void mEscapeSequence() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1017: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023: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);
 
@@ -721,7 +722,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1015: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("1021: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;
                 }
@@ -730,13 +731,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1015: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("1021: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1017: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023: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)<='}') ) {
@@ -754,14 +755,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1021:9: UnicodeEscape
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:9: UnicodeEscape
                     {
                     mUnicodeEscape(); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:9: OctalEscape
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:9: OctalEscape
                     {
                     mOctalEscape(); if (failed) return ;
 
@@ -778,7 +779,7 @@
     // $ANTLR start OctalEscape
     public final void mOctalEscape() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             int alt12=3;
             int LA12_0 = input.LA(1);
 
@@ -812,7 +813,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1025:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("1031:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
 
                     throw nvae;
                 }
@@ -820,31 +821,31 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1025:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("1031: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:14: ( '0' .. '3' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:15: '0' .. '3'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:14: ( '0' .. '3' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:15: '0' .. '3'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:25: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:26: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:36: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:37: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:36: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1033:37: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -854,18 +855,18 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:14: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:15: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:25: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1028:26: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -875,11 +876,11 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029:9: '\\\\' ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029:14: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1029:15: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -899,8 +900,8 @@
     // $ANTLR start UnicodeEscape
     public final void mUnicodeEscape() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1040:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1040:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             {
             match('\\'); if (failed) return ;
             match('u'); if (failed) return ;
@@ -921,10 +922,10 @@
     public final void mBOOL() throws RecognitionException {
         try {
             int _type = BOOL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:2: ( ( 'true' | 'false' ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:2: ( ( 'true' | 'false' ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:4: ( 'true' | 'false' )
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:4: ( 'true' | 'false' )
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -937,13 +938,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1038:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("1044:4: ( 'true' | 'false' )", 13, 0, input);
 
                 throw nvae;
             }
             switch (alt13) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:5: 'true'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:5: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -951,7 +952,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:12: 'false'
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:12: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -975,8 +976,8 @@
     public final void mNULL() throws RecognitionException {
         try {
             int _type = NULL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1041:6: ( 'null' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1041:8: 'null'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1047:6: ( 'null' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1047:8: 'null'
             {
             match("null"); if (failed) return ;
 
@@ -994,8 +995,8 @@
     public final void mTHEN() throws RecognitionException {
         try {
             int _type = THEN;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1045:2: ( 'then' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1045:4: 'then'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:2: ( 'then' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:4: 'then'
             {
             match("then"); if (failed) return ;
 
@@ -1013,8 +1014,8 @@
     public final void mEND() throws RecognitionException {
         try {
             int _type = END;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:5: ( 'end' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:7: 'end'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1054:5: ( 'end' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1054:7: 'end'
             {
             match("end"); if (failed) return ;
 
@@ -1032,8 +1033,8 @@
     public final void mSEMICOLON() throws RecognitionException {
         try {
             int _type = SEMICOLON;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1052:2: ( ';' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1052:4: ';'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1058:2: ( ';' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1058:4: ';'
             {
             match(';'); if (failed) return ;
 
@@ -1050,8 +1051,8 @@
     public final void mDOT_STAR() throws RecognitionException {
         try {
             int _type = DOT_STAR;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1056:2: ( '.*' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1056:4: '.*'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:2: ( '.*' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1062:4: '.*'
             {
             match(".*"); if (failed) return ;
 
@@ -1069,8 +1070,8 @@
     public final void mCOLON() throws RecognitionException {
         try {
             int _type = COLON;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1060:2: ( ':' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1060:4: ':'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1066:2: ( ':' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1066:4: ':'
             {
             match(':'); if (failed) return ;
 
@@ -1087,8 +1088,8 @@
     public final void mEQUAL() throws RecognitionException {
         try {
             int _type = EQUAL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1065:2: ( '==' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1065:4: '=='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1071:2: ( '==' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1071:4: '=='
             {
             match("=="); if (failed) return ;
 
@@ -1106,8 +1107,8 @@
     public final void mNOT_EQUAL() throws RecognitionException {
         try {
             int _type = NOT_EQUAL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1069:2: ( '!=' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1069:4: '!='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1075:2: ( '!=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1075:4: '!='
             {
             match("!="); if (failed) return ;
 
@@ -1125,8 +1126,8 @@
     public final void mGREATER() throws RecognitionException {
         try {
             int _type = GREATER;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1073:2: ( '>' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1073:4: '>'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1079:2: ( '>' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1079:4: '>'
             {
             match('>'); if (failed) return ;
 
@@ -1143,8 +1144,8 @@
     public final void mGREATER_EQUAL() throws RecognitionException {
         try {
             int _type = GREATER_EQUAL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077:2: ( '>=' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077:4: '>='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:2: ( '>=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:4: '>='
             {
             match(">="); if (failed) return ;
 
@@ -1162,8 +1163,8 @@
     public final void mLESS() throws RecognitionException {
         try {
             int _type = LESS;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:2: ( '<' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1081:4: '<'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1087:2: ( '<' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1087:4: '<'
             {
             match('<'); if (failed) return ;
 
@@ -1180,8 +1181,8 @@
     public final void mLESS_EQUAL() throws RecognitionException {
         try {
             int _type = LESS_EQUAL;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1085:2: ( '<=' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1085:4: '<='
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1091:2: ( '<=' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1091:4: '<='
             {
             match("<="); if (failed) return ;
 
@@ -1199,8 +1200,8 @@
     public final void mARROW() throws RecognitionException {
         try {
             int _type = ARROW;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1089:2: ( '->' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1089:4: '->'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1095:2: ( '->' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1095:4: '->'
             {
             match("->"); if (failed) return ;
 
@@ -1218,8 +1219,8 @@
     public final void mID() throws RecognitionException {
         try {
             int _type = ID;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1099:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1099: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();
@@ -1232,7 +1233,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1099:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             loop14:
             do {
                 int alt14=2;
@@ -1281,8 +1282,8 @@
     public final void mLEFT_PAREN() throws RecognitionException {
         try {
             int _type = LEFT_PAREN;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1097:9: ( '(' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1097:11: '('
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1103:9: ( '(' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1103:11: '('
             {
             match('('); if (failed) return ;
 
@@ -1299,8 +1300,8 @@
     public final void mRIGHT_PAREN() throws RecognitionException {
         try {
             int _type = RIGHT_PAREN;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:9: ( ')' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1101:11: ')'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:9: ( ')' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1107:11: ')'
             {
             match(')'); if (failed) return ;
 
@@ -1317,8 +1318,8 @@
     public final void mLEFT_SQUARE() throws RecognitionException {
         try {
             int _type = LEFT_SQUARE;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1105:9: ( '[' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1105:11: '['
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1111:9: ( '[' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1111:11: '['
             {
             match('['); if (failed) return ;
 
@@ -1335,8 +1336,8 @@
     public final void mRIGHT_SQUARE() throws RecognitionException {
         try {
             int _type = RIGHT_SQUARE;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1109:9: ( ']' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1109:11: ']'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1115:9: ( ']' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1115:11: ']'
             {
             match(']'); if (failed) return ;
 
@@ -1353,8 +1354,8 @@
     public final void mLEFT_CURLY() throws RecognitionException {
         try {
             int _type = LEFT_CURLY;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1113:9: ( '{' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1113:11: '{'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1119:9: ( '{' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1119:11: '{'
             {
             match('{'); if (failed) return ;
 
@@ -1371,8 +1372,8 @@
     public final void mRIGHT_CURLY() throws RecognitionException {
         try {
             int _type = RIGHT_CURLY;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:9: ( '}' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:11: '}'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1123:9: ( '}' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1123:11: '}'
             {
             match('}'); if (failed) return ;
 
@@ -1389,8 +1390,8 @@
     public final void mCOMMA() throws RecognitionException {
         try {
             int _type = COMMA;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1120:7: ( ',' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1120:9: ','
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:7: ( ',' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:9: ','
             {
             match(','); if (failed) return ;
 
@@ -1407,8 +1408,8 @@
     public final void mDOT() throws RecognitionException {
         try {
             int _type = DOT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1123:5: ( '.' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1123:7: '.'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1129:5: ( '.' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1129:7: '.'
             {
             match('.'); if (failed) return ;
 
@@ -1425,8 +1426,8 @@
     public final void mDOUBLE_AMPER() throws RecognitionException {
         try {
             int _type = DOUBLE_AMPER;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1127:2: ( '&&' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1127:4: '&&'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1133:2: ( '&&' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1133:4: '&&'
             {
             match("&&"); if (failed) return ;
 
@@ -1444,8 +1445,8 @@
     public final void mDOUBLE_PIPE() throws RecognitionException {
         try {
             int _type = DOUBLE_PIPE;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:2: ( '||' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1131:4: '||'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1137:2: ( '||' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1137:4: '||'
             {
             match("||"); if (failed) return ;
 
@@ -1463,11 +1464,11 @@
     public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = SH_STYLE_SINGLE_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:2: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:4: '#' ( options {greedy=false; } : . )* EOL
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:2: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:4: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:8: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:8: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -1486,7 +1487,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1135:35: .
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1516,12 +1517,12 @@
     public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = C_STYLE_SINGLE_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:2: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:4: '//' ( options {greedy=false; } : . )* EOL
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1147:2: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1147:4: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1147:9: ( options {greedy=false; } : . )*
             loop16:
             do {
                 int alt16=2;
@@ -1540,7 +1541,7 @@
 
                 switch (alt16) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:36: .
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1147:36: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1570,12 +1571,12 @@
     public final void mMULTI_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = MULTI_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:4: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:9: ( options {greedy=false; } : . )*
             loop17:
             do {
                 int alt17=2;
@@ -1600,7 +1601,7 @@
 
                 switch (alt17) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1146:35: .
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1152:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1631,7 +1632,7 @@
     public final void mMISC() throws RecognitionException {
         try {
             int _type = MISC;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1150:7: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1156:7: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
             // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             {
             if ( input.LA(1)=='!'||(input.LA(1)>='$' && input.LA(1)<='\'')||(input.LA(1)>='*' && input.LA(1)<='+')||input.LA(1)=='-'||input.LA(1)=='/'||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='@')||input.LA(1)=='\\'||(input.LA(1)>='^' && input.LA(1)<='_')||input.LA(1)=='|' ) {
@@ -1898,8 +1899,8 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:14: ( '\\r\\n' )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:16: '\\r\\n'
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:14: ( '\\r\\n' )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:16: '\\r\\n'
         {
         match("\r\n"); if (failed) return ;
 

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-05-20 12:50:33 UTC (rev 20081)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-05-20 13:44:37 UTC (rev 20082)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-05-19 14:24:14
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-05-19 18:02:41
 
 	package org.drools.lang;
 	
@@ -16,131 +16,132 @@
 
 public class DRLParser extends Parser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_COMPILATION_UNIT", "VT_FUNCTION_IMPORT", "VT_FACT", "VT_CONSTRAINTS", "VT_LABEL", "VT_QUERY_ID", "VT_TEMPLATE_ID", "VT_RULE_ID", "VT_ENTRYPOINT_ID", "VT_SLOT_ID", "VT_SLOT", "VT_RULE_ATTRIBUTES", "VT_RHS_CHUNK", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VT_DATA_TYPE", "VT_PACKAGE_ID", "VT_IMPORT_ID", "VT_GLOBAL_ID", "VT_FUNCTION_ID", "VT_PARAM_LIST", "VK_DATE_EFFECTIVE", "VK_DATE_EXPIRES", "VK_LOCK_ON_ACTIVE", "VK_NO_LOOP", "VK_AUTO_FOCUS", "VK_ACTIVATION_GROUP", "VK_AGENDA_GROUP", "VK_RULEFLOW_GROUP", "VK_DURATION", "VK_DIALECT", "VK_SALIENCE", "VK_ENABLED", "VK_ATTRIBUTES", "VK_WHEN", "VK_RULE", "VK_IMPORT", "VK_P!
 ACKAGE", "VK_TEMPLATE", "VK_QUERY", "VK_DECLARE", "VK_FUNCTION", "VK_GLOBAL", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "COLON", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_COMPILATION_UNIT", "VT_FUNCTION_IMPORT", "VT_FACT", "VT_CONSTRAINTS", "VT_LABEL", "VT_QUERY_ID", "VT_TEMPLATE_ID", "VT_RULE_ID", "VT_ENTRYPOINT_ID", "VT_SLOT_ID", "VT_SLOT", "VT_RULE_ATTRIBUTES", "VT_RHS_CHUNK", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VT_DATA_TYPE", "VT_PATTERN_TYPE", "VT_PACKAGE_ID", "VT_IMPORT_ID", "VT_GLOBAL_ID", "VT_FUNCTION_ID", "VT_PARAM_LIST", "VK_DATE_EFFECTIVE", "VK_DATE_EXPIRES", "VK_LOCK_ON_ACTIVE", "VK_NO_LOOP", "VK_AUTO_FOCUS", "VK_ACTIVATION_GROUP", "VK_AGENDA_GROUP", "VK_RULEFLOW_GROUP", "VK_DURATION", "VK_DIALECT", "VK_SALIENCE", "VK_ENABLED", "VK_ATTRIBUTES", "VK_WHEN", "VK_RULE",!
  "VK_IMPORT", "VK_PACKAGE", "VK_TEMPLATE", "VK_QUERY", "VK_DECLARE", "VK_FUNCTION", "VK_GLOBAL", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "COLON", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
     };
-    public static final int COMMA=91;
+    public static final int COMMA=92;
+    public static final int VT_PATTERN_TYPE=37;
     public static final int VT_ACCUMULATE_ID_CLAUSE=26;
-    public static final int VK_DIALECT=51;
-    public static final int VK_FUNCTION=62;
-    public static final int END=88;
-    public static final int HexDigit=116;
-    public static final int VK_ATTRIBUTES=54;
+    public static final int VK_DIALECT=52;
+    public static final int VK_FUNCTION=63;
+    public static final int END=89;
+    public static final int HexDigit=117;
+    public static final int VK_ATTRIBUTES=55;
     public static final int VT_EXPRESSION_CHAIN=28;
-    public static final int VK_ACCUMULATE=78;
-    public static final int MISC=112;
+    public static final int VK_ACCUMULATE=79;
+    public static final int MISC=113;
     public static final int VT_AND_PREFIX=21;
-    public static final int VK_QUERY=60;
-    public static final int THEN=109;
-    public static final int VK_AUTO_FOCUS=46;
-    public static final int DOT=86;
-    public static final int VK_IMPORT=57;
+    public static final int VK_QUERY=61;
+    public static final int THEN=110;
+    public static final int VK_AUTO_FOCUS=47;
+    public static final int DOT=87;
+    public static final int VK_IMPORT=58;
     public static final int VT_SLOT=14;
-    public static final int VT_PACKAGE_ID=37;
-    public static final int LEFT_SQUARE=107;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=119;
+    public static final int VT_PACKAGE_ID=38;
+    public static final int LEFT_SQUARE=108;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=120;
     public static final int VT_DATA_TYPE=36;
     public static final int VT_FACT=6;
-    public static final int VK_MATCHES=66;
-    public static final int LEFT_CURLY=110;
-    public static final int DOUBLE_AMPER=97;
-    public static final int LEFT_PAREN=90;
+    public static final int VK_MATCHES=67;
+    public static final int LEFT_CURLY=111;
+    public static final int DOUBLE_AMPER=98;
+    public static final int LEFT_PAREN=91;
     public static final int VT_QUERY_ID=9;
     public static final int VT_ACCESSOR_PATH=34;
     public static final int VT_LABEL=8;
     public static final int VT_ENTRYPOINT_ID=12;
-    public static final int WS=114;
+    public static final int WS=115;
     public static final int VT_FIELD=33;
-    public static final int VK_SALIENCE=52;
-    public static final int VK_SOUNDSLIKE=68;
-    public static final int VK_AND=74;
-    public static final int STRING=89;
+    public static final int VK_SALIENCE=53;
+    public static final int VK_SOUNDSLIKE=69;
+    public static final int VK_AND=75;
+    public static final int STRING=90;
     public static final int VT_ACCESSOR_ELEMENT=35;
     public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
-    public static final int VK_GLOBAL=63;
-    public static final int VK_REVERSE=81;
-    public static final int VK_DURATION=50;
+    public static final int VK_GLOBAL=64;
+    public static final int VK_REVERSE=82;
+    public static final int VK_DURATION=51;
     public static final int VT_SQUARE_CHUNK=18;
-    public static final int VK_FORALL=76;
+    public static final int VK_FORALL=77;
     public static final int VT_COMPILATION_UNIT=4;
     public static final int VT_PAREN_CHUNK=19;
-    public static final int VK_ENABLED=53;
-    public static final int VK_RESULT=82;
-    public static final int UnicodeEscape=117;
-    public static final int VK_PACKAGE=58;
+    public static final int VK_ENABLED=54;
+    public static final int VK_RESULT=83;
+    public static final int UnicodeEscape=118;
+    public static final int VK_PACKAGE=59;
     public static final int VT_RULE_ID=11;
-    public static final int EQUAL=99;
-    public static final int VK_NO_LOOP=45;
-    public static final int SEMICOLON=84;
-    public static final int VK_TEMPLATE=59;
+    public static final int EQUAL=100;
+    public static final int VK_NO_LOOP=46;
+    public static final int SEMICOLON=85;
+    public static final int VK_TEMPLATE=60;
     public static final int VT_AND_IMPLICIT=20;
-    public static final int NULL=106;
-    public static final int COLON=93;
-    public static final int MULTI_LINE_COMMENT=121;
+    public static final int NULL=107;
+    public static final int COLON=94;
+    public static final int MULTI_LINE_COMMENT=122;
     public static final int VT_RULE_ATTRIBUTES=15;
-    public static final int RIGHT_SQUARE=108;
-    public static final int VK_AGENDA_GROUP=48;
+    public static final int RIGHT_SQUARE=109;
+    public static final int VK_AGENDA_GROUP=49;
     public static final int VT_FACT_OR=31;
-    public static final int VK_NOT=71;
-    public static final int VK_DATE_EXPIRES=43;
-    public static final int ARROW=98;
-    public static final int FLOAT=105;
+    public static final int VK_NOT=72;
+    public static final int VK_DATE_EXPIRES=44;
+    public static final int ARROW=99;
+    public static final int FLOAT=106;
     public static final int VT_SLOT_ID=13;
     public static final int VT_CURLY_CHUNK=17;
     public static final int VT_OR_PREFIX=22;
-    public static final int DOUBLE_PIPE=96;
-    public static final int LESS=102;
+    public static final int DOUBLE_PIPE=97;
+    public static final int LESS=103;
     public static final int VT_PATTERN=29;
-    public static final int VK_DATE_EFFECTIVE=42;
-    public static final int EscapeSequence=115;
-    public static final int VK_EXISTS=75;
-    public static final int INT=95;
+    public static final int VK_DATE_EFFECTIVE=43;
+    public static final int EscapeSequence=116;
+    public static final int VK_EXISTS=76;
+    public static final int INT=96;
     public static final int VT_BIND_FIELD=32;
-    public static final int VK_RULE=56;
-    public static final int VK_EVAL=64;
-    public static final int VK_COLLECT=83;
-    public static final int GREATER=100;
+    public static final int VK_RULE=57;
+    public static final int VK_EVAL=65;
+    public static final int VK_COLLECT=84;
+    public static final int GREATER=101;
     public static final int VT_FACT_BINDING=30;
-    public static final int ID=85;
-    public static final int NOT_EQUAL=104;
-    public static final int RIGHT_CURLY=111;
-    public static final int BOOL=94;
-    public static final int VT_PARAM_LIST=41;
+    public static final int ID=86;
+    public static final int NOT_EQUAL=105;
+    public static final int RIGHT_CURLY=112;
+    public static final int BOOL=95;
+    public static final int VT_PARAM_LIST=42;
     public static final int VT_AND_INFIX=23;
-    public static final int VK_ENTRY_POINT=70;
+    public static final int VK_ENTRY_POINT=71;
     public static final int VT_FROM_SOURCE=27;
-    public static final int VK_LOCK_ON_ACTIVE=44;
-    public static final int VK_CONTAINS=65;
+    public static final int VK_LOCK_ON_ACTIVE=45;
+    public static final int VK_CONTAINS=66;
     public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VK_IN=72;
+    public static final int VK_IN=73;
     public static final int VT_RHS_CHUNK=16;
-    public static final int GREATER_EQUAL=101;
-    public static final int VK_MEMBEROF=69;
+    public static final int GREATER_EQUAL=102;
+    public static final int VK_MEMBEROF=70;
     public static final int VT_OR_INFIX=24;
-    public static final int DOT_STAR=87;
-    public static final int VK_OR=73;
-    public static final int VT_GLOBAL_ID=39;
-    public static final int LESS_EQUAL=103;
-    public static final int VK_WHEN=55;
-    public static final int VK_RULEFLOW_GROUP=49;
-    public static final int VT_FUNCTION_ID=40;
+    public static final int DOT_STAR=88;
+    public static final int VK_OR=74;
+    public static final int VT_GLOBAL_ID=40;
+    public static final int LESS_EQUAL=104;
+    public static final int VK_WHEN=56;
+    public static final int VK_RULEFLOW_GROUP=50;
+    public static final int VT_FUNCTION_ID=41;
     public static final int EOF=-1;
     public static final int VT_CONSTRAINTS=7;
-    public static final int EOL=113;
-    public static final int VT_IMPORT_ID=38;
-    public static final int VK_ACTIVATION_GROUP=47;
-    public static final int VK_INIT=79;
-    public static final int OctalEscape=118;
-    public static final int VK_ACTION=80;
-    public static final int VK_EXCLUDES=67;
-    public static final int VK_FROM=77;
-    public static final int RIGHT_PAREN=92;
+    public static final int EOL=114;
+    public static final int VT_IMPORT_ID=39;
+    public static final int VK_ACTIVATION_GROUP=48;
+    public static final int VK_INIT=80;
+    public static final int OctalEscape=119;
+    public static final int VK_ACTION=81;
+    public static final int VK_EXCLUDES=68;
+    public static final int VK_FROM=78;
+    public static final int RIGHT_PAREN=93;
     public static final int VT_TEMPLATE_ID=10;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=120;
-    public static final int VK_DECLARE=61;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=121;
+    public static final int VK_DECLARE=62;
 
         public DRLParser(TokenStream input) {
             super(input);
-            ruleMemo = new HashMap[139+1];
+            ruleMemo = new HashMap[140+1];
          }
         
     protected TreeAdaptor adaptor = new CommonTreeAdaptor();
@@ -303,7 +304,7 @@
     };
 
     // $ANTLR start compilation_unit
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:270:1: compilation_unit : ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271: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);
@@ -321,18 +322,18 @@
         RewriteRuleSubtreeStream stream_package_statement=new RewriteRuleSubtreeStream(adaptor,"rule package_statement");
         RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:2: ( ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:4: ( package_statement )? ( statement )* EOF
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:2: ( ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:4: ( package_statement )? ( statement )* EOF
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:4: ( package_statement )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:4: ( package_statement )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
-            if ( (LA1_0==ID) && (((validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("duration"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("package"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("date")!
  && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("import"))||(validateIdentifierKey("function"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))))) {
+            if ( (LA1_0==ID) && (((validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("template"))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("package"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||(validateIdenti!
 fierKey("function"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("dialect"))))) {
                 int LA1_1 = input.LA(2);
 
-                if ( (LA1_1==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||(validateIdentifierKey("template"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("query"))||(validateIdentifierKey("function"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("package"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {
-                    int LA1_4 = input.LA(3);
+                if ( (LA1_1==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||(validateIdentifierKey("function"))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("package"))||(validateIdentifierKey("rule"))))) {
+                    int LA1_5 = input.LA(3);
 
                     if ( ((validateIdentifierKey("package"))) ) {
                         alt1=1;
@@ -341,9 +342,9 @@
             }
             switch (alt1) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:4: package_statement
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:4: package_statement
                     {
-                    pushFollow(FOLLOW_package_statement_in_compilation_unit396);
+                    pushFollow(FOLLOW_package_statement_in_compilation_unit400);
                     package_statement1=package_statement();
                     _fsp--;
                     if (failed) return retval;
@@ -354,22 +355,22 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:3: ( statement )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:273:3: ( statement )*
             loop2:
             do {
                 int alt2=2;
                 int LA2_0 = input.LA(1);
 
-                if ( (LA2_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("import"))||(validateIdentifierKey("duration"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||(validateIdentifierKey("query"))||(validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("rulef!
 low") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {
+                if ( (LA2_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("import"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("template"))||(validateIdentifierKey("function"))||(validateIdentifierKey("query"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("global"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("auto"!
 ) && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))))) {
                     alt2=1;
                 }
 
 
                 switch (alt2) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:3: statement
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:273:3: statement
             	    {
-            	    pushFollow(FOLLOW_statement_in_compilation_unit401);
+            	    pushFollow(FOLLOW_statement_in_compilation_unit405);
             	    statement2=statement();
             	    _fsp--;
             	    if (failed) return retval;
@@ -384,7 +385,7 @@
             } while (true);
 
             EOF3=(Token)input.LT(1);
-            match(input,EOF,FOLLOW_EOF_in_compilation_unit406); if (failed) return retval;
+            match(input,EOF,FOLLOW_EOF_in_compilation_unit410); if (failed) return retval;
             if ( backtracking==0 ) stream_EOF.add(EOF3);
 
 
@@ -399,20 +400,20 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 274:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            // 275:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:274:6: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:275: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:274:28: ( package_statement )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:275: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:274:47: ( statement )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:275:47: ( statement )*
                 while ( stream_statement.hasNext() ) {
                     adaptor.addChild(root_1, stream_statement.next());
 
@@ -456,7 +457,7 @@
     };
 
     // $ANTLR start package_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:282:1: package_statement : package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283: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);
@@ -474,20 +475,20 @@
         RewriteRuleSubtreeStream stream_package_key=new RewriteRuleSubtreeStream(adaptor,"rule package_key");
         RewriteRuleSubtreeStream stream_package_id=new RewriteRuleSubtreeStream(adaptor,"rule package_id");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:4: package_key package_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:284:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:284:4: package_key package_id ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_package_key_in_package_statement446);
+            pushFollow(FOLLOW_package_key_in_package_statement450);
             package_key4=package_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_package_key.add(package_key4.getTree());
-            pushFollow(FOLLOW_package_id_in_package_statement448);
+            pushFollow(FOLLOW_package_id_in_package_statement452);
             package_id5=package_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_package_id.add(package_id5.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:27: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:284:27: ( SEMICOLON )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -496,10 +497,10 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:27: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:284:27: SEMICOLON
                     {
                     SEMICOLON6=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement450); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement454); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON6);
 
 
@@ -520,9 +521,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 284:3: -> ^( package_key package_id )
+            // 285:3: -> ^( package_key package_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:284:6: ^( package_key package_id )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:285:6: ^( package_key package_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_package_key.nextNode(), root_1);
@@ -561,7 +562,7 @@
     };
 
     // $ANTLR start package_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:287:1: package_id : ID ( DOT ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:1: package_id : ID ( DOT 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);
@@ -579,14 +580,14 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:2: ( ID ( DOT ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:4: ID ( DOT ID )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:2: ( ID ( DOT ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:4: ID ( DOT ID )*
             {
             ID7=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_package_id472); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_package_id476); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID7);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:7: ( DOT ID )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:7: ( DOT ID )*
             loop4:
             do {
                 int alt4=2;
@@ -599,14 +600,14 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:9: DOT ID
             	    {
             	    DOT8=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_package_id476); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_package_id480); if (failed) return retval;
             	    if ( backtracking==0 ) stream_DOT.add(DOT8);
 
             	    ID9=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_package_id478); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_package_id482); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(ID9);
 
 
@@ -630,9 +631,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 289:3: -> ^( VT_PACKAGE_ID ( ID )+ )
+            // 290:3: -> ^( VT_PACKAGE_ID ( ID )+ )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:289:6: ^( VT_PACKAGE_ID ( ID )+ )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:290: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);
@@ -678,7 +679,7 @@
     };
 
     // $ANTLR start statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:292:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );
     public final statement_return statement() throws RecognitionException {
         statement_return retval = new statement_return();
         retval.start = input.LT(1);
@@ -704,16 +705,16 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:2: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:2: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query )
             int alt5=8;
             alt5 = dfa5.predict(input);
             switch (alt5) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:4: rule_attribute
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:4: rule_attribute
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_rule_attribute_in_statement503);
+                    pushFollow(FOLLOW_rule_attribute_in_statement507);
                     rule_attribute10=rule_attribute();
                     _fsp--;
                     if (failed) return retval;
@@ -722,7 +723,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294:3: {...}? => function_import_statement
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:295:3: {...}? => function_import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -730,7 +731,7 @@
                         if (backtracking>0) {failed=true; return retval;}
                         throw new FailedPredicateException(input, "statement", "(validateLT(1, \"import\") && validateLT(2, \"function\") )");
                     }
-                    pushFollow(FOLLOW_function_import_statement_in_statement510);
+                    pushFollow(FOLLOW_function_import_statement_in_statement514);
                     function_import_statement11=function_import_statement();
                     _fsp--;
                     if (failed) return retval;
@@ -739,11 +740,11 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:295:4: import_statement
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:296:4: import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_import_statement_in_statement516);
+                    pushFollow(FOLLOW_import_statement_in_statement520);
                     import_statement12=import_statement();
                     _fsp--;
                     if (failed) return retval;
@@ -752,11 +753,11 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:296:4: global
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:297:4: global
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_global_in_statement522);
+                    pushFollow(FOLLOW_global_in_statement526);
                     global13=global();
                     _fsp--;
                     if (failed) return retval;
@@ -765,11 +766,11 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:297:4: function
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:4: function
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_function_in_statement528);
+                    pushFollow(FOLLOW_function_in_statement532);
                     function14=function();
                     _fsp--;
                     if (failed) return retval;
@@ -778,11 +779,11 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:4: template
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:4: template
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_template_in_statement533);
+                    pushFollow(FOLLOW_template_in_statement537);
                     template15=template();
                     _fsp--;
                     if (failed) return retval;
@@ -791,11 +792,11 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:299:4: rule
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:300:4: rule
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_rule_in_statement538);
+                    pushFollow(FOLLOW_rule_in_statement542);
                     rule16=rule();
                     _fsp--;
                     if (failed) return retval;
@@ -804,11 +805,11 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:300:4: query
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:301:4: query
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_query_in_statement543);
+                    pushFollow(FOLLOW_query_in_statement547);
                     query17=query();
                     _fsp--;
                     if (failed) return retval;
@@ -841,7 +842,7 @@
     };
 
     // $ANTLR start import_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:303:1: import_statement : import_key import_name ( SEMICOLON )? -> ^( import_key import_name ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:1: import_statement : import_key import_name ( 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);
@@ -859,20 +860,20 @@
         RewriteRuleSubtreeStream stream_import_key=new RewriteRuleSubtreeStream(adaptor,"rule import_key");
         RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:2: ( import_key import_name ( SEMICOLON )? -> ^( import_key import_name ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:4: import_key import_name ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:2: ( import_key import_name ( SEMICOLON )? -> ^( import_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:4: import_key import_name ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_import_key_in_import_statement554);
+            pushFollow(FOLLOW_import_key_in_import_statement558);
             import_key18=import_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_key.add(import_key18.getTree());
-            pushFollow(FOLLOW_import_name_in_import_statement556);
+            pushFollow(FOLLOW_import_name_in_import_statement560);
             import_name19=import_name();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_name.add(import_name19.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:27: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:27: ( SEMICOLON )?
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -881,10 +882,10 @@
             }
             switch (alt6) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:304:27: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:27: SEMICOLON
                     {
                     SEMICOLON20=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement558); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement562); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON20);
 
 
@@ -905,9 +906,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 305:3: -> ^( import_key import_name )
+            // 306:3: -> ^( import_key import_name )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:6: ^( import_key import_name )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:6: ^( import_key import_name )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_import_key.nextNode(), root_1);
@@ -946,7 +947,7 @@
     };
 
     // $ANTLR start function_import_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:308:1: function_import_statement : imp= import_key function_key import_name ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:309:1: function_import_statement : imp= import_key function_key import_name ( 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);
@@ -967,25 +968,25 @@
         RewriteRuleSubtreeStream stream_function_key=new RewriteRuleSubtreeStream(adaptor,"rule function_key");
         RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:309:2: (imp= import_key function_key import_name ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:309:4: imp= import_key function_key import_name ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:2: (imp= import_key function_key import_name ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:4: imp= import_key function_key import_name ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_import_key_in_function_import_statement582);
+            pushFollow(FOLLOW_import_key_in_function_import_statement586);
             imp=import_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_key.add(imp.getTree());
-            pushFollow(FOLLOW_function_key_in_function_import_statement584);
+            pushFollow(FOLLOW_function_key_in_function_import_statement588);
             function_key21=function_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_function_key.add(function_key21.getTree());
-            pushFollow(FOLLOW_import_name_in_function_import_statement586);
+            pushFollow(FOLLOW_import_name_in_function_import_statement590);
             import_name22=import_name();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_name.add(import_name22.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:309:44: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:44: ( SEMICOLON )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -994,10 +995,10 @@
             }
             switch (alt7) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:309:44: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:44: SEMICOLON
                     {
                     SEMICOLON23=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement588); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement592); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON23);
 
 
@@ -1018,9 +1019,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 310:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+            // 311:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310:6: ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311: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);
@@ -1060,7 +1061,7 @@
     };
 
     // $ANTLR start import_name
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:313:1: import_name : ID ( DOT ID )* ( DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:1: import_name : ID ( DOT ID )* ( DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
     public final import_name_return import_name() throws RecognitionException {
         import_name_return retval = new import_name_return();
         retval.start = input.LT(1);
@@ -1081,14 +1082,14 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:2: ( ID ( DOT ID )* ( DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:4: ID ( DOT ID )* ( DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:2: ( ID ( DOT ID )* ( DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:4: ID ( DOT ID )* ( DOT_STAR )?
             {
             ID24=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_import_name613); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_import_name617); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID24);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:7: ( DOT ID )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:7: ( DOT ID )*
             loop8:
             do {
                 int alt8=2;
@@ -1101,14 +1102,14 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:9: DOT ID
             	    {
             	    DOT25=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_import_name617); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_import_name621); if (failed) return retval;
             	    if ( backtracking==0 ) stream_DOT.add(DOT25);
 
             	    ID26=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_import_name619); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_import_name623); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(ID26);
 
 
@@ -1120,7 +1121,7 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:19: ( DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:19: ( DOT_STAR )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -1129,10 +1130,10 @@
             }
             switch (alt9) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:19: DOT_STAR
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:19: DOT_STAR
                     {
                     DOT_STAR27=(Token)input.LT(1);
-                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name624); if (failed) return retval;
+                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name628); if (failed) return retval;
                     if ( backtracking==0 ) stream_DOT_STAR.add(DOT_STAR27);
 
 
@@ -1153,9 +1154,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 315:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            // 316:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:6: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:316: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);
@@ -1168,7 +1169,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:315:25: ( DOT_STAR )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:316:25: ( DOT_STAR )?
                 if ( stream_DOT_STAR.hasNext() ) {
                     adaptor.addChild(root_1, stream_DOT_STAR.next());
 
@@ -1207,7 +1208,7 @@
     };
 
     // $ANTLR start global
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:318:1: global : global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319: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);
@@ -1228,25 +1229,25 @@
         RewriteRuleSubtreeStream stream_global_id=new RewriteRuleSubtreeStream(adaptor,"rule global_id");
         RewriteRuleSubtreeStream stream_global_key=new RewriteRuleSubtreeStream(adaptor,"rule global_key");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:4: global_key data_type global_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:4: global_key data_type global_id ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_global_key_in_global650);
+            pushFollow(FOLLOW_global_key_in_global654);
             global_key28=global_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_global_key.add(global_key28.getTree());
-            pushFollow(FOLLOW_data_type_in_global652);
+            pushFollow(FOLLOW_data_type_in_global656);
             data_type29=data_type();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_data_type.add(data_type29.getTree());
-            pushFollow(FOLLOW_global_id_in_global654);
+            pushFollow(FOLLOW_global_id_in_global658);
             global_id30=global_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_global_id.add(global_id30.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:35: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:35: ( SEMICOLON )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -1255,10 +1256,10 @@
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:35: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:35: SEMICOLON
                     {
                     SEMICOLON31=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global656); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global660); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON31);
 
 
@@ -1279,9 +1280,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 320:3: -> ^( global_key data_type global_id )
+            // 321:3: -> ^( global_key data_type global_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:6: ^( global_key data_type global_id )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:321:6: ^( global_key data_type global_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_global_key.nextNode(), root_1);
@@ -1321,7 +1322,7 @@
     };
 
     // $ANTLR start global_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:323:1: global_id : id= ID -> VT_GLOBAL_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324: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);
@@ -1334,11 +1335,11 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324:2: (id= ID -> VT_GLOBAL_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324:4: id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:325:2: (id= ID -> VT_GLOBAL_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:325:4: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_global_id682); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_global_id686); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -1353,7 +1354,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 325:3: -> VT_GLOBAL_ID[$id]
+            // 326:3: -> VT_GLOBAL_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_GLOBAL_ID, id));
 
@@ -1386,7 +1387,7 @@
     };
 
     // $ANTLR start function
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:328: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329: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);
@@ -1410,15 +1411,15 @@
         RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         RewriteRuleSubtreeStream stream_function_id=new RewriteRuleSubtreeStream(adaptor,"rule function_id");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329:4: function_key ( data_type )? function_id parameters curly_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:4: function_key ( data_type )? function_id parameters curly_chunk
             {
-            pushFollow(FOLLOW_function_key_in_function700);
+            pushFollow(FOLLOW_function_key_in_function704);
             function_key32=function_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_function_key.add(function_key32.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329:17: ( data_type )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:17: ( data_type )?
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -1431,9 +1432,9 @@
             }
             switch (alt11) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329:17: data_type
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:17: data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_function702);
+                    pushFollow(FOLLOW_data_type_in_function706);
                     data_type33=data_type();
                     _fsp--;
                     if (failed) return retval;
@@ -1444,17 +1445,17 @@
 
             }
 
-            pushFollow(FOLLOW_function_id_in_function705);
+            pushFollow(FOLLOW_function_id_in_function709);
             function_id34=function_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_function_id.add(function_id34.getTree());
-            pushFollow(FOLLOW_parameters_in_function707);
+            pushFollow(FOLLOW_parameters_in_function711);
             parameters35=parameters();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_parameters.add(parameters35.getTree());
-            pushFollow(FOLLOW_curly_chunk_in_function709);
+            pushFollow(FOLLOW_curly_chunk_in_function713);
             curly_chunk36=curly_chunk();
             _fsp--;
             if (failed) return retval;
@@ -1471,14 +1472,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 330:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
+            // 331:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:6: ^( function_key ( data_type )? function_id parameters curly_chunk )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:331: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:330:21: ( data_type )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:331:21: ( data_type )?
                 if ( stream_data_type.hasNext() ) {
                     adaptor.addChild(root_1, stream_data_type.next());
 
@@ -1520,7 +1521,7 @@
     };
 
     // $ANTLR start function_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:1: function_id : id= ID -> VT_FUNCTION_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:334: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);
@@ -1533,11 +1534,11 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:334:2: (id= ID -> VT_FUNCTION_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:334:4: id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:335:2: (id= ID -> VT_FUNCTION_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:335:4: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_function_id739); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_function_id743); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -1552,7 +1553,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 335:3: -> VT_FUNCTION_ID[$id]
+            // 336:3: -> VT_FUNCTION_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_FUNCTION_ID, id));
 
@@ -1585,7 +1586,7 @@
     };
 
     // $ANTLR start query
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:338: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339: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);
@@ -1612,27 +1613,27 @@
         RewriteRuleSubtreeStream stream_normal_lhs_block=new RewriteRuleSubtreeStream(adaptor,"rule normal_lhs_block");
         RewriteRuleSubtreeStream stream_query_id=new RewriteRuleSubtreeStream(adaptor,"rule query_id");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:4: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:4: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_query_key_in_query757);
+            pushFollow(FOLLOW_query_key_in_query761);
             query_key37=query_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_query_key.add(query_key37.getTree());
-            pushFollow(FOLLOW_query_id_in_query759);
+            pushFollow(FOLLOW_query_id_in_query763);
             query_id38=query_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_query_id.add(query_id38.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:23: ( parameters )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:23: ( parameters )?
             int alt12=2;
             alt12 = dfa12.predict(input);
             switch (alt12) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:23: parameters
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:23: parameters
                     {
-                    pushFollow(FOLLOW_parameters_in_query761);
+                    pushFollow(FOLLOW_parameters_in_query765);
                     parameters39=parameters();
                     _fsp--;
                     if (failed) return retval;
@@ -1643,16 +1644,16 @@
 
             }
 
-            pushFollow(FOLLOW_normal_lhs_block_in_query764);
+            pushFollow(FOLLOW_normal_lhs_block_in_query768);
             normal_lhs_block40=normal_lhs_block();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block40.getTree());
             END41=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_query766); if (failed) return retval;
+            match(input,END,FOLLOW_END_in_query770); if (failed) return retval;
             if ( backtracking==0 ) stream_END.add(END41);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:56: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:56: ( SEMICOLON )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -1661,10 +1662,10 @@
             }
             switch (alt13) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:56: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:56: SEMICOLON
                     {
                     SEMICOLON42=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query768); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query772); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON42);
 
 
@@ -1685,15 +1686,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 340:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
+            // 341:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:6: ^( query_key query_id ( parameters )? normal_lhs_block END )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:27: ( parameters )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:341:27: ( parameters )?
                 if ( stream_parameters.hasNext() ) {
                     adaptor.addChild(root_1, stream_parameters.next());
 
@@ -1734,7 +1735,7 @@
     };
 
     // $ANTLR start query_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:343:1: query_id : (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:1: query_id : (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] );
     public final query_id_return query_id() throws RecognitionException {
         query_id_return retval = new query_id_return();
         retval.start = input.LT(1);
@@ -1748,7 +1749,7 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:2: (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:2: (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] )
             int alt14=2;
             int LA14_0 = input.LA(1);
 
@@ -1761,16 +1762,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("343:1: query_id : (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] );", 14, 0, input);
+                    new NoViableAltException("344:1: query_id : (value= ID -> VT_QUERY_ID[$value] | value= STRING -> VT_QUERY_ID[$value] );", 14, 0, input);
 
                 throw nvae;
             }
             switch (alt14) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:5: value= ID
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:5: value= ID
                     {
                     value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_query_id800); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_query_id804); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(value);
 
 
@@ -1785,7 +1786,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 344:14: -> VT_QUERY_ID[$value]
+                    // 345:14: -> VT_QUERY_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, value));
 
@@ -1796,10 +1797,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:5: value= STRING
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:5: value= STRING
                     {
                     value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_query_id813); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_query_id817); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(value);
 
 
@@ -1814,7 +1815,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 345:18: -> VT_QUERY_ID[$value]
+                    // 346:18: -> VT_QUERY_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, value));
 
@@ -1849,7 +1850,7 @@
     };
 
     // $ANTLR start parameters
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:348:1: parameters : LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349: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);
@@ -1872,14 +1873,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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
             {
             LEFT_PAREN43=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters829); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters833); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN43);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:4: ( param_definition ( COMMA param_definition )* )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:4: ( param_definition ( COMMA param_definition )* )?
             int alt16=2;
             int LA16_0 = input.LA(1);
 
@@ -1888,14 +1889,14 @@
             }
             switch (alt16) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:6: param_definition ( COMMA param_definition )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:6: param_definition ( COMMA param_definition )*
                     {
-                    pushFollow(FOLLOW_param_definition_in_parameters836);
+                    pushFollow(FOLLOW_param_definition_in_parameters840);
                     param_definition44=param_definition();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_param_definition.add(param_definition44.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:23: ( COMMA param_definition )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:23: ( COMMA param_definition )*
                     loop15:
                     do {
                         int alt15=2;
@@ -1908,13 +1909,13 @@
 
                         switch (alt15) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:24: COMMA param_definition
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:24: COMMA param_definition
                     	    {
                     	    COMMA45=(Token)input.LT(1);
-                    	    match(input,COMMA,FOLLOW_COMMA_in_parameters839); if (failed) return retval;
+                    	    match(input,COMMA,FOLLOW_COMMA_in_parameters843); if (failed) return retval;
                     	    if ( backtracking==0 ) stream_COMMA.add(COMMA45);
 
-                    	    pushFollow(FOLLOW_param_definition_in_parameters841);
+                    	    pushFollow(FOLLOW_param_definition_in_parameters845);
                     	    param_definition46=param_definition();
                     	    _fsp--;
                     	    if (failed) return retval;
@@ -1935,7 +1936,7 @@
             }
 
             RIGHT_PAREN47=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_parameters850); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_parameters854); if (failed) return retval;
             if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN47);
 
 
@@ -1950,14 +1951,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 352:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+            // 353:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:352:6: ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:353: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:352:22: ( param_definition )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:353:22: ( param_definition )*
                 while ( stream_param_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_param_definition.next());
 
@@ -1997,7 +1998,7 @@
     };
 
     // $ANTLR start param_definition
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:1: param_definition : ( data_type )? argument ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:356: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);
@@ -2011,19 +2012,19 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:356:2: ( ( data_type )? argument )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:356:4: ( data_type )? argument
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:2: ( ( data_type )? argument )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:4: ( data_type )? argument
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:356:4: ( data_type )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:4: ( data_type )?
             int alt17=2;
             alt17 = dfa17.predict(input);
             switch (alt17) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:356:4: data_type
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:4: data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_param_definition874);
+                    pushFollow(FOLLOW_data_type_in_param_definition878);
                     data_type48=data_type();
                     _fsp--;
                     if (failed) return retval;
@@ -2034,7 +2035,7 @@
 
             }
 
-            pushFollow(FOLLOW_argument_in_param_definition877);
+            pushFollow(FOLLOW_argument_in_param_definition881);
             argument49=argument();
             _fsp--;
             if (failed) return retval;
@@ -2065,7 +2066,7 @@
     };
 
     // $ANTLR start argument
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:359:1: argument : ID ( dimension_definition )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:1: argument : ID ( dimension_definition )* ;
     public final argument_return argument() throws RecognitionException {
         argument_return retval = new argument_return();
         retval.start = input.LT(1);
@@ -2079,18 +2080,18 @@
         Object ID50_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:2: ( ID ( dimension_definition )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:4: ID ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:2: ( ID ( dimension_definition )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:4: ID ( dimension_definition )*
             {
             root_0 = (Object)adaptor.nil();
 
             ID50=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_argument888); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_argument892); if (failed) return retval;
             if ( backtracking==0 ) {
             ID50_tree = (Object)adaptor.create(ID50);
             adaptor.addChild(root_0, ID50_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:7: ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:7: ( dimension_definition )*
             loop18:
             do {
                 int alt18=2;
@@ -2103,9 +2104,9 @@
 
                 switch (alt18) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:7: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:7: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_argument890);
+            	    pushFollow(FOLLOW_dimension_definition_in_argument894);
             	    dimension_definition51=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
@@ -2145,7 +2146,7 @@
     };
 
     // $ANTLR start template
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:364:1: template : template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365: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);
@@ -2171,20 +2172,20 @@
         RewriteRuleSubtreeStream stream_template_slot=new RewriteRuleSubtreeStream(adaptor,"rule template_slot");
         RewriteRuleSubtreeStream stream_template_key=new RewriteRuleSubtreeStream(adaptor,"rule template_key");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365:2: ( template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365:4: template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:2: ( template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:4: template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_template_key_in_template903);
+            pushFollow(FOLLOW_template_key_in_template907);
             template_key52=template_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_template_key.add(template_key52.getTree());
-            pushFollow(FOLLOW_template_id_in_template905);
+            pushFollow(FOLLOW_template_id_in_template909);
             template_id53=template_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_template_id.add(template_id53.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365:29: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:29: ( SEMICOLON )?
             int alt19=2;
             int LA19_0 = input.LA(1);
 
@@ -2193,10 +2194,10 @@
             }
             switch (alt19) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365:29: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:29: SEMICOLON
                     {
                     SEMICOLON54=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template907); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template911); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON54);
 
 
@@ -2205,7 +2206,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:3: ( template_slot )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:3: ( template_slot )+
             int cnt20=0;
             loop20:
             do {
@@ -2219,9 +2220,9 @@
 
                 switch (alt20) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:3: template_slot
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:3: template_slot
             	    {
-            	    pushFollow(FOLLOW_template_slot_in_template912);
+            	    pushFollow(FOLLOW_template_slot_in_template916);
             	    template_slot55=template_slot();
             	    _fsp--;
             	    if (failed) return retval;
@@ -2241,10 +2242,10 @@
             } while (true);
 
             END56=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_template917); if (failed) return retval;
+            match(input,END,FOLLOW_END_in_template921); if (failed) return retval;
             if ( backtracking==0 ) stream_END.add(END56);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:7: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368:7: ( SEMICOLON )?
             int alt21=2;
             int LA21_0 = input.LA(1);
 
@@ -2253,10 +2254,10 @@
             }
             switch (alt21) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:367:7: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368:7: SEMICOLON
                     {
                     SEMICOLON57=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template919); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template923); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON57);
 
 
@@ -2277,9 +2278,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 368:3: -> ^( template_key template_id ( template_slot )+ END )
+            // 369:3: -> ^( template_key template_id ( template_slot )+ END )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368:6: ^( template_key template_id ( template_slot )+ END )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:369: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);
@@ -2327,7 +2328,7 @@
     };
 
     // $ANTLR start template_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:1: template_id : (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:372:1: template_id : (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] );
     public final template_id_return template_id() throws RecognitionException {
         template_id_return retval = new template_id_return();
         retval.start = input.LT(1);
@@ -2341,7 +2342,7 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:372:2: (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:373:2: (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] )
             int alt22=2;
             int LA22_0 = input.LA(1);
 
@@ -2354,16 +2355,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("371:1: template_id : (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] );", 22, 0, input);
+                    new NoViableAltException("372:1: template_id : (value= ID -> VT_TEMPLATE_ID[$value] | value= STRING -> VT_TEMPLATE_ID[$value] );", 22, 0, input);
 
                 throw nvae;
             }
             switch (alt22) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:372:5: value= ID
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:373:5: value= ID
                     {
                     value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_template_id949); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_template_id953); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(value);
 
 
@@ -2378,7 +2379,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 372:14: -> VT_TEMPLATE_ID[$value]
+                    // 373:14: -> VT_TEMPLATE_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, value));
 
@@ -2389,10 +2390,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:373:5: value= STRING
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:374:5: value= STRING
                     {
                     value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_template_id962); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_template_id966); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(value);
 
 
@@ -2407,7 +2408,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 373:18: -> VT_TEMPLATE_ID[$value]
+                    // 374:18: -> VT_TEMPLATE_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, value));
 
@@ -2442,7 +2443,7 @@
     };
 
     // $ANTLR start template_slot
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:376:1: template_slot : data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:377: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);
@@ -2460,20 +2461,20 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:377:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:377:5: data_type slot_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:5: data_type slot_id ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_data_type_in_template_slot979);
+            pushFollow(FOLLOW_data_type_in_template_slot983);
             data_type58=data_type();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_data_type.add(data_type58.getTree());
-            pushFollow(FOLLOW_slot_id_in_template_slot981);
+            pushFollow(FOLLOW_slot_id_in_template_slot985);
             slot_id59=slot_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_slot_id.add(slot_id59.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:377:23: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:23: ( SEMICOLON )?
             int alt23=2;
             int LA23_0 = input.LA(1);
 
@@ -2482,10 +2483,10 @@
             }
             switch (alt23) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:377:23: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:23: SEMICOLON
                     {
                     SEMICOLON60=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot983); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot987); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON60);
 
 
@@ -2506,9 +2507,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 378:3: -> ^( VT_SLOT data_type slot_id )
+            // 379:3: -> ^( VT_SLOT data_type slot_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:6: ^( VT_SLOT data_type slot_id )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379: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);
@@ -2548,7 +2549,7 @@
     };
 
     // $ANTLR start slot_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:381:1: slot_id : id= ID -> VT_SLOT_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382: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);
@@ -2561,11 +2562,11 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:381:9: (id= ID -> VT_SLOT_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:381:11: id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:9: (id= ID -> VT_SLOT_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:11: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_slot_id1008); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_slot_id1012); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -2580,7 +2581,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 382:3: -> VT_SLOT_ID[$id]
+            // 383:3: -> VT_SLOT_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SLOT_ID, id));
 
@@ -2613,7 +2614,7 @@
     };
 
     // $ANTLR start rule
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:385: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386: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);
@@ -2637,27 +2638,27 @@
         RewriteRuleSubtreeStream stream_rule_attributes=new RewriteRuleSubtreeStream(adaptor,"rule rule_attributes");
         RewriteRuleSubtreeStream stream_rhs_chunk=new RewriteRuleSubtreeStream(adaptor,"rule rhs_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:4: rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:4: rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk
             {
-            pushFollow(FOLLOW_rule_key_in_rule1026);
+            pushFollow(FOLLOW_rule_key_in_rule1030);
             rule_key61=rule_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_rule_key.add(rule_key61.getTree());
-            pushFollow(FOLLOW_rule_id_in_rule1028);
+            pushFollow(FOLLOW_rule_id_in_rule1032);
             rule_id62=rule_id();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_rule_id.add(rule_id62.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:21: ( rule_attributes )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:21: ( rule_attributes )?
             int alt24=2;
             alt24 = dfa24.predict(input);
             switch (alt24) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:21: rule_attributes
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:21: rule_attributes
                     {
-                    pushFollow(FOLLOW_rule_attributes_in_rule1030);
+                    pushFollow(FOLLOW_rule_attributes_in_rule1034);
                     rule_attributes63=rule_attributes();
                     _fsp--;
                     if (failed) return retval;
@@ -2668,7 +2669,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:38: ( when_part )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:38: ( when_part )?
             int alt25=2;
             int LA25_0 = input.LA(1);
 
@@ -2677,9 +2678,9 @@
             }
             switch (alt25) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:38: when_part
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:38: when_part
                     {
-                    pushFollow(FOLLOW_when_part_in_rule1033);
+                    pushFollow(FOLLOW_when_part_in_rule1037);
                     when_part64=when_part();
                     _fsp--;
                     if (failed) return retval;
@@ -2690,7 +2691,7 @@
 
             }
 
-            pushFollow(FOLLOW_rhs_chunk_in_rule1036);
+            pushFollow(FOLLOW_rhs_chunk_in_rule1040);
             rhs_chunk65=rhs_chunk();
             _fsp--;
             if (failed) return retval;
@@ -2707,21 +2708,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 387:3: -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+            // 388:3: -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:6: ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:388: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:25: ( rule_attributes )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:388: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:42: ( when_part )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:388:42: ( when_part )?
                 if ( stream_when_part.hasNext() ) {
                     adaptor.addChild(root_1, stream_when_part.next());
 
@@ -2761,7 +2762,7 @@
     };
 
     // $ANTLR start when_part
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:390:1: when_part : when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:391: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);
@@ -2779,15 +2780,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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:391:2: ( when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:391:4: when_key ( COLON )? normal_lhs_block
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:2: ( when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:4: when_key ( COLON )? normal_lhs_block
             {
-            pushFollow(FOLLOW_when_key_in_when_part1065);
+            pushFollow(FOLLOW_when_key_in_when_part1069);
             when_key66=when_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_when_key.add(when_key66.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:391:13: ( COLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:13: ( COLON )?
             int alt26=2;
             int LA26_0 = input.LA(1);
 
@@ -2796,10 +2797,10 @@
             }
             switch (alt26) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:391:13: COLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:13: COLON
                     {
                     COLON67=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_when_part1067); if (failed) return retval;
+                    match(input,COLON,FOLLOW_COLON_in_when_part1071); if (failed) return retval;
                     if ( backtracking==0 ) stream_COLON.add(COLON67);
 
 
@@ -2808,7 +2809,7 @@
 
             }
 
-            pushFollow(FOLLOW_normal_lhs_block_in_when_part1070);
+            pushFollow(FOLLOW_normal_lhs_block_in_when_part1074);
             normal_lhs_block68=normal_lhs_block();
             _fsp--;
             if (failed) return retval;
@@ -2825,7 +2826,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 392:2: -> when_key normal_lhs_block
+            // 393:2: -> when_key normal_lhs_block
             {
                 adaptor.addChild(root_0, stream_when_key.next());
                 adaptor.addChild(root_0, stream_normal_lhs_block.next());
@@ -2859,7 +2860,7 @@
     };
 
     // $ANTLR start rule_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:395:1: rule_id : (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:1: rule_id : (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] );
     public final rule_id_return rule_id() throws RecognitionException {
         rule_id_return retval = new rule_id_return();
         retval.start = input.LT(1);
@@ -2873,7 +2874,7 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:2: (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:397:2: (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] )
             int alt27=2;
             int LA27_0 = input.LA(1);
 
@@ -2886,16 +2887,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("395:1: rule_id : (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] );", 27, 0, input);
+                    new NoViableAltException("396:1: rule_id : (value= ID -> VT_RULE_ID[$value] | value= STRING -> VT_RULE_ID[$value] );", 27, 0, input);
 
                 throw nvae;
             }
             switch (alt27) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:396:5: value= ID
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:397:5: value= ID
                     {
                     value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_rule_id1091); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_rule_id1095); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(value);
 
 
@@ -2910,7 +2911,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 396:14: -> VT_RULE_ID[$value]
+                    // 397:14: -> VT_RULE_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, value));
 
@@ -2921,10 +2922,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:397:5: value= STRING
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:5: value= STRING
                     {
                     value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_id1104); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_rule_id1108); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(value);
 
 
@@ -2939,7 +2940,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 397:18: -> VT_RULE_ID[$value]
+                    // 398:18: -> VT_RULE_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, value));
 
@@ -2974,7 +2975,7 @@
     };
 
     // $ANTLR start rule_attributes
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:400:1: rule_attributes : ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401: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);
@@ -2997,14 +2998,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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:4: ( attributes_key COLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:4: ( attributes_key COLON )?
             int alt28=2;
             int LA28_0 = input.LA(1);
 
-            if ( (LA28_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("attributes"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {
+            if ( (LA28_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("attributes"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))))) {
                 int LA28_1 = input.LA(2);
 
                 if ( (LA28_1==COLON) && ((validateIdentifierKey("attributes")))) {
@@ -3013,15 +3014,15 @@
             }
             switch (alt28) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:6: attributes_key COLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:6: attributes_key COLON
                     {
-                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1122);
+                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1126);
                     attributes_key69=attributes_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_attributes_key.add(attributes_key69.getTree());
                     COLON70=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1124); if (failed) return retval;
+                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1128); if (failed) return retval;
                     if ( backtracking==0 ) stream_COLON.add(COLON70);
 
 
@@ -3030,21 +3031,21 @@
 
             }
 
-            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1129);
+            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1133);
             rule_attribute71=rule_attribute();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_rule_attribute.add(rule_attribute71.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:45: ( ( COMMA )? attr= rule_attribute )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:45: ( ( COMMA )? attr= rule_attribute )*
             loop30:
             do {
                 int alt30=2;
                 alt30 = dfa30.predict(input);
                 switch (alt30) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:47: ( COMMA )? attr= rule_attribute
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:47: ( COMMA )? attr= rule_attribute
             	    {
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:47: ( COMMA )?
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:47: ( COMMA )?
             	    int alt29=2;
             	    int LA29_0 = input.LA(1);
 
@@ -3053,10 +3054,10 @@
             	    }
             	    switch (alt29) {
             	        case 1 :
-            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:47: COMMA
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:47: COMMA
             	            {
             	            COMMA72=(Token)input.LT(1);
-            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1133); if (failed) return retval;
+            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1137); if (failed) return retval;
             	            if ( backtracking==0 ) stream_COMMA.add(COMMA72);
 
 
@@ -3065,7 +3066,7 @@
 
             	    }
 
-            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1138);
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1142);
             	    attr=rule_attribute();
             	    _fsp--;
             	    if (failed) return retval;
@@ -3091,14 +3092,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 402:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+            // 403:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:6: ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:403: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:402:27: ( attributes_key )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:403:27: ( attributes_key )?
                 if ( stream_attributes_key.hasNext() ) {
                     adaptor.addChild(root_1, stream_attributes_key.next());
 
@@ -3145,7 +3146,7 @@
     };
 
     // $ANTLR start rule_attribute
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:405: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406: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);
@@ -3179,17 +3180,17 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:407:2: ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect )
             int alt31=12;
             int LA31_0 = input.LA(1);
 
-            if ( (LA31_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))))) {
+            if ( (LA31_0==ID) && (((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {
                 int LA31_1 = input.LA(2);
 
-                if ( (LA31_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))))) {
+                if ( (LA31_1==MISC) && (((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {
                     int LA31_2 = input.LA(3);
 
-                    if ( (LA31_2==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {
+                    if ( (LA31_2==ID) && (((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))))) {
                         int LA31_7 = input.LA(4);
 
                         if ( (LA31_7==MISC) && ((validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active")))) {
@@ -3216,7 +3217,7 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 10, input);
+                                    new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 10, input);
 
                                 throw nvae;
                             }
@@ -3230,7 +3231,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 7, input);
+                                new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 7, input);
 
                             throw nvae;
                         }
@@ -3238,13 +3239,16 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 2, input);
+                            new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 2, input);
 
                         throw nvae;
                     }
                 }
+                else if ( (LA31_1==STRING) && ((validateIdentifierKey("dialect")))) {
+                    alt31=12;
+                }
                 else if ( (LA31_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {
-                    int LA31_3 = input.LA(3);
+                    int LA31_4 = input.LA(3);
 
                     if ( ((validateIdentifierKey("salience"))) ) {
                         alt31=1;
@@ -3255,7 +3259,7 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 3, input);
+                            new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 4, input);
 
                         throw nvae;
                     }
@@ -3263,16 +3267,13 @@
                 else if ( (LA31_1==LEFT_PAREN) && ((validateIdentifierKey("salience")))) {
                     alt31=1;
                 }
-                else if ( (LA31_1==STRING) && ((validateIdentifierKey("dialect")))) {
-                    alt31=12;
-                }
                 else if ( (LA31_1==BOOL) && ((validateIdentifierKey("enabled")))) {
                     alt31=9;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 1, input);
+                        new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 1, input);
 
                     throw nvae;
                 }
@@ -3280,17 +3281,17 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("405:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 0, input);
+                    new NoViableAltException("406:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 31, 0, input);
 
                 throw nvae;
             }
             switch (alt31) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:4: salience
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:407:4: salience
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_salience_in_rule_attribute1166);
+                    pushFollow(FOLLOW_salience_in_rule_attribute1170);
                     salience73=salience();
                     _fsp--;
                     if (failed) return retval;
@@ -3299,11 +3300,11 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:407:4: no_loop
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:408:4: no_loop
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_no_loop_in_rule_attribute1172);
+                    pushFollow(FOLLOW_no_loop_in_rule_attribute1176);
                     no_loop74=no_loop();
                     _fsp--;
                     if (failed) return retval;
@@ -3312,11 +3313,11 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:408:4: agenda_group
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:409:4: agenda_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1179);
+                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1183);
                     agenda_group75=agenda_group();
                     _fsp--;
                     if (failed) return retval;
@@ -3325,11 +3326,11 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:409:4: duration
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:410:4: duration
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_duration_in_rule_attribute1186);
+                    pushFollow(FOLLOW_duration_in_rule_attribute1190);
                     duration76=duration();
                     _fsp--;
                     if (failed) return retval;
@@ -3338,11 +3339,11 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:410:4: activation_group
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:411:4: activation_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_activation_group_in_rule_attribute1193);
+                    pushFollow(FOLLOW_activation_group_in_rule_attribute1197);
                     activation_group77=activation_group();
                     _fsp--;
                     if (failed) return retval;
@@ -3351,11 +3352,11 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:411:4: auto_focus
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:412:4: auto_focus
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1199);
+                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1203);
                     auto_focus78=auto_focus();
                     _fsp--;
                     if (failed) return retval;
@@ -3364,11 +3365,11 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:412:4: date_effective
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:4: date_effective
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_date_effective_in_rule_attribute1205);
+                    pushFollow(FOLLOW_date_effective_in_rule_attribute1209);
                     date_effective79=date_effective();
                     _fsp--;
                     if (failed) return retval;
@@ -3377,11 +3378,11 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:413:4: date_expires
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:4: date_expires
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_date_expires_in_rule_attribute1211);
+                    pushFollow(FOLLOW_date_expires_in_rule_attribute1215);
                     date_expires80=date_expires();
                     _fsp--;
                     if (failed) return retval;
@@ -3390,11 +3391,11 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414:4: enabled
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:415:4: enabled
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_enabled_in_rule_attribute1217);
+                    pushFollow(FOLLOW_enabled_in_rule_attribute1221);
                     enabled81=enabled();
                     _fsp--;
                     if (failed) return retval;
@@ -3403,11 +3404,11 @@
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:415:4: ruleflow_group
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:4: ruleflow_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1223);
+                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1227);
                     ruleflow_group82=ruleflow_group();
                     _fsp--;
                     if (failed) return retval;
@@ -3416,11 +3417,11 @@
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:416:4: lock_on_active
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:4: lock_on_active
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1229);
+                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1233);
                     lock_on_active83=lock_on_active();
                     _fsp--;
                     if (failed) return retval;
@@ -3429,11 +3430,11 @@
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:4: dialect
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:418:4: dialect
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_dialect_in_rule_attribute1234);
+                    pushFollow(FOLLOW_dialect_in_rule_attribute1238);
                     dialect84=dialect();
                     _fsp--;
                     if (failed) return retval;
@@ -3466,7 +3467,7 @@
     };
 
     // $ANTLR start date_effective
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:420:1: date_effective : date_effective_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421: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);
@@ -3480,18 +3481,18 @@
         Object STRING86_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:2: ( date_effective_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421:4: date_effective_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:2: ( date_effective_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:4: date_effective_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_date_effective_key_in_date_effective1246);
+            pushFollow(FOLLOW_date_effective_key_in_date_effective1250);
             date_effective_key85=date_effective_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_effective_key85.getTree(), root_0);
             STRING86=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_effective1249); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_date_effective1253); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING86_tree = (Object)adaptor.create(STRING86);
             adaptor.addChild(root_0, STRING86_tree);
@@ -3522,7 +3523,7 @@
     };
 
     // $ANTLR start date_expires
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:424:1: date_expires : date_expires_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:425: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);
@@ -3536,18 +3537,18 @@
         Object STRING88_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:425:2: ( date_expires_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:425:4: date_expires_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:426:2: ( date_expires_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:426:4: date_expires_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_date_expires_key_in_date_expires1260);
+            pushFollow(FOLLOW_date_expires_key_in_date_expires1264);
             date_expires_key87=date_expires_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_expires_key87.getTree(), root_0);
             STRING88=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_expires1263); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_date_expires1267); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING88_tree = (Object)adaptor.create(STRING88);
             adaptor.addChild(root_0, STRING88_tree);
@@ -3578,7 +3579,7 @@
     };
 
     // $ANTLR start enabled
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:428:1: enabled : enabled_key BOOL ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:1: enabled : enabled_key BOOL ;
     public final enabled_return enabled() throws RecognitionException {
         enabled_return retval = new enabled_return();
         retval.start = input.LT(1);
@@ -3592,18 +3593,18 @@
         Object BOOL90_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:2: ( enabled_key BOOL )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:4: enabled_key BOOL
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:430:2: ( enabled_key BOOL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:430:4: enabled_key BOOL
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_enabled_key_in_enabled1277);
+            pushFollow(FOLLOW_enabled_key_in_enabled1281);
             enabled_key89=enabled_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(enabled_key89.getTree(), root_0);
             BOOL90=(Token)input.LT(1);
-            match(input,BOOL,FOLLOW_BOOL_in_enabled1280); if (failed) return retval;
+            match(input,BOOL,FOLLOW_BOOL_in_enabled1284); if (failed) return retval;
             if ( backtracking==0 ) {
             BOOL90_tree = (Object)adaptor.create(BOOL90);
             adaptor.addChild(root_0, BOOL90_tree);
@@ -3634,7 +3635,7 @@
     };
 
     // $ANTLR start salience
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:432:1: salience : salience_key ( INT | paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:433: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);
@@ -3650,17 +3651,17 @@
         Object INT92_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:433:2: ( salience_key ( INT | paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:433:4: salience_key ( INT | paren_chunk )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:2: ( salience_key ( INT | paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:4: salience_key ( INT | paren_chunk )
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_salience_key_in_salience1292);
+            pushFollow(FOLLOW_salience_key_in_salience1296);
             salience_key91=salience_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(salience_key91.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:3: ( INT | paren_chunk )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:435:3: ( INT | paren_chunk )
             int alt32=2;
             int LA32_0 = input.LA(1);
 
@@ -3673,16 +3674,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("434:3: ( INT | paren_chunk )", 32, 0, input);
+                    new NoViableAltException("435:3: ( INT | paren_chunk )", 32, 0, input);
 
                 throw nvae;
             }
             switch (alt32) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:5: INT
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:435:5: INT
                     {
                     INT92=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_salience1299); if (failed) return retval;
+                    match(input,INT,FOLLOW_INT_in_salience1303); if (failed) return retval;
                     if ( backtracking==0 ) {
                     INT92_tree = (Object)adaptor.create(INT92);
                     adaptor.addChild(root_0, INT92_tree);
@@ -3691,9 +3692,9 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:435:5: paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:436:5: paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_salience1308);
+                    pushFollow(FOLLOW_paren_chunk_in_salience1312);
                     paren_chunk93=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -3730,7 +3731,7 @@
     };
 
     // $ANTLR start no_loop
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:439:1: no_loop : no_loop_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440: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);
@@ -3744,17 +3745,17 @@
         Object BOOL95_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:2: ( no_loop_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:4: no_loop_key ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:2: ( no_loop_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:4: no_loop_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_no_loop_key_in_no_loop1324);
+            pushFollow(FOLLOW_no_loop_key_in_no_loop1328);
             no_loop_key94=no_loop_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(no_loop_key94.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:17: ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:17: ( BOOL )?
             int alt33=2;
             int LA33_0 = input.LA(1);
 
@@ -3763,10 +3764,10 @@
             }
             switch (alt33) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:17: BOOL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:17: BOOL
                     {
                     BOOL95=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1327); if (failed) return retval;
+                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1331); if (failed) return retval;
                     if ( backtracking==0 ) {
                     BOOL95_tree = (Object)adaptor.create(BOOL95);
                     adaptor.addChild(root_0, BOOL95_tree);
@@ -3803,7 +3804,7 @@
     };
 
     // $ANTLR start auto_focus
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:443:1: auto_focus : auto_focus_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444: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);
@@ -3817,17 +3818,17 @@
         Object BOOL97_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:2: ( auto_focus_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:4: auto_focus_key ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:2: ( auto_focus_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:4: auto_focus_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1339);
+            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1343);
             auto_focus_key96=auto_focus_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(auto_focus_key96.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:20: ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:20: ( BOOL )?
             int alt34=2;
             int LA34_0 = input.LA(1);
 
@@ -3836,10 +3837,10 @@
             }
             switch (alt34) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:20: BOOL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:20: BOOL
                     {
                     BOOL97=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1342); if (failed) return retval;
+                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1346); if (failed) return retval;
                     if ( backtracking==0 ) {
                     BOOL97_tree = (Object)adaptor.create(BOOL97);
                     adaptor.addChild(root_0, BOOL97_tree);
@@ -3876,7 +3877,7 @@
     };
 
     // $ANTLR start activation_group
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:447:1: activation_group : activation_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:448: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);
@@ -3890,18 +3891,18 @@
         Object STRING99_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:448:2: ( activation_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:448:4: activation_group_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:449:2: ( activation_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:449:4: activation_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_activation_group_key_in_activation_group1356);
+            pushFollow(FOLLOW_activation_group_key_in_activation_group1360);
             activation_group_key98=activation_group_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(activation_group_key98.getTree(), root_0);
             STRING99=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_activation_group1359); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_activation_group1363); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING99_tree = (Object)adaptor.create(STRING99);
             adaptor.addChild(root_0, STRING99_tree);
@@ -3932,7 +3933,7 @@
     };
 
     // $ANTLR start ruleflow_group
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:1: ruleflow_group : ruleflow_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452: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);
@@ -3946,18 +3947,18 @@
         Object STRING101_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:2: ( ruleflow_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:4: ruleflow_group_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:453:2: ( ruleflow_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:453:4: ruleflow_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1370);
+            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1374);
             ruleflow_group_key100=ruleflow_group_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(ruleflow_group_key100.getTree(), root_0);
             STRING101=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1373); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1377); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING101_tree = (Object)adaptor.create(STRING101);
             adaptor.addChild(root_0, STRING101_tree);
@@ -3988,7 +3989,7 @@
     };
 
     // $ANTLR start agenda_group
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:455:1: agenda_group : agenda_group_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456: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);
@@ -4002,18 +4003,18 @@
         Object STRING103_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:2: ( agenda_group_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:4: agenda_group_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:2: ( agenda_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:457:4: agenda_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1384);
+            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1388);
             agenda_group_key102=agenda_group_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(agenda_group_key102.getTree(), root_0);
             STRING103=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_agenda_group1387); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_agenda_group1391); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING103_tree = (Object)adaptor.create(STRING103);
             adaptor.addChild(root_0, STRING103_tree);
@@ -4044,7 +4045,7 @@
     };
 
     // $ANTLR start duration
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:459:1: duration : duration_key INT ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:1: duration : duration_key INT ;
     public final duration_return duration() throws RecognitionException {
         duration_return retval = new duration_return();
         retval.start = input.LT(1);
@@ -4058,18 +4059,18 @@
         Object INT105_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:2: ( duration_key INT )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:4: duration_key INT
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:2: ( duration_key INT )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:461:4: duration_key INT
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_duration_key_in_duration1398);
+            pushFollow(FOLLOW_duration_key_in_duration1402);
             duration_key104=duration_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(duration_key104.getTree(), root_0);
             INT105=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_duration1401); if (failed) return retval;
+            match(input,INT,FOLLOW_INT_in_duration1405); if (failed) return retval;
             if ( backtracking==0 ) {
             INT105_tree = (Object)adaptor.create(INT105);
             adaptor.addChild(root_0, INT105_tree);
@@ -4100,7 +4101,7 @@
     };
 
     // $ANTLR start dialect
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:463:1: dialect : dialect_key STRING ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:1: dialect : dialect_key STRING ;
     public final dialect_return dialect() throws RecognitionException {
         dialect_return retval = new dialect_return();
         retval.start = input.LT(1);
@@ -4114,18 +4115,18 @@
         Object STRING107_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:2: ( dialect_key STRING )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:4: dialect_key STRING
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:465:2: ( dialect_key STRING )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:465:4: dialect_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_dialect_key_in_dialect1415);
+            pushFollow(FOLLOW_dialect_key_in_dialect1419);
             dialect_key106=dialect_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(dialect_key106.getTree(), root_0);
             STRING107=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_dialect1418); if (failed) return retval;
+            match(input,STRING,FOLLOW_STRING_in_dialect1422); if (failed) return retval;
             if ( backtracking==0 ) {
             STRING107_tree = (Object)adaptor.create(STRING107);
             adaptor.addChild(root_0, STRING107_tree);
@@ -4156,7 +4157,7 @@
     };
 
     // $ANTLR start lock_on_active
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:467:1: lock_on_active : lock_on_active_key ( BOOL )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468: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);
@@ -4170,17 +4171,17 @@
         Object BOOL109_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:2: ( lock_on_active_key ( BOOL )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:4: lock_on_active_key ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:2: ( lock_on_active_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:4: lock_on_active_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active1436);
+            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active1440);
             lock_on_active_key108=lock_on_active_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(lock_on_active_key108.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:24: ( BOOL )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:24: ( BOOL )?
             int alt35=2;
             int LA35_0 = input.LA(1);
 
@@ -4189,10 +4190,10 @@
             }
             switch (alt35) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:24: BOOL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:24: BOOL
                     {
                     BOOL109=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1439); if (failed) return retval;
+                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1443); if (failed) return retval;
                     if ( backtracking==0 ) {
                     BOOL109_tree = (Object)adaptor.create(BOOL109);
                     adaptor.addChild(root_0, BOOL109_tree);
@@ -4229,7 +4230,7 @@
     };
 
     // $ANTLR start normal_lhs_block
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:471:1: normal_lhs_block : ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472: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);
@@ -4241,10 +4242,10 @@
 
         RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:4: ( lhs )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:4: ( lhs )*
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:4: ( lhs )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:4: ( lhs )*
             loop36:
             do {
                 int alt36=2;
@@ -4257,9 +4258,9 @@
 
                 switch (alt36) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:4: lhs
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:4: lhs
             	    {
-            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1451);
+            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1455);
             	    lhs110=lhs();
             	    _fsp--;
             	    if (failed) return retval;
@@ -4285,14 +4286,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 473:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
+            // 474:2: -> ^( VT_AND_IMPLICIT ( lhs )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:5: ^( VT_AND_IMPLICIT ( lhs )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:474: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:473:23: ( lhs )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:474:23: ( lhs )*
                 while ( stream_lhs.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs.next());
 
@@ -4331,7 +4332,7 @@
     };
 
     // $ANTLR start lhs
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:1: lhs : lhs_or ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:477:1: lhs : lhs_or ;
     public final lhs_return lhs() throws RecognitionException {
         lhs_return retval = new lhs_return();
         retval.start = input.LT(1);
@@ -4343,12 +4344,12 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:5: ( lhs_or )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:476:7: lhs_or
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:477:5: ( lhs_or )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:477:7: lhs_or
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_or_in_lhs1472);
+            pushFollow(FOLLOW_lhs_or_in_lhs1476);
             lhs_or111=lhs_or();
             _fsp--;
             if (failed) return retval;
@@ -4379,7 +4380,7 @@
     };
 
     // $ANTLR start lhs_or
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:480: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);
@@ -4412,7 +4413,7 @@
         	Token orToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483: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 alt40=2;
             int LA40_0 = input.LA(1);
 
@@ -4444,7 +4445,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("479: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 ) )* );", 40, 4, input);
+                                new NoViableAltException("480: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 ) )* );", 40, 4, input);
 
                             throw nvae;
                         }
@@ -4463,7 +4464,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("479: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 ) )* );", 40, 5, input);
+                                new NoViableAltException("480: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 ) )* );", 40, 5, input);
 
                             throw nvae;
                         }
@@ -4472,7 +4473,7 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("479: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 ) )* );", 40, 3, input);
+                            new NoViableAltException("480: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 ) )* );", 40, 3, input);
 
                         throw nvae;
                     }
@@ -4481,7 +4482,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("479: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 ) )* );", 40, 1, input);
+                        new NoViableAltException("480: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 ) )* );", 40, 1, input);
 
                     throw nvae;
                 }
@@ -4492,24 +4493,24 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("479: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 ) )* );", 40, 0, input);
+                    new NoViableAltException("480: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 ) )* );", 40, 0, input);
 
                 throw nvae;
             }
             switch (alt40) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
                     {
                     LEFT_PAREN112=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or1493); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or1497); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN112);
 
-                    pushFollow(FOLLOW_or_key_in_lhs_or1497);
+                    pushFollow(FOLLOW_or_key_in_lhs_or1501);
                     or=or_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_or_key.add(or.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:48: ( lhs_and )+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:48: ( lhs_and )+
                     int cnt37=0;
                     loop37:
                     do {
@@ -4523,9 +4524,9 @@
 
                         switch (alt37) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:48: lhs_and
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:48: lhs_and
                     	    {
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1499);
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1503);
                     	    lhs_and113=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
@@ -4545,7 +4546,7 @@
                     } while (true);
 
                     RIGHT_PAREN114=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or1502); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or1506); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN114);
 
 
@@ -4560,9 +4561,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 483:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                    // 484:3: -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:6: ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484: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);
@@ -4587,12 +4588,12 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:4: ( lhs_and -> lhs_and )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:484:5: lhs_and
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:4: ( lhs_and -> lhs_and )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:5: lhs_and
                     {
-                    pushFollow(FOLLOW_lhs_and_in_lhs_or1523);
+                    pushFollow(FOLLOW_lhs_and_in_lhs_or1527);
                     lhs_and115=lhs_and();
                     _fsp--;
                     if (failed) return retval;
@@ -4609,7 +4610,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 484:13: -> lhs_and
+                    // 485:13: -> lhs_and
                     {
                         adaptor.addChild(root_0, stream_lhs_and.next());
 
@@ -4619,7 +4620,7 @@
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
                     loop39:
                     do {
                         int alt39=2;
@@ -4647,9 +4648,9 @@
 
                         switch (alt39) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
                     	    {
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:28: (value= or_key | pipe= DOUBLE_PIPE )
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:28: (value= or_key | pipe= DOUBLE_PIPE )
                     	    int alt38=2;
                     	    int LA38_0 = input.LA(1);
 
@@ -4662,15 +4663,15 @@
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("485:28: (value= or_key | pipe= DOUBLE_PIPE )", 38, 0, input);
+                    	            new NoViableAltException("486:28: (value= or_key | pipe= DOUBLE_PIPE )", 38, 0, input);
 
                     	        throw nvae;
                     	    }
                     	    switch (alt38) {
                     	        case 1 :
-                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:29: value= or_key
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:29: value= or_key
                     	            {
-                    	            pushFollow(FOLLOW_or_key_in_lhs_or1545);
+                    	            pushFollow(FOLLOW_or_key_in_lhs_or1549);
                     	            value=or_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -4682,10 +4683,10 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:69: pipe= DOUBLE_PIPE
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:69: pipe= DOUBLE_PIPE
                     	            {
                     	            pipe=(Token)input.LT(1);
-                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1552); if (failed) return retval;
+                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1556); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
                     	            if ( backtracking==0 ) {
@@ -4697,7 +4698,7 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1557);
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1561);
                     	    lhs_and116=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
@@ -4714,9 +4715,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 486:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	    // 487:3: -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
                     	    {
-                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:6: ^( VT_OR_INFIX[orToken] $lhs_or lhs_and )
+                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487: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);
@@ -4767,7 +4768,7 @@
     };
 
     // $ANTLR start lhs_and
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:489: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:490: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);
@@ -4800,7 +4801,7 @@
         	Token andToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493: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 alt44=2;
             int LA44_0 = input.LA(1);
 
@@ -4822,7 +4823,7 @@
                     case LEFT_PAREN:
                         {
                         switch ( input.LA(4) ) {
-                        case LEFT_PAREN:
+                        case ID:
                             {
                             int LA44_6 = input.LA(5);
 
@@ -4835,13 +4836,13 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("489: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 ) )* );", 44, 6, input);
+                                    new NoViableAltException("490: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 ) )* );", 44, 6, input);
 
                                 throw nvae;
                             }
                             }
                             break;
-                        case ID:
+                        case LEFT_PAREN:
                             {
                             int LA44_7 = input.LA(5);
 
@@ -4854,7 +4855,7 @@
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("489: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 ) )* );", 44, 7, input);
+                                    new NoViableAltException("490: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 ) )* );", 44, 7, input);
 
                                 throw nvae;
                             }
@@ -4893,6 +4894,7 @@
                         case VT_ACCESSOR_PATH:
                         case VT_ACCESSOR_ELEMENT:
                         case VT_DATA_TYPE:
+                        case VT_PATTERN_TYPE:
                         case VT_PACKAGE_ID:
                         case VT_IMPORT_ID:
                         case VT_GLOBAL_ID:
@@ -4983,7 +4985,7 @@
                         default:
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("489: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 ) )* );", 44, 4, input);
+                                new NoViableAltException("490: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 ) )* );", 44, 4, input);
 
                             throw nvae;
                         }
@@ -5003,7 +5005,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("489: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 ) )* );", 44, 5, input);
+                                new NoViableAltException("490: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 ) )* );", 44, 5, input);
 
                             throw nvae;
                         }
@@ -5012,7 +5014,7 @@
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("489: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 ) )* );", 44, 3, input);
+                            new NoViableAltException("490: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 ) )* );", 44, 3, input);
 
                         throw nvae;
                     }
@@ -5021,7 +5023,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("489: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 ) )* );", 44, 1, input);
+                        new NoViableAltException("490: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 ) )* );", 44, 1, input);
 
                     throw nvae;
                 }
@@ -5032,24 +5034,24 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("489: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 ) )* );", 44, 0, input);
+                    new NoViableAltException("490: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 ) )* );", 44, 0, input);
 
                 throw nvae;
             }
             switch (alt44) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
                     {
                     LEFT_PAREN117=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and1595); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and1599); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN117);
 
-                    pushFollow(FOLLOW_and_key_in_lhs_and1599);
+                    pushFollow(FOLLOW_and_key_in_lhs_and1603);
                     and=and_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_and_key.add(and.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:51: ( lhs_unary )+
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:51: ( lhs_unary )+
                     int cnt41=0;
                     loop41:
                     do {
@@ -5063,9 +5065,9 @@
 
                         switch (alt41) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:51: lhs_unary
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:51: lhs_unary
                     	    {
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1601);
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1605);
                     	    lhs_unary118=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
@@ -5085,7 +5087,7 @@
                     } while (true);
 
                     RIGHT_PAREN119=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and1604); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and1608); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN119);
 
 
@@ -5100,9 +5102,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 493:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                    // 494:3: -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:6: ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494: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);
@@ -5127,12 +5129,12 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:4: ( lhs_unary -> lhs_unary )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:5: lhs_unary
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:4: ( lhs_unary -> lhs_unary )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:5: lhs_unary
                     {
-                    pushFollow(FOLLOW_lhs_unary_in_lhs_and1625);
+                    pushFollow(FOLLOW_lhs_unary_in_lhs_and1629);
                     lhs_unary120=lhs_unary();
                     _fsp--;
                     if (failed) return retval;
@@ -5149,7 +5151,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 494:15: -> lhs_unary
+                    // 495:15: -> lhs_unary
                     {
                         adaptor.addChild(root_0, stream_lhs_unary.next());
 
@@ -5159,7 +5161,7 @@
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
                     loop43:
                     do {
                         int alt43=2;
@@ -5187,9 +5189,9 @@
 
                         switch (alt43) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
                     	    {
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:30: (value= and_key | amper= DOUBLE_AMPER )
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:30: (value= and_key | amper= DOUBLE_AMPER )
                     	    int alt42=2;
                     	    int LA42_0 = input.LA(1);
 
@@ -5202,15 +5204,15 @@
                     	    else {
                     	        if (backtracking>0) {failed=true; return retval;}
                     	        NoViableAltException nvae =
-                    	            new NoViableAltException("495:30: (value= and_key | amper= DOUBLE_AMPER )", 42, 0, input);
+                    	            new NoViableAltException("496:30: (value= and_key | amper= DOUBLE_AMPER )", 42, 0, input);
 
                     	        throw nvae;
                     	    }
                     	    switch (alt42) {
                     	        case 1 :
-                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:31: value= and_key
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:31: value= and_key
                     	            {
-                    	            pushFollow(FOLLOW_and_key_in_lhs_and1647);
+                    	            pushFollow(FOLLOW_and_key_in_lhs_and1651);
                     	            value=and_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -5222,10 +5224,10 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:73: amper= DOUBLE_AMPER
+                    	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:73: amper= DOUBLE_AMPER
                     	            {
                     	            amper=(Token)input.LT(1);
-                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and1654); if (failed) return retval;
+                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and1658); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_AMPER.add(amper);
 
                     	            if ( backtracking==0 ) {
@@ -5237,7 +5239,7 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1659);
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1663);
                     	    lhs_unary121=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
@@ -5254,9 +5256,9 @@
                     	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     	    root_0 = (Object)adaptor.nil();
-                    	    // 496:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	    // 497:3: -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
                     	    {
-                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:6: ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary )
+                    	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:497: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);
@@ -5307,7 +5309,7 @@
     };
 
     // $ANTLR start lhs_unary
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:499: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:500: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);
@@ -5335,12 +5337,12 @@
         Object SEMICOLON130_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:2: ( ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:2: ( ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
             int alt45=6;
             int LA45_0 = input.LA(1);
 
@@ -5365,7 +5367,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 1, input);
+                        new NoViableAltException("502:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 1, input);
 
                     throw nvae;
                 }
@@ -5376,15 +5378,15 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("501:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 0, input);
+                    new NoViableAltException("502:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 45, 0, input);
 
                 throw nvae;
             }
             switch (alt45) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:501:6: lhs_exist
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:6: lhs_exist
                     {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary1697);
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary1701);
                     lhs_exist122=lhs_exist();
                     _fsp--;
                     if (failed) return retval;
@@ -5393,9 +5395,9 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:5: lhs_not
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:5: lhs_not
                     {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary1703);
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary1707);
                     lhs_not123=lhs_not();
                     _fsp--;
                     if (failed) return retval;
@@ -5404,9 +5406,9 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:5: lhs_eval
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:5: lhs_eval
                     {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary1709);
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary1713);
                     lhs_eval124=lhs_eval();
                     _fsp--;
                     if (failed) return retval;
@@ -5415,9 +5417,9 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:504:5: lhs_forall
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:505:5: lhs_forall
                     {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary1715);
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary1719);
                     lhs_forall125=lhs_forall();
                     _fsp--;
                     if (failed) return retval;
@@ -5426,17 +5428,17 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:505:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
                     LEFT_PAREN126=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary1721); if (failed) return retval;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary1724);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary1725); if (failed) return retval;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary1728);
                     lhs_or127=lhs_or();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or127.getTree());
                     RIGHT_PAREN128=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary1726); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary1730); if (failed) return retval;
                     if ( backtracking==0 ) {
                     RIGHT_PAREN128_tree = (Object)adaptor.create(RIGHT_PAREN128);
                     adaptor.addChild(root_0, RIGHT_PAREN128_tree);
@@ -5445,9 +5447,9 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506:5: pattern_source
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:507:5: pattern_source
                     {
-                    pushFollow(FOLLOW_pattern_source_in_lhs_unary1732);
+                    pushFollow(FOLLOW_pattern_source_in_lhs_unary1736);
                     pattern_source129=pattern_source();
                     _fsp--;
                     if (failed) return retval;
@@ -5458,7 +5460,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:3: ( ( SEMICOLON )=> SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:3: ( ( SEMICOLON )=> SEMICOLON )?
             int alt46=2;
             int LA46_0 = input.LA(1);
 
@@ -5471,10 +5473,10 @@
             }
             switch (alt46) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:4: ( SEMICOLON )=> SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:4: ( SEMICOLON )=> SEMICOLON
                     {
                     SEMICOLON130=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary1746); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary1750); if (failed) return retval;
 
                     }
                     break;
@@ -5507,7 +5509,7 @@
     };
 
     // $ANTLR start lhs_exist
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:511: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:512: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);
@@ -5533,22 +5535,22 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:512: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:512:4: exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513: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_exist1760);
+            pushFollow(FOLLOW_exists_key_in_lhs_exist1764);
             exists_key131=exists_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_exists_key.add(exists_key131.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             int alt47=3;
             alt47 = dfa47.predict(input);
             switch (alt47) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1784);
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1788);
                     lhs_or132=lhs_or();
                     _fsp--;
                     if (failed) return retval;
@@ -5557,28 +5559,28 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:515:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
                     LEFT_PAREN133=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist1791); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist1795); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN133);
 
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1793);
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1797);
                     lhs_or134=lhs_or();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_lhs_or.add(lhs_or134.getTree());
                     RIGHT_PAREN135=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist1795); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist1799); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN135);
 
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:515:12: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:516:12: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist1808);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist1812);
                     lhs_pattern136=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
@@ -5601,26 +5603,26 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 517:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            // 518:10: -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:13: ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:26: ( lhs_or )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:34: ( lhs_pattern )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:47: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518:47: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -5659,7 +5661,7 @@
     };
 
     // $ANTLR start lhs_not
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521: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);
@@ -5685,22 +5687,22 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:11: not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521: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_not1854);
+            pushFollow(FOLLOW_not_key_in_lhs_not1858);
             not_key137=not_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_not_key.add(not_key137.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             int alt48=3;
             alt48 = dfa48.predict(input);
             switch (alt48) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not1871);
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not1875);
                     lhs_or138=lhs_or();
                     _fsp--;
                     if (failed) return retval;
@@ -5709,28 +5711,28 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:5: LEFT_PAREN lhs_or RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:523:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
                     LEFT_PAREN139=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not1878); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not1882); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN139);
 
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not1880);
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not1884);
                     lhs_or140=lhs_or();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_lhs_or.add(lhs_or140.getTree());
                     RIGHT_PAREN141=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not1882); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not1886); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN141);
 
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:523:6: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:6: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not1890);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not1894);
                     lhs_pattern142=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
@@ -5753,26 +5755,26 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 524:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+            // 525:10: -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:13: ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:525: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:23: ( lhs_or )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:525: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:31: ( lhs_pattern )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:525: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:44: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:525:44: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -5811,7 +5813,7 @@
     };
 
     // $ANTLR start lhs_eval
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:1: lhs_eval : ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528: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);
@@ -5826,15 +5828,15 @@
         RewriteRuleSubtreeStream stream_eval_key=new RewriteRuleSubtreeStream(adaptor,"rule eval_key");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:2: (ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528:4: ev= eval_key pc= paren_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:2: (ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:4: ev= eval_key pc= paren_chunk
             {
-            pushFollow(FOLLOW_eval_key_in_lhs_eval1929);
+            pushFollow(FOLLOW_eval_key_in_lhs_eval1933);
             ev=eval_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_eval_key.add(ev.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval1933);
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval1937);
             pc=paren_chunk();
             _fsp--;
             if (failed) return retval;
@@ -5855,9 +5857,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 531:3: -> ^( eval_key paren_chunk )
+            // 532:3: -> ^( eval_key paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:531:6: ^( eval_key paren_chunk )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:532:6: ^( eval_key paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
@@ -5896,7 +5898,7 @@
     };
 
     // $ANTLR start lhs_forall
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535: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);
@@ -5917,19 +5919,19 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
             {
-            pushFollow(FOLLOW_forall_key_in_lhs_forall1957);
+            pushFollow(FOLLOW_forall_key_in_lhs_forall1961);
             forall_key143=forall_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_forall_key.add(forall_key143.getTree());
             LEFT_PAREN144=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall1959); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall1963); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN144);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:26: ( lhs_pattern )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:26: ( lhs_pattern )+
             int cnt49=0;
             loop49:
             do {
@@ -5943,9 +5945,9 @@
 
                 switch (alt49) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:26: lhs_pattern
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:26: lhs_pattern
             	    {
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall1961);
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall1965);
             	    lhs_pattern145=lhs_pattern();
             	    _fsp--;
             	    if (failed) return retval;
@@ -5965,7 +5967,7 @@
             } while (true);
 
             RIGHT_PAREN146=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall1964); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall1968); if (failed) return retval;
             if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN146);
 
 
@@ -5980,9 +5982,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 536:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+            // 537:3: -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:6: ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:537:6: ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_forall_key.nextNode(), root_1);
@@ -6029,7 +6031,7 @@
     };
 
     // $ANTLR start pattern_source
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:539:1: pattern_source options {k=3; } : lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:540:1: pattern_source options {k=3; } : lhs_pattern ( 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);
@@ -6051,17 +6053,17 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:541:2: ( lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:541:4: lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:2: ( lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:4: lhs_pattern ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_pattern_in_pattern_source1996);
+            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2000);
             lhs_pattern147=lhs_pattern();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern147.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:542:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
             int alt51=2;
             int LA51_0 = input.LA(1);
 
@@ -6074,10 +6076,24 @@
                     if ( (LA51_3==SEMICOLON||LA51_3==END||(LA51_3>=COMMA && LA51_3<=RIGHT_PAREN)||(LA51_3>=DOUBLE_PIPE && LA51_3<=DOUBLE_AMPER)||LA51_3==THEN||LA51_3==MISC) && ((validateIdentifierKey("from")))) {
                         alt51=1;
                     }
-                    else if ( (LA51_3==DOT) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                    else if ( (LA51_3==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
                         int LA51_6 = input.LA(4);
 
-                        if ( (LA51_6==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        if ( ((validateIdentifierKey("from"))) ) {
+                            alt51=1;
+                        }
+                    }
+                    else if ( (LA51_3==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA51_7 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("from"))) ) {
+                            alt51=1;
+                        }
+                    }
+                    else if ( (LA51_3==DOT) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
+                        int LA51_8 = input.LA(4);
+
+                        if ( (LA51_8==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
                             int LA51_10 = input.LA(5);
 
                             if ( (LA51_10==LEFT_SQUARE) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
@@ -6124,32 +6140,18 @@
                             }
                         }
                     }
-                    else if ( (LA51_3==LEFT_PAREN) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                        int LA51_8 = input.LA(4);
-
-                        if ( ((validateIdentifierKey("from"))) ) {
-                            alt51=1;
-                        }
-                    }
-                    else if ( (LA51_3==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("or"))||(validateIdentifierKey("exists"))||(validateIdentifierKey("from"))||(validateIdentifierKey("and"))))) {
-                        int LA51_9 = input.LA(4);
-
-                        if ( ((validateIdentifierKey("from"))) ) {
-                            alt51=1;
-                        }
-                    }
                 }
             }
             switch (alt51) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
                     {
-                    pushFollow(FOLLOW_from_key_in_pattern_source2005);
+                    pushFollow(FOLLOW_from_key_in_pattern_source2009);
                     from_key148=from_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key148.getTree(), root_0);
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
                     int alt50=4;
                     int LA50_0 = input.LA(1);
 
@@ -6161,42 +6163,42 @@
                         }
                         else if ( (LA50_1==LEFT_PAREN) ) {
                             switch ( input.LA(3) ) {
-                            case ID:
+                            case LEFT_PAREN:
                                 {
                                 int LA50_5 = input.LA(4);
 
                                 if ( ((validateIdentifierKey("accumulate"))) ) {
                                     alt50=1;
                                 }
-                                else if ( ((validateIdentifierKey("collect"))) ) {
-                                    alt50=2;
-                                }
                                 else if ( (true) ) {
                                     alt50=4;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return retval;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 5, input);
+                                        new NoViableAltException("545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 5, input);
 
                                     throw nvae;
                                 }
                                 }
                                 break;
-                            case LEFT_PAREN:
+                            case ID:
                                 {
                                 int LA50_6 = input.LA(4);
 
                                 if ( ((validateIdentifierKey("accumulate"))) ) {
                                     alt50=1;
                                 }
+                                else if ( ((validateIdentifierKey("collect"))) ) {
+                                    alt50=2;
+                                }
                                 else if ( (true) ) {
                                     alt50=4;
                                 }
                                 else {
                                     if (backtracking>0) {failed=true; return retval;}
                                     NoViableAltException nvae =
-                                        new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 6, input);
+                                        new NoViableAltException("545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 6, input);
 
                                     throw nvae;
                                 }
@@ -6235,6 +6237,7 @@
                             case VT_ACCESSOR_PATH:
                             case VT_ACCESSOR_ELEMENT:
                             case VT_DATA_TYPE:
+                            case VT_PATTERN_TYPE:
                             case VT_PACKAGE_ID:
                             case VT_IMPORT_ID:
                             case VT_GLOBAL_ID:
@@ -6325,7 +6328,7 @@
                             default:
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 3, input);
+                                    new NoViableAltException("545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 3, input);
 
                                 throw nvae;
                             }
@@ -6337,7 +6340,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 1, input);
+                                new NoViableAltException("545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 1, input);
 
                             throw nvae;
                         }
@@ -6345,15 +6348,15 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("544:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 0, input);
+                            new NoViableAltException("545:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 50, 0, input);
 
                         throw nvae;
                     }
                     switch (alt50) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:544:14: accumulate_statement
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:545:14: accumulate_statement
                             {
-                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2021);
+                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2025);
                             accumulate_statement149=accumulate_statement();
                             _fsp--;
                             if (failed) return retval;
@@ -6362,9 +6365,9 @@
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:545:15: collect_statement
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546:15: collect_statement
                             {
-                            pushFollow(FOLLOW_collect_statement_in_pattern_source2037);
+                            pushFollow(FOLLOW_collect_statement_in_pattern_source2041);
                             collect_statement150=collect_statement();
                             _fsp--;
                             if (failed) return retval;
@@ -6373,9 +6376,9 @@
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546:15: entrypoint_statement
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:547:15: entrypoint_statement
                             {
-                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2054);
+                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2058);
                             entrypoint_statement151=entrypoint_statement();
                             _fsp--;
                             if (failed) return retval;
@@ -6384,9 +6387,9 @@
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:547:15: from_source
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:15: from_source
                             {
-                            pushFollow(FOLLOW_from_source_in_pattern_source2070);
+                            pushFollow(FOLLOW_from_source_in_pattern_source2074);
                             from_source152=from_source();
                             _fsp--;
                             if (failed) return retval;
@@ -6429,7 +6432,7 @@
     };
 
     // $ANTLR start accumulate_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:553: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);
@@ -6459,24 +6462,24 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:553: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:553:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
             {
-            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2098);
+            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2102);
             accumulate_key153=accumulate_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key153.getTree());
             LEFT_PAREN154=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2102); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2106); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN154);
 
-            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2104);
+            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2108);
             lhs_or155=lhs_or();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_lhs_or.add(lhs_or155.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:21: ( COMMA )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:21: ( COMMA )?
             int alt52=2;
             int LA52_0 = input.LA(1);
 
@@ -6485,10 +6488,10 @@
             }
             switch (alt52) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:21: COMMA
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:21: COMMA
                     {
                     COMMA156=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2106); if (failed) return retval;
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2110); if (failed) return retval;
                     if ( backtracking==0 ) stream_COMMA.add(COMMA156);
 
 
@@ -6497,14 +6500,14 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:3: ( accumulate_init_clause | accumulate_id_clause )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:3: ( accumulate_init_clause | accumulate_id_clause )
             int alt53=2;
             alt53 = dfa53.predict(input);
             switch (alt53) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:5: accumulate_init_clause
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:5: accumulate_init_clause
                     {
-                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2114);
+                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2118);
                     accumulate_init_clause157=accumulate_init_clause();
                     _fsp--;
                     if (failed) return retval;
@@ -6513,9 +6516,9 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:5: accumulate_id_clause
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:557:5: accumulate_id_clause
                     {
-                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2120);
+                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2124);
                     accumulate_id_clause158=accumulate_id_clause();
                     _fsp--;
                     if (failed) return retval;
@@ -6527,7 +6530,7 @@
             }
 
             RIGHT_PAREN159=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2128); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2132); if (failed) return retval;
             if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN159);
 
 
@@ -6542,21 +6545,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 559:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+            // 560:3: -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:6: ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:30: ( accumulate_init_clause )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:54: ( accumulate_id_clause )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:560:54: ( accumulate_id_clause )?
                 if ( stream_accumulate_id_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_id_clause.next());
 
@@ -6596,7 +6599,7 @@
     };
 
     // $ANTLR start accumulate_init_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563: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);
@@ -6633,20 +6636,20 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564: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_clause2157);
+            pushFollow(FOLLOW_init_key_in_accumulate_init_clause2161);
             init_key160=init_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_init_key.add(init_key160.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2162);
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2166);
             pc1=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc1.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:18: ( COMMA )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:18: ( COMMA )?
             int alt54=2;
             int LA54_0 = input.LA(1);
 
@@ -6655,10 +6658,10 @@
             }
             switch (alt54) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:564:18: COMMA
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:18: COMMA
                     {
                     COMMA161=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2164); if (failed) return retval;
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2168); if (failed) return retval;
                     if ( backtracking==0 ) stream_COMMA.add(COMMA161);
 
 
@@ -6667,17 +6670,17 @@
 
             }
 
-            pushFollow(FOLLOW_action_key_in_accumulate_init_clause2168);
+            pushFollow(FOLLOW_action_key_in_accumulate_init_clause2172);
             action_key162=action_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_action_key.add(action_key162.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2172);
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2176);
             pc2=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc2.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:29: ( COMMA )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:29: ( COMMA )?
             int alt55=2;
             int LA55_0 = input.LA(1);
 
@@ -6686,10 +6689,10 @@
             }
             switch (alt55) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:565:29: COMMA
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:29: COMMA
                     {
                     COMMA163=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2174); if (failed) return retval;
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2178); if (failed) return retval;
                     if ( backtracking==0 ) stream_COMMA.add(COMMA163);
 
 
@@ -6698,24 +6701,24 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
             int alt57=2;
             alt57 = dfa57.predict(input);
             switch (alt57) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:4: reverse_key pc3= paren_chunk ( COMMA )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:4: reverse_key pc3= paren_chunk ( COMMA )?
                     {
-                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2180);
+                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2184);
                     reverse_key164=reverse_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_reverse_key.add(reverse_key164.getTree());
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2184);
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2188);
                     pc3=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_paren_chunk.add(pc3.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:32: ( COMMA )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:32: ( COMMA )?
                     int alt56=2;
                     int LA56_0 = input.LA(1);
 
@@ -6724,10 +6727,10 @@
                     }
                     switch (alt56) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:32: COMMA
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:567:32: COMMA
                             {
                             COMMA165=(Token)input.LT(1);
-                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2186); if (failed) return retval;
+                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2190); if (failed) return retval;
                             if ( backtracking==0 ) stream_COMMA.add(COMMA165);
 
 
@@ -6742,12 +6745,12 @@
 
             }
 
-            pushFollow(FOLLOW_result_key_in_accumulate_init_clause2192);
+            pushFollow(FOLLOW_result_key_in_accumulate_init_clause2196);
             result_key166=result_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_result_key.add(result_key166.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2196);
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2200);
             pc4=paren_chunk();
             _fsp--;
             if (failed) return retval;
@@ -6768,14 +6771,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 568:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+            // 569:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:33: ^( init_key $pc1)
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:33: ^( init_key $pc1)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_init_key.nextNode(), root_2);
@@ -6784,7 +6787,7 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:50: ^( action_key $pc2)
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:50: ^( action_key $pc2)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_action_key.nextNode(), root_2);
@@ -6793,9 +6796,9 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:69: ( ^( reverse_key $pc3) )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:69: ( ^( reverse_key $pc3) )?
                 if ( stream_pc3.hasNext()||stream_reverse_key.hasNext() ) {
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:69: ^( reverse_key $pc3)
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:69: ^( reverse_key $pc3)
                     {
                     Object root_2 = (Object)adaptor.nil();
                     root_2 = (Object)adaptor.becomeRoot(stream_reverse_key.nextNode(), root_2);
@@ -6808,7 +6811,7 @@
                 }
                 stream_pc3.reset();
                 stream_reverse_key.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:568:90: ^( result_key $pc4)
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:90: ^( result_key $pc4)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_result_key.nextNode(), root_2);
@@ -6850,7 +6853,7 @@
     };
 
     // $ANTLR start accumulate_id_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:1: accumulate_id_clause : id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572: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);
@@ -6865,14 +6868,14 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:572:4: id= ID text= paren_chunk
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:4: id= ID text= paren_chunk
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_id_clause2245); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause2249); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause2249);
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause2253);
             text=paren_chunk();
             _fsp--;
             if (failed) return retval;
@@ -6889,9 +6892,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 573:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+            // 574:2: -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:573:5: ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:574: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);
@@ -6931,7 +6934,7 @@
     };
 
     // $ANTLR start collect_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:1: collect_statement : collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577: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);
@@ -6952,25 +6955,25 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
             {
-            pushFollow(FOLLOW_collect_key_in_collect_statement2271);
+            pushFollow(FOLLOW_collect_key_in_collect_statement2275);
             collect_key167=collect_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_collect_key.add(collect_key167.getTree());
             LEFT_PAREN168=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2275); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2279); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN168);
 
-            pushFollow(FOLLOW_pattern_source_in_collect_statement2277);
+            pushFollow(FOLLOW_pattern_source_in_collect_statement2281);
             pattern_source169=pattern_source();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_pattern_source.add(pattern_source169.getTree());
             RIGHT_PAREN170=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2279); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2283); if (failed) return retval;
             if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN170);
 
 
@@ -6985,9 +6988,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 579:2: -> ^( collect_key pattern_source RIGHT_PAREN )
+            // 580:2: -> ^( collect_key pattern_source RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:579:5: ^( collect_key pattern_source RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:5: ^( collect_key pattern_source RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_collect_key.nextNode(), root_1);
@@ -7027,7 +7030,7 @@
     };
 
     // $ANTLR start entrypoint_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:582:1: entrypoint_statement : entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583: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);
@@ -7042,15 +7045,15 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:4: entry_point_key entrypoint_id
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:584:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:584:4: entry_point_key entrypoint_id
             {
-            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2301);
+            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2305);
             entry_point_key171=entry_point_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key171.getTree());
-            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement2303);
+            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement2307);
             entrypoint_id172=entrypoint_id();
             _fsp--;
             if (failed) return retval;
@@ -7067,9 +7070,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 584:2: -> ^( entry_point_key entrypoint_id )
+            // 585:2: -> ^( entry_point_key entrypoint_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:584:5: ^( entry_point_key entrypoint_id )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:585:5: ^( entry_point_key entrypoint_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_entry_point_key.nextNode(), root_1);
@@ -7108,7 +7111,7 @@
     };
 
     // $ANTLR start entrypoint_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:587:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588: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);
@@ -7122,7 +7125,7 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
             int alt58=2;
             int LA58_0 = input.LA(1);
 
@@ -7135,16 +7138,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("587:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 58, 0, input);
+                    new NoViableAltException("588:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 58, 0, input);
 
                 throw nvae;
             }
             switch (alt58) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588:5: value= ID
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:5: value= ID
                     {
                     value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_entrypoint_id2326); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_entrypoint_id2330); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(value);
 
 
@@ -7159,7 +7162,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 588:14: -> VT_ENTRYPOINT_ID[$value]
+                    // 589:14: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -7170,10 +7173,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:5: value= STRING
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:590:5: value= STRING
                     {
                     value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id2339); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id2343); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(value);
 
 
@@ -7188,7 +7191,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 589:18: -> VT_ENTRYPOINT_ID[$value]
+                    // 590:18: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -7223,7 +7226,7 @@
     };
 
     // $ANTLR start from_source
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:592:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593: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);
@@ -7241,21 +7244,46 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
             {
             ID173=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_source2355); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_from_source2359); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID173);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
             int alt59=2;
-            alt59 = dfa59.predict(input);
+            int LA59_0 = input.LA(1);
+
+            if ( (LA59_0==LEFT_PAREN) ) {
+                int LA59_1 = input.LA(2);
+
+                if ( (LA59_1==LEFT_PAREN) ) {
+                    int LA59_3 = input.LA(3);
+
+                    if ( (synpred8()) ) {
+                        alt59=1;
+                    }
+                }
+                else if ( (LA59_1==ID) ) {
+                    int LA59_4 = input.LA(3);
+
+                    if ( (synpred8()) ) {
+                        alt59=1;
+                    }
+                }
+                else if ( ((LA59_1>=VT_COMPILATION_UNIT && LA59_1<=SEMICOLON)||(LA59_1>=DOT && LA59_1<=STRING)||LA59_1==COMMA||(LA59_1>=COLON && LA59_1<=MULTI_LINE_COMMENT)) && (synpred8())) {
+                    alt59=1;
+                }
+                else if ( (LA59_1==RIGHT_PAREN) && (synpred8())) {
+                    alt59=1;
+                }
+            }
             switch (alt59) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:5: ( LEFT_PAREN )=>args= paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:5: ( LEFT_PAREN )=>args= paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_from_source2368);
+                    pushFollow(FOLLOW_paren_chunk_in_from_source2372);
                     args=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -7266,7 +7294,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:3: ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:3: ( expression_chain )?
             int alt60=2;
             int LA60_0 = input.LA(1);
 
@@ -7275,9 +7303,9 @@
             }
             switch (alt60) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:3: expression_chain
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:3: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_from_source2375);
+                    pushFollow(FOLLOW_expression_chain_in_from_source2379);
                     expression_chain174=expression_chain();
                     _fsp--;
                     if (failed) return retval;
@@ -7300,21 +7328,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 596:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+            // 597:2: -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:5: ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:25: ( paren_chunk )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:596:38: ( expression_chain )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597:38: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -7353,7 +7381,7 @@
     };
 
     // $ANTLR start expression_chain
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:599: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600: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);
@@ -7377,25 +7405,53 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:601:3: startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:601: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602: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_chain2407); if (failed) return retval;
+            match(input,DOT,FOLLOW_DOT_in_expression_chain2411); if (failed) return retval;
             if ( backtracking==0 ) stream_DOT.add(startToken);
 
             ID175=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_expression_chain2409); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_expression_chain2413); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID175);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:602:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
             int alt61=3;
-            alt61 = dfa61.predict(input);
+            int LA61_0 = input.LA(1);
+
+            if ( (LA61_0==LEFT_SQUARE) && (synpred9())) {
+                alt61=1;
+            }
+            else if ( (LA61_0==LEFT_PAREN) ) {
+                int LA61_2 = input.LA(2);
+
+                if ( (LA61_2==LEFT_PAREN) ) {
+                    int LA61_4 = input.LA(3);
+
+                    if ( (synpred10()) ) {
+                        alt61=2;
+                    }
+                }
+                else if ( (LA61_2==ID) ) {
+                    int LA61_5 = input.LA(3);
+
+                    if ( (synpred10()) ) {
+                        alt61=2;
+                    }
+                }
+                else if ( ((LA61_2>=VT_COMPILATION_UNIT && LA61_2<=SEMICOLON)||(LA61_2>=DOT && LA61_2<=STRING)||LA61_2==COMMA||(LA61_2>=COLON && LA61_2<=MULTI_LINE_COMMENT)) && (synpred10())) {
+                    alt61=2;
+                }
+                else if ( (LA61_2==RIGHT_PAREN) && (synpred10())) {
+                    alt61=2;
+                }
+            }
             switch (alt61) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:6: ( LEFT_SQUARE )=> square_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:6: ( LEFT_SQUARE )=> square_chunk
                     {
-                    pushFollow(FOLLOW_square_chunk_in_expression_chain2429);
+                    pushFollow(FOLLOW_square_chunk_in_expression_chain2433);
                     square_chunk176=square_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -7404,9 +7460,9 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:6: ( LEFT_PAREN )=> paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:6: ( LEFT_PAREN )=> paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2451);
+                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2455);
                     paren_chunk177=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -7417,7 +7473,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:607:4: ( expression_chain )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:4: ( expression_chain )?
             int alt62=2;
             int LA62_0 = input.LA(1);
 
@@ -7426,9 +7482,9 @@
             }
             switch (alt62) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:607:4: expression_chain
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:4: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain2462);
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain2466);
                     expression_chain178=expression_chain();
                     _fsp--;
                     if (failed) return retval;
@@ -7451,27 +7507,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 608:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+            // 609:4: -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:7: ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:45: ( square_chunk )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:59: ( paren_chunk )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:72: ( expression_chain )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609:72: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -7510,7 +7566,7 @@
     };
 
     // $ANTLR start lhs_pattern
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612: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);
@@ -7525,7 +7581,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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
             int alt63=2;
             int LA63_0 = input.LA(1);
 
@@ -7541,7 +7597,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("611:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 1, input);
+                        new NoViableAltException("612:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 1, input);
 
                     throw nvae;
                 }
@@ -7549,15 +7605,15 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("611:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 0, input);
+                    new NoViableAltException("612:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 63, 0, input);
 
                 throw nvae;
             }
             switch (alt63) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:4: fact_binding
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:4: fact_binding
                     {
-                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2495);
+                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2499);
                     fact_binding179=fact_binding();
                     _fsp--;
                     if (failed) return retval;
@@ -7574,9 +7630,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 612:17: -> ^( VT_PATTERN fact_binding )
+                    // 613:17: -> ^( VT_PATTERN fact_binding )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:20: ^( VT_PATTERN fact_binding )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:20: ^( VT_PATTERN fact_binding )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -7593,9 +7649,9 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:4: fact
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:614:4: fact
                     {
-                    pushFollow(FOLLOW_fact_in_lhs_pattern2508);
+                    pushFollow(FOLLOW_fact_in_lhs_pattern2512);
                     fact180=fact();
                     _fsp--;
                     if (failed) return retval;
@@ -7612,9 +7668,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 613:9: -> ^( VT_PATTERN fact )
+                    // 614:9: -> ^( VT_PATTERN fact )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:12: ^( VT_PATTERN fact )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:614:12: ^( VT_PATTERN fact )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -7655,7 +7711,7 @@
     };
 
     // $ANTLR start fact_binding
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:616: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617: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);
@@ -7679,15 +7735,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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
             {
-            pushFollow(FOLLOW_label_in_fact_binding2528);
+            pushFollow(FOLLOW_label_in_fact_binding2532);
             label181=label();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_label.add(label181.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:619:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
             int alt64=2;
             int LA64_0 = input.LA(1);
 
@@ -7700,15 +7756,15 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("618:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 64, 0, input);
+                    new NoViableAltException("619:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 64, 0, input);
 
                 throw nvae;
             }
             switch (alt64) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618:5: fact
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:619:5: fact
                     {
-                    pushFollow(FOLLOW_fact_in_fact_binding2534);
+                    pushFollow(FOLLOW_fact_in_fact_binding2538);
                     fact182=fact();
                     _fsp--;
                     if (failed) return retval;
@@ -7717,19 +7773,19 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:619:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:620:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
                     {
                     LEFT_PAREN183=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2541); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2545); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN183);
 
-                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding2543);
+                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding2547);
                     fact_binding_expression184=fact_binding_expression();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression184.getTree());
                     RIGHT_PAREN185=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding2545); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding2549); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN185);
 
 
@@ -7750,27 +7806,27 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 621:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+            // 622:3: -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:6: ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:30: ( fact )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:30: ( fact )?
                 if ( stream_fact.hasNext() ) {
                     adaptor.addChild(root_1, stream_fact.next());
 
                 }
                 stream_fact.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:36: ( fact_binding_expression )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:61: ( RIGHT_PAREN )?
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:61: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -7809,7 +7865,7 @@
     };
 
     // $ANTLR start fact_binding_expression
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:625: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);
@@ -7832,13 +7888,13 @@
         	Token orToken = null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:5: ( fact -> fact )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:6: fact
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:5: ( fact -> fact )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:6: fact
             {
-            pushFollow(FOLLOW_fact_in_fact_binding_expression2584);
+            pushFollow(FOLLOW_fact_in_fact_binding_expression2588);
             fact186=fact();
             _fsp--;
             if (failed) return retval;
@@ -7855,7 +7911,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 627:11: -> fact
+            // 628:11: -> fact
             {
                 adaptor.addChild(root_0, stream_fact.next());
 
@@ -7865,7 +7921,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
             loop66:
             do {
                 int alt66=2;
@@ -7881,9 +7937,9 @@
 
                 switch (alt66) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
             	    {
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:22: (value= or_key | pipe= DOUBLE_PIPE )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:22: (value= or_key | pipe= DOUBLE_PIPE )
             	    int alt65=2;
             	    int LA65_0 = input.LA(1);
 
@@ -7896,15 +7952,15 @@
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        NoViableAltException nvae =
-            	            new NoViableAltException("627:22: (value= or_key | pipe= DOUBLE_PIPE )", 65, 0, input);
+            	            new NoViableAltException("628:22: (value= or_key | pipe= DOUBLE_PIPE )", 65, 0, input);
 
             	        throw nvae;
             	    }
             	    switch (alt65) {
             	        case 1 :
-            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:23: value= or_key
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:23: value= or_key
             	            {
-            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression2596);
+            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression2600);
             	            value=or_key();
             	            _fsp--;
             	            if (failed) return retval;
@@ -7916,10 +7972,10 @@
             	            }
             	            break;
             	        case 2 :
-            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:62: pipe= DOUBLE_PIPE
+            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:62: pipe= DOUBLE_PIPE
             	            {
             	            pipe=(Token)input.LT(1);
-            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2602); if (failed) return retval;
+            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2606); if (failed) return retval;
             	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
             	            if ( backtracking==0 ) {
@@ -7931,7 +7987,7 @@
 
             	    }
 
-            	    pushFollow(FOLLOW_fact_in_fact_binding_expression2607);
+            	    pushFollow(FOLLOW_fact_in_fact_binding_expression2611);
             	    fact187=fact();
             	    _fsp--;
             	    if (failed) return retval;
@@ -7948,9 +8004,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 628:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	    // 629:3: -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
             	    {
-            	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:6: ^( VT_FACT_OR[orToken] $fact_binding_expression fact )
+            	        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:629: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);
@@ -7999,7 +8055,7 @@
     };
 
     // $ANTLR start fact
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:631:1: fact : data_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT data_type ( constraints )? RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632: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);
@@ -8008,7 +8064,7 @@
 
         Token LEFT_PAREN189=null;
         Token RIGHT_PAREN191=null;
-        data_type_return data_type188 = null;
+        pattern_type_return pattern_type188 = null;
 
         constraints_return constraints190 = null;
 
@@ -8017,22 +8073,22 @@
         Object RIGHT_PAREN191_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
+        RewriteRuleSubtreeStream stream_pattern_type=new RewriteRuleSubtreeStream(adaptor,"rule pattern_type");
         RewriteRuleSubtreeStream stream_constraints=new RewriteRuleSubtreeStream(adaptor,"rule constraints");
-        RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:2: ( data_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT data_type ( constraints )? RIGHT_PAREN ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:4: data_type LEFT_PAREN ( constraints )? RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:2: ( pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:4: pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN
             {
-            pushFollow(FOLLOW_data_type_in_fact2636);
-            data_type188=data_type();
+            pushFollow(FOLLOW_pattern_type_in_fact2640);
+            pattern_type188=pattern_type();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_data_type.add(data_type188.getTree());
+            if ( backtracking==0 ) stream_pattern_type.add(pattern_type188.getTree());
             LEFT_PAREN189=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact2638); if (failed) return retval;
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact2642); if (failed) return retval;
             if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN189);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:25: ( constraints )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:28: ( constraints )?
             int alt67=2;
             int LA67_0 = input.LA(1);
 
@@ -8041,9 +8097,9 @@
             }
             switch (alt67) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:25: constraints
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:28: constraints
                     {
-                    pushFollow(FOLLOW_constraints_in_fact2640);
+                    pushFollow(FOLLOW_constraints_in_fact2644);
                     constraints190=constraints();
                     _fsp--;
                     if (failed) return retval;
@@ -8055,12 +8111,12 @@
             }
 
             RIGHT_PAREN191=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact2643); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact2647); if (failed) return retval;
             if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN191);
 
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, data_type, constraints
+            // elements: RIGHT_PAREN, pattern_type, constraints
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -8070,15 +8126,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 633:2: -> ^( VT_FACT data_type ( constraints )? RIGHT_PAREN )
+            // 634:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:5: ^( VT_FACT data_type ( constraints )? RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634: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_data_type.next());
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:25: ( constraints )?
+                adaptor.addChild(root_1, stream_pattern_type.next());
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:28: ( constraints )?
                 if ( stream_constraints.hasNext() ) {
                     adaptor.addChild(root_1, stream_constraints.next());
 
@@ -8118,7 +8174,7 @@
     };
 
     // $ANTLR start constraints
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:636:1: constraints : constraint ( COMMA constraint )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:1: constraints : constraint ( COMMA constraint )* ;
     public final constraints_return constraints() throws RecognitionException {
         constraints_return retval = new constraints_return();
         retval.start = input.LT(1);
@@ -8134,17 +8190,17 @@
         Object COMMA193_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:2: ( constraint ( COMMA constraint )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:4: constraint ( COMMA constraint )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:2: ( constraint ( COMMA constraint )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:4: constraint ( COMMA constraint )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_in_constraints2668);
+            pushFollow(FOLLOW_constraint_in_constraints2672);
             constraint192=constraint();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, constraint192.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:15: ( COMMA constraint )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:15: ( COMMA constraint )*
             loop68:
             do {
                 int alt68=2;
@@ -8157,11 +8213,11 @@
 
                 switch (alt68) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:17: COMMA constraint
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:17: COMMA constraint
             	    {
             	    COMMA193=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2672); if (failed) return retval;
-            	    pushFollow(FOLLOW_constraint_in_constraints2675);
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2676); if (failed) return retval;
+            	    pushFollow(FOLLOW_constraint_in_constraints2679);
             	    constraint194=constraint();
             	    _fsp--;
             	    if (failed) return retval;
@@ -8201,7 +8257,7 @@
     };
 
     // $ANTLR start constraint
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:640:1: constraint : or_constr ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:641:1: constraint : or_constr ;
     public final constraint_return constraint() throws RecognitionException {
         constraint_return retval = new constraint_return();
         retval.start = input.LT(1);
@@ -8213,12 +8269,12 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:641:2: ( or_constr )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:641:4: or_constr
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:2: ( or_constr )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:4: or_constr
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_or_constr_in_constraint2689);
+            pushFollow(FOLLOW_or_constr_in_constraint2693);
             or_constr195=or_constr();
             _fsp--;
             if (failed) return retval;
@@ -8249,7 +8305,7 @@
     };
 
     // $ANTLR start or_constr
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:644:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645: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);
@@ -8265,17 +8321,17 @@
         Object DOUBLE_PIPE197_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:4: and_constr ( DOUBLE_PIPE and_constr )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:4: and_constr ( DOUBLE_PIPE and_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_constr_in_or_constr2700);
+            pushFollow(FOLLOW_and_constr_in_or_constr2704);
             and_constr196=and_constr();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, and_constr196.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:15: ( DOUBLE_PIPE and_constr )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:15: ( DOUBLE_PIPE and_constr )*
             loop69:
             do {
                 int alt69=2;
@@ -8288,15 +8344,15 @@
 
                 switch (alt69) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:17: DOUBLE_PIPE and_constr
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:17: DOUBLE_PIPE and_constr
             	    {
             	    DOUBLE_PIPE197=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr2704); if (failed) return retval;
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr2708); if (failed) return retval;
             	    if ( backtracking==0 ) {
             	    DOUBLE_PIPE197_tree = (Object)adaptor.create(DOUBLE_PIPE197);
             	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE197_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_and_constr_in_or_constr2707);
+            	    pushFollow(FOLLOW_and_constr_in_or_constr2711);
             	    and_constr198=and_constr();
             	    _fsp--;
             	    if (failed) return retval;
@@ -8336,7 +8392,7 @@
     };
 
     // $ANTLR start and_constr
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:649: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);
@@ -8352,17 +8408,17 @@
         Object DOUBLE_AMPER200_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:649:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:649:4: unary_constr ( DOUBLE_AMPER unary_constr )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:4: unary_constr ( DOUBLE_AMPER unary_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_unary_constr_in_and_constr2722);
+            pushFollow(FOLLOW_unary_constr_in_and_constr2726);
             unary_constr199=unary_constr();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr199.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:649:17: ( DOUBLE_AMPER unary_constr )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:17: ( DOUBLE_AMPER unary_constr )*
             loop70:
             do {
                 int alt70=2;
@@ -8375,15 +8431,15 @@
 
                 switch (alt70) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:649:19: DOUBLE_AMPER unary_constr
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:19: DOUBLE_AMPER unary_constr
             	    {
             	    DOUBLE_AMPER200=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr2726); if (failed) return retval;
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr2730); if (failed) return retval;
             	    if ( backtracking==0 ) {
             	    DOUBLE_AMPER200_tree = (Object)adaptor.create(DOUBLE_AMPER200);
             	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER200_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_unary_constr_in_and_constr2729);
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr2733);
             	    unary_constr201=unary_constr();
             	    _fsp--;
             	    if (failed) return retval;
@@ -8423,7 +8479,7 @@
     };
 
     // $ANTLR start unary_constr
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:652:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:653:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_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);
@@ -8449,7 +8505,7 @@
         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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:654:2: ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:655:2: ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN )
             int alt71=3;
             int LA71_0 = input.LA(1);
 
@@ -8460,7 +8516,7 @@
                     alt71=2;
                 }
                 else if ( (LA71_1==LEFT_PAREN) ) {
-                    int LA71_4 = input.LA(3);
+                    int LA71_13 = input.LA(3);
 
                     if ( ((validateIdentifierKey("eval"))) ) {
                         alt71=1;
@@ -8471,7 +8527,7 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("652:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );", 71, 4, input);
+                            new NoViableAltException("653:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );", 71, 13, input);
 
                         throw nvae;
                     }
@@ -8479,7 +8535,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("652:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );", 71, 1, input);
+                        new NoViableAltException("653:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );", 71, 1, input);
 
                     throw nvae;
                 }
@@ -8490,20 +8546,20 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("652:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );", 71, 0, input);
+                    new NoViableAltException("653:1: unary_constr options {k=2; } : ( eval_key paren_chunk -> ^( eval_key paren_chunk ) | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN -> or_constr RIGHT_PAREN );", 71, 0, input);
 
                 throw nvae;
             }
             switch (alt71) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:654:4: eval_key paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:655:4: eval_key paren_chunk
                     {
-                    pushFollow(FOLLOW_eval_key_in_unary_constr2750);
+                    pushFollow(FOLLOW_eval_key_in_unary_constr2754);
                     eval_key202=eval_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_eval_key.add(eval_key202.getTree());
-                    pushFollow(FOLLOW_paren_chunk_in_unary_constr2752);
+                    pushFollow(FOLLOW_paren_chunk_in_unary_constr2756);
                     paren_chunk203=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -8520,9 +8576,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 654:25: -> ^( eval_key paren_chunk )
+                    // 655:25: -> ^( eval_key paren_chunk )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:654:28: ^( eval_key paren_chunk )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:655:28: ^( eval_key paren_chunk )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
@@ -8539,11 +8595,11 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:655:4: field_constraint
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:4: field_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_field_constraint_in_unary_constr2765);
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr2769);
                     field_constraint204=field_constraint();
                     _fsp--;
                     if (failed) return retval;
@@ -8552,19 +8608,19 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:4: LEFT_PAREN or_constr RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:4: LEFT_PAREN or_constr RIGHT_PAREN
                     {
                     LEFT_PAREN205=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr2770); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr2774); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN205);
 
-                    pushFollow(FOLLOW_or_constr_in_unary_constr2772);
+                    pushFollow(FOLLOW_or_constr_in_unary_constr2776);
                     or_constr206=or_constr();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_or_constr.add(or_constr206.getTree());
                     RIGHT_PAREN207=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr2774); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr2778); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN207);
 
 
@@ -8579,7 +8635,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 656:37: -> or_constr RIGHT_PAREN
+                    // 657:37: -> or_constr RIGHT_PAREN
                     {
                         adaptor.addChild(root_0, stream_or_constr.next());
                         adaptor.addChild(root_0, stream_RIGHT_PAREN.next());
@@ -8615,7 +8671,7 @@
     };
 
     // $ANTLR start field_constraint
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:659: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:660: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);
@@ -8646,7 +8702,7 @@
         	boolean isArrow = false;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663: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 alt73=2;
             int LA73_0 = input.LA(1);
 
@@ -8662,7 +8718,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("659: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 ) );", 73, 1, input);
+                        new NoViableAltException("660: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 ) );", 73, 1, input);
 
                     throw nvae;
                 }
@@ -8670,25 +8726,25 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("659: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 ) );", 73, 0, input);
+                    new NoViableAltException("660: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 ) );", 73, 0, input);
 
                 throw nvae;
             }
             switch (alt73) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
                     {
-                    pushFollow(FOLLOW_label_in_field_constraint2794);
+                    pushFollow(FOLLOW_label_in_field_constraint2798);
                     label208=label();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_label.add(label208.getTree());
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint2796);
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint2800);
                     accessor_path209=accessor_path();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_accessor_path.add(accessor_path209.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:25: ( or_restr_connective | arw= ARROW paren_chunk )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:25: ( or_restr_connective | arw= ARROW paren_chunk )?
                     int alt72=3;
                     int LA72_0 = input.LA(1);
 
@@ -8700,9 +8756,9 @@
                     }
                     switch (alt72) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:27: or_restr_connective
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:27: or_restr_connective
                             {
-                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint2800);
+                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint2804);
                             or_restr_connective210=or_restr_connective();
                             _fsp--;
                             if (failed) return retval;
@@ -8711,13 +8767,13 @@
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:49: arw= ARROW paren_chunk
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:49: arw= ARROW paren_chunk
                             {
                             arw=(Token)input.LT(1);
-                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint2806); if (failed) return retval;
+                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint2810); if (failed) return retval;
                             if ( backtracking==0 ) stream_ARROW.add(arw);
 
-                            pushFollow(FOLLOW_paren_chunk_in_field_constraint2808);
+                            pushFollow(FOLLOW_paren_chunk_in_field_constraint2812);
                             paren_chunk211=paren_chunk();
                             _fsp--;
                             if (failed) return retval;
@@ -8743,15 +8799,15 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 663:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                    // 664:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
                     if (isArrow) {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:39: ^( VT_FIELD accessor_path )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:39: ^( VT_FIELD accessor_path )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
@@ -8763,9 +8819,9 @@
 
                         adaptor.addChild(root_0, root_1);
                         }
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
                         if ( stream_paren_chunk.hasNext() ) {
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:66: ^( VK_EVAL[$arw] paren_chunk )
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:66: ^( VK_EVAL[$arw] paren_chunk )
                             {
                             Object root_1 = (Object)adaptor.nil();
                             root_1 = (Object)adaptor.becomeRoot(adaptor.create(VK_EVAL, arw), root_1);
@@ -8779,21 +8835,21 @@
                         stream_paren_chunk.reset();
 
                     }
-                    else // 664:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                    else // 665:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:53: ( or_restr_connective )?
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:53: ( or_restr_connective )?
                         if ( stream_or_restr_connective.hasNext() ) {
                             adaptor.addChild(root_2, stream_or_restr_connective.next());
 
@@ -8813,14 +8869,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:4: accessor_path or_restr_connective
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:4: accessor_path or_restr_connective
                     {
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint2862);
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint2866);
                     accessor_path212=accessor_path();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_accessor_path.add(accessor_path212.getTree());
-                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint2864);
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint2868);
                     or_restr_connective213=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
@@ -8837,9 +8893,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 666:3: -> ^( VT_FIELD accessor_path or_restr_connective )
+                    // 667:3: -> ^( VT_FIELD accessor_path or_restr_connective )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:6: ^( VT_FIELD accessor_path or_restr_connective )
+                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:667: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);
@@ -8881,7 +8937,7 @@
     };
 
     // $ANTLR start label
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:1: label : value= ID COLON -> VT_LABEL[$value] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670: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);
@@ -8897,15 +8953,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:7: (value= ID COLON -> VT_LABEL[$value] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:9: value= ID COLON
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:7: (value= ID COLON -> VT_LABEL[$value] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:670:9: value= ID COLON
             {
             value=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_label2888); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_label2892); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(value);
 
             COLON214=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_label2890); if (failed) return retval;
+            match(input,COLON,FOLLOW_COLON_in_label2894); if (failed) return retval;
             if ( backtracking==0 ) stream_COLON.add(COLON214);
 
 
@@ -8920,7 +8976,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 669:24: -> VT_LABEL[$value]
+            // 670:24: -> VT_LABEL[$value]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_LABEL, value));
 
@@ -8953,7 +9009,7 @@
     };
 
     // $ANTLR start or_restr_connective
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:1: or_restr_connective : and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:1: or_restr_connective : and_restr_connective ( options {backtrack=true; } : 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);
@@ -8969,32 +9025,32 @@
         Object DOUBLE_PIPE216_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:2: ( and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:4: and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:2: ( and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:4: and_restr_connective ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2906);
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2910);
             and_restr_connective215=and_restr_connective();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective215.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*
             loop74:
             do {
                 int alt74=2;
                 alt74 = dfa74.predict(input);
                 switch (alt74) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:53: DOUBLE_PIPE and_restr_connective
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:53: DOUBLE_PIPE and_restr_connective
             	    {
             	    DOUBLE_PIPE216=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective2918); if (failed) return retval;
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective2922); if (failed) return retval;
             	    if ( backtracking==0 ) {
             	    DOUBLE_PIPE216_tree = (Object)adaptor.create(DOUBLE_PIPE216);
             	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE216_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2921);
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective2925);
             	    and_restr_connective217=and_restr_connective();
             	    _fsp--;
             	    if (failed) return retval;
@@ -9034,7 +9090,7 @@
     };
 
     // $ANTLR start and_restr_connective
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:1: and_restr_connective : constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:1: and_restr_connective : constraint_expression ( options {backtrack=true; } : 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);
@@ -9050,32 +9106,32 @@
         Object DOUBLE_AMPER219_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:2: ( constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:4: constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:2: ( constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:4: constraint_expression ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2936);
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2940);
             constraint_expression218=constraint_expression();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression218.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*
             loop75:
             do {
                 int alt75=2;
                 alt75 = dfa75.predict(input);
                 switch (alt75) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:54: DOUBLE_AMPER constraint_expression
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:54: DOUBLE_AMPER constraint_expression
             	    {
             	    DOUBLE_AMPER219=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective2948); if (failed) return retval;
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective2952); if (failed) return retval;
             	    if ( backtracking==0 ) {
             	    DOUBLE_AMPER219_tree = (Object)adaptor.create(DOUBLE_AMPER219);
             	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER219_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2951);
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective2955);
             	    constraint_expression220=constraint_expression();
             	    _fsp--;
             	    if (failed) return retval;
@@ -9115,7 +9171,7 @@
     };
 
     // $ANTLR start constraint_expression
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_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);
@@ -9137,24 +9193,28 @@
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_or_restr_connective=new RewriteRuleSubtreeStream(adaptor,"rule or_restr_connective");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN )
             int alt76=3;
             switch ( input.LA(1) ) {
             case ID:
                 {
                 switch ( input.LA(2) ) {
+                case STRING:
+                case BOOL:
+                case INT:
+                case FLOAT:
+                case NULL:
+                case LEFT_SQUARE:
+                    {
+                    alt76=2;
+                    }
+                    break;
                 case ID:
                     {
-                    int LA76_9 = input.LA(3);
+                    int LA76_10 = input.LA(3);
 
-                    if ( (LA76_9==LEFT_SQUARE) ) {
-                        alt76=2;
-                    }
-                    else if ( (LA76_9==ID||LA76_9==STRING||(LA76_9>=BOOL && LA76_9<=INT)||(LA76_9>=FLOAT && LA76_9<=NULL)) && ((validateIdentifierKey("not")))) {
-                        alt76=2;
-                    }
-                    else if ( (LA76_9==LEFT_PAREN) && ((validateIdentifierKey("not")))) {
-                        int LA76_16 = input.LA(4);
+                    if ( (LA76_10==LEFT_PAREN) && ((validateIdentifierKey("not")))) {
+                        int LA76_13 = input.LA(4);
 
                         if ( ((validateIdentifierKey("not"))) ) {
                             alt76=1;
@@ -9165,33 +9225,26 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 16, input);
+                                new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 13, input);
 
                             throw nvae;
                         }
                     }
-                    else if ( (LA76_9==EOF||LA76_9==DOT||(LA76_9>=COMMA && LA76_9<=RIGHT_PAREN)||(LA76_9>=DOUBLE_PIPE && LA76_9<=DOUBLE_AMPER)) ) {
+                    else if ( (LA76_10==ID||LA76_10==STRING||(LA76_10>=BOOL && LA76_10<=INT)||(LA76_10>=FLOAT && LA76_10<=NULL)) && ((validateIdentifierKey("not")))) {
                         alt76=2;
                     }
+                    else if ( (LA76_10==EOF||LA76_10==DOT||(LA76_10>=COMMA && LA76_10<=RIGHT_PAREN)||(LA76_10>=DOUBLE_PIPE && LA76_10<=DOUBLE_AMPER)||LA76_10==LEFT_SQUARE) ) {
+                        alt76=2;
+                    }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 9, input);
+                            new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 10, input);
 
                         throw nvae;
                     }
                     }
                     break;
-                case STRING:
-                case BOOL:
-                case INT:
-                case FLOAT:
-                case NULL:
-                case LEFT_SQUARE:
-                    {
-                    alt76=2;
-                    }
-                    break;
                 case LEFT_PAREN:
                     {
                     switch ( input.LA(3) ) {
@@ -9208,17 +9261,13 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 23, input);
+                                new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 23, input);
 
                             throw nvae;
                         }
                         }
                         break;
-                    case STRING:
-                    case BOOL:
-                    case INT:
-                    case FLOAT:
-                    case NULL:
+                    case LEFT_PAREN:
                         {
                         int LA76_24 = input.LA(4);
 
@@ -9231,31 +9280,12 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 24, input);
+                                new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 24, input);
 
                             throw nvae;
                         }
                         }
                         break;
-                    case LEFT_PAREN:
-                        {
-                        int LA76_25 = input.LA(4);
-
-                        if ( ((validateIdentifierKey("in"))) ) {
-                            alt76=1;
-                        }
-                        else if ( (true) ) {
-                            alt76=2;
-                        }
-                        else {
-                            if (backtracking>0) {failed=true; return retval;}
-                            NoViableAltException nvae =
-                                new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 25, input);
-
-                            throw nvae;
-                        }
-                        }
-                        break;
                     case VT_COMPILATION_UNIT:
                     case VT_FUNCTION_IMPORT:
                     case VT_FACT:
@@ -9289,6 +9319,7 @@
                     case VT_ACCESSOR_PATH:
                     case VT_ACCESSOR_ELEMENT:
                     case VT_DATA_TYPE:
+                    case VT_PATTERN_TYPE:
                     case VT_PACKAGE_ID:
                     case VT_IMPORT_ID:
                     case VT_GLOBAL_ID:
@@ -9371,10 +9402,33 @@
                         alt76=2;
                         }
                         break;
+                    case STRING:
+                    case BOOL:
+                    case INT:
+                    case FLOAT:
+                    case NULL:
+                        {
+                        int LA76_26 = input.LA(4);
+
+                        if ( ((validateIdentifierKey("in"))) ) {
+                            alt76=1;
+                        }
+                        else if ( (true) ) {
+                            alt76=2;
+                        }
+                        else {
+                            if (backtracking>0) {failed=true; return retval;}
+                            NoViableAltException nvae =
+                                new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 26, input);
+
+                            throw nvae;
+                        }
+                        }
+                        break;
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 11, input);
+                            new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 12, input);
 
                         throw nvae;
                     }
@@ -9384,7 +9438,7 @@
                 default:
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 1, input);
+                        new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 1, input);
 
                     throw nvae;
                 }
@@ -9409,18 +9463,18 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("680:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 0, input);
+                    new NoViableAltException("681:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN -> or_restr_connective RIGHT_PAREN );", 76, 0, input);
 
                 throw nvae;
             }
 
             switch (alt76) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:5: compound_operator
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:5: compound_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression2973);
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression2977);
                     compound_operator221=compound_operator();
                     _fsp--;
                     if (failed) return retval;
@@ -9429,11 +9483,11 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:4: simple_operator
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:4: simple_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression2978);
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression2982);
                     simple_operator222=simple_operator();
                     _fsp--;
                     if (failed) return retval;
@@ -9442,19 +9496,19 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:686:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
                     {
                     LEFT_PAREN223=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression2983); if (failed) return retval;
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression2987); if (failed) return retval;
                     if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN223);
 
-                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression2985);
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression2989);
                     or_restr_connective224=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective224.getTree());
                     RIGHT_PAREN225=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression2987); if (failed) return retval;
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression2991); if (failed) return retval;
                     if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN225);
 
 
@@ -9469,7 +9523,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 685:47: -> or_restr_connective RIGHT_PAREN
+                    // 686:47: -> or_restr_connective RIGHT_PAREN
                     {
                         adaptor.addChild(root_0, stream_or_restr_connective.next());
                         adaptor.addChild(root_0, stream_RIGHT_PAREN.next());
@@ -9505,7 +9559,7 @@
     };
 
     // $ANTLR start simple_operator
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | 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);
@@ -9557,12 +9611,12 @@
         Object ID244_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? ) expression_value
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )
             int alt80=13;
             switch ( input.LA(1) ) {
             case EQUAL:
@@ -9623,7 +9677,7 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("689:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 80, 7, input);
+                        new NoViableAltException("690:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 80, 7, input);
 
                     throw nvae;
                 }
@@ -9632,17 +9686,17 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("689:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 80, 0, input);
+                    new NoViableAltException("690:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID ( square_chunk )? )", 80, 0, input);
 
                 throw nvae;
             }
 
             switch (alt80) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:689:5: EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:5: EQUAL
                     {
                     EQUAL226=(Token)input.LT(1);
-                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator3005); if (failed) return retval;
+                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator3009); if (failed) return retval;
                     if ( backtracking==0 ) {
                     EQUAL226_tree = (Object)adaptor.create(EQUAL226);
                     root_0 = (Object)adaptor.becomeRoot(EQUAL226_tree, root_0);
@@ -9651,10 +9705,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:4: GREATER
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:4: GREATER
                     {
                     GREATER227=(Token)input.LT(1);
-                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator3011); if (failed) return retval;
+                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator3015); if (failed) return retval;
                     if ( backtracking==0 ) {
                     GREATER227_tree = (Object)adaptor.create(GREATER227);
                     root_0 = (Object)adaptor.becomeRoot(GREATER227_tree, root_0);
@@ -9663,10 +9717,10 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:4: GREATER_EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: GREATER_EQUAL
                     {
                     GREATER_EQUAL228=(Token)input.LT(1);
-                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator3017); if (failed) return retval;
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator3021); if (failed) return retval;
                     if ( backtracking==0 ) {
                     GREATER_EQUAL228_tree = (Object)adaptor.create(GREATER_EQUAL228);
                     root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL228_tree, root_0);
@@ -9675,10 +9729,10 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: LESS
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:4: LESS
                     {
                     LESS229=(Token)input.LT(1);
-                    match(input,LESS,FOLLOW_LESS_in_simple_operator3023); if (failed) return retval;
+                    match(input,LESS,FOLLOW_LESS_in_simple_operator3027); if (failed) return retval;
                     if ( backtracking==0 ) {
                     LESS229_tree = (Object)adaptor.create(LESS229);
                     root_0 = (Object)adaptor.becomeRoot(LESS229_tree, root_0);
@@ -9687,10 +9741,10 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:4: LESS_EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:694:4: LESS_EQUAL
                     {
                     LESS_EQUAL230=(Token)input.LT(1);
-                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3029); if (failed) return retval;
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3033); if (failed) return retval;
                     if ( backtracking==0 ) {
                     LESS_EQUAL230_tree = (Object)adaptor.create(LESS_EQUAL230);
                     root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL230_tree, root_0);
@@ -9699,10 +9753,10 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:694:4: NOT_EQUAL
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:4: NOT_EQUAL
                     {
                     NOT_EQUAL231=(Token)input.LT(1);
-                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3035); if (failed) return retval;
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3039); if (failed) return retval;
                     if ( backtracking==0 ) {
                     NOT_EQUAL231_tree = (Object)adaptor.create(NOT_EQUAL231);
                     root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL231_tree, root_0);
@@ -9711,14 +9765,14 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
                     {
-                    pushFollow(FOLLOW_not_key_in_simple_operator3041);
+                    pushFollow(FOLLOW_not_key_in_simple_operator3045);
                     not_key232=not_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) adaptor.addChild(root_0, not_key232.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )
                     int alt78=5;
                     int LA78_0 = input.LA(1);
 
@@ -9743,7 +9797,7 @@
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("695:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 78, 1, input);
+                                new NoViableAltException("696:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 78, 1, input);
 
                             throw nvae;
                         }
@@ -9751,15 +9805,15 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("695:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 78, 0, input);
+                            new NoViableAltException("696:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID ( square_chunk )? )", 78, 0, input);
 
                         throw nvae;
                     }
                     switch (alt78) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:13: contains_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:13: contains_key
                             {
-                            pushFollow(FOLLOW_contains_key_in_simple_operator3044);
+                            pushFollow(FOLLOW_contains_key_in_simple_operator3048);
                             contains_key233=contains_key();
                             _fsp--;
                             if (failed) return retval;
@@ -9768,9 +9822,9 @@
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:27: soundslike_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:27: soundslike_key
                             {
-                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3047);
+                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3051);
                             soundslike_key234=soundslike_key();
                             _fsp--;
                             if (failed) return retval;
@@ -9779,9 +9833,9 @@
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:43: matches_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:43: matches_key
                             {
-                            pushFollow(FOLLOW_matches_key_in_simple_operator3050);
+                            pushFollow(FOLLOW_matches_key_in_simple_operator3054);
                             matches_key235=matches_key();
                             _fsp--;
                             if (failed) return retval;
@@ -9790,9 +9844,9 @@
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:56: memberof_key
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:56: memberof_key
                             {
-                            pushFollow(FOLLOW_memberof_key_in_simple_operator3053);
+                            pushFollow(FOLLOW_memberof_key_in_simple_operator3057);
                             memberof_key236=memberof_key();
                             _fsp--;
                             if (failed) return retval;
@@ -9801,15 +9855,15 @@
                             }
                             break;
                         case 5 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:70: ID ( square_chunk )?
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:70: ID ( square_chunk )?
                             {
                             ID237=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator3056); if (failed) return retval;
+                            match(input,ID,FOLLOW_ID_in_simple_operator3060); if (failed) return retval;
                             if ( backtracking==0 ) {
                             ID237_tree = (Object)adaptor.create(ID237);
                             root_0 = (Object)adaptor.becomeRoot(ID237_tree, root_0);
                             }
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:74: ( square_chunk )?
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:74: ( square_chunk )?
                             int alt77=2;
                             int LA77_0 = input.LA(1);
 
@@ -9818,9 +9872,9 @@
                             }
                             switch (alt77) {
                                 case 1 :
-                                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:74: square_chunk
+                                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:74: square_chunk
                                     {
-                                    pushFollow(FOLLOW_square_chunk_in_simple_operator3059);
+                                    pushFollow(FOLLOW_square_chunk_in_simple_operator3063);
                                     square_chunk238=square_chunk();
                                     _fsp--;
                                     if (failed) return retval;
@@ -9841,9 +9895,9 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:4: contains_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:4: contains_key
                     {
-                    pushFollow(FOLLOW_contains_key_in_simple_operator3066);
+                    pushFollow(FOLLOW_contains_key_in_simple_operator3070);
                     contains_key239=contains_key();
                     _fsp--;
                     if (failed) return retval;
@@ -9852,9 +9906,9 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:4: excludes_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:4: excludes_key
                     {
-                    pushFollow(FOLLOW_excludes_key_in_simple_operator3072);
+                    pushFollow(FOLLOW_excludes_key_in_simple_operator3076);
                     excludes_key240=excludes_key();
                     _fsp--;
                     if (failed) return retval;
@@ -9863,9 +9917,9 @@
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:4: matches_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699:4: matches_key
                     {
-                    pushFollow(FOLLOW_matches_key_in_simple_operator3078);
+                    pushFollow(FOLLOW_matches_key_in_simple_operator3082);
                     matches_key241=matches_key();
                     _fsp--;
                     if (failed) return retval;
@@ -9874,9 +9928,9 @@
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699:4: soundslike_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:700:4: soundslike_key
                     {
-                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3084);
+                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3088);
                     soundslike_key242=soundslike_key();
                     _fsp--;
                     if (failed) return retval;
@@ -9885,9 +9939,9 @@
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:700:4: memberof_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:4: memberof_key
                     {
-                    pushFollow(FOLLOW_memberof_key_in_simple_operator3090);
+                    pushFollow(FOLLOW_memberof_key_in_simple_operator3094);
                     memberof_key243=memberof_key();
                     _fsp--;
                     if (failed) return retval;
@@ -9896,15 +9950,15 @@
                     }
                     break;
                 case 13 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:4: ID ( square_chunk )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:702:4: ID ( square_chunk )?
                     {
                     ID244=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator3096); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_simple_operator3100); if (failed) return retval;
                     if ( backtracking==0 ) {
                     ID244_tree = (Object)adaptor.create(ID244);
                     root_0 = (Object)adaptor.becomeRoot(ID244_tree, root_0);
                     }
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:8: ( square_chunk )?
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:702:8: ( square_chunk )?
                     int alt79=2;
                     int LA79_0 = input.LA(1);
 
@@ -9913,9 +9967,9 @@
                     }
                     switch (alt79) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:8: square_chunk
+                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:702:8: square_chunk
                             {
-                            pushFollow(FOLLOW_square_chunk_in_simple_operator3099);
+                            pushFollow(FOLLOW_square_chunk_in_simple_operator3103);
                             square_chunk245=square_chunk();
                             _fsp--;
                             if (failed) return retval;
@@ -9932,7 +9986,7 @@
 
             }
 
-            pushFollow(FOLLOW_expression_value_in_simple_operator3104);
+            pushFollow(FOLLOW_expression_value_in_simple_operator3108);
             expression_value246=expression_value();
             _fsp--;
             if (failed) return retval;
@@ -9963,7 +10017,7 @@
     };
 
     // $ANTLR start compound_operator
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707: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);
@@ -9989,28 +10043,28 @@
         Object RIGHT_PAREN254_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:708:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:708: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:4: ( in_key | not_key in_key )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:708:4: ( in_key | not_key in_key )
             int alt81=2;
             int LA81_0 = input.LA(1);
 
             if ( (LA81_0==ID) && (((validateIdentifierKey("not"))||(validateIdentifierKey("in"))))) {
                 int LA81_1 = input.LA(2);
 
-                if ( (LA81_1==ID) && ((validateIdentifierKey("not")))) {
-                    alt81=2;
-                }
-                else if ( (LA81_1==LEFT_PAREN) && ((validateIdentifierKey("in")))) {
+                if ( (LA81_1==LEFT_PAREN) && ((validateIdentifierKey("in")))) {
                     alt81=1;
                 }
+                else if ( (LA81_1==ID) && ((validateIdentifierKey("not")))) {
+                    alt81=2;
+                }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("707:4: ( in_key | not_key in_key )", 81, 1, input);
+                        new NoViableAltException("708:4: ( in_key | not_key in_key )", 81, 1, input);
 
                     throw nvae;
                 }
@@ -10018,15 +10072,15 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("707:4: ( in_key | not_key in_key )", 81, 0, input);
+                    new NoViableAltException("708:4: ( in_key | not_key in_key )", 81, 0, input);
 
                 throw nvae;
             }
             switch (alt81) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:6: in_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:708:6: in_key
                     {
-                    pushFollow(FOLLOW_in_key_in_compound_operator3119);
+                    pushFollow(FOLLOW_in_key_in_compound_operator3123);
                     in_key247=in_key();
                     _fsp--;
                     if (failed) return retval;
@@ -10035,14 +10089,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:16: not_key in_key
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:708:16: not_key in_key
                     {
-                    pushFollow(FOLLOW_not_key_in_compound_operator3124);
+                    pushFollow(FOLLOW_not_key_in_compound_operator3128);
                     not_key248=not_key();
                     _fsp--;
                     if (failed) return retval;
                     if ( backtracking==0 ) adaptor.addChild(root_0, not_key248.getTree());
-                    pushFollow(FOLLOW_in_key_in_compound_operator3126);
+                    pushFollow(FOLLOW_in_key_in_compound_operator3130);
                     in_key249=in_key();
                     _fsp--;
                     if (failed) return retval;
@@ -10054,13 +10108,13 @@
             }
 
             LEFT_PAREN250=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3131); if (failed) return retval;
-            pushFollow(FOLLOW_expression_value_in_compound_operator3134);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3135); if (failed) return retval;
+            pushFollow(FOLLOW_expression_value_in_compound_operator3138);
             expression_value251=expression_value();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) adaptor.addChild(root_0, expression_value251.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:63: ( COMMA expression_value )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:708:63: ( COMMA expression_value )*
             loop82:
             do {
                 int alt82=2;
@@ -10073,11 +10127,11 @@
 
                 switch (alt82) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:707:65: COMMA expression_value
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:708:65: COMMA expression_value
             	    {
             	    COMMA252=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3138); if (failed) return retval;
-            	    pushFollow(FOLLOW_expression_value_in_compound_operator3141);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3142); if (failed) return retval;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator3145);
             	    expression_value253=expression_value();
             	    _fsp--;
             	    if (failed) return retval;
@@ -10092,7 +10146,7 @@
             } while (true);
 
             RIGHT_PAREN254=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3146); if (failed) return retval;
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3150); if (failed) return retval;
             if ( backtracking==0 ) {
             RIGHT_PAREN254_tree = (Object)adaptor.create(RIGHT_PAREN254);
             adaptor.addChild(root_0, RIGHT_PAREN254_tree);
@@ -10123,7 +10177,7 @@
     };
 
     // $ANTLR start expression_value
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711: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);
@@ -10139,7 +10193,7 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711:2: ( accessor_path | literal_constraint | paren_chunk )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:2: ( accessor_path | literal_constraint | paren_chunk )
             int alt83=3;
             switch ( input.LA(1) ) {
             case ID:
@@ -10164,18 +10218,18 @@
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("710:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 83, 0, input);
+                    new NoViableAltException("711:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 83, 0, input);
 
                 throw nvae;
             }
 
             switch (alt83) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711:4: accessor_path
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:4: accessor_path
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_accessor_path_in_expression_value3157);
+                    pushFollow(FOLLOW_accessor_path_in_expression_value3161);
                     accessor_path255=accessor_path();
                     _fsp--;
                     if (failed) return retval;
@@ -10184,11 +10238,11 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:4: literal_constraint
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:4: literal_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value3162);
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value3166);
                     literal_constraint256=literal_constraint();
                     _fsp--;
                     if (failed) return retval;
@@ -10197,11 +10251,11 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:4: paren_chunk
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:4: paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_paren_chunk_in_expression_value3168);
+                    pushFollow(FOLLOW_paren_chunk_in_expression_value3172);
                     paren_chunk257=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -10234,7 +10288,7 @@
     };
 
     // $ANTLR start literal_constraint
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:717: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);
@@ -10246,7 +10300,7 @@
         Object set258_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:717:2: ( STRING | INT | FLOAT | BOOL | NULL )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:718:2: ( STRING | INT | FLOAT | BOOL | NULL )
             // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             {
             root_0 = (Object)adaptor.nil();
@@ -10284,15 +10338,15 @@
     }
     // $ANTLR end literal_constraint
 
-    public static class data_type_return extends ParserRuleReturnScope {
+    public static class pattern_type_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
-    // $ANTLR start data_type
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724: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();
+    // $ANTLR start pattern_type
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:1: pattern_type : ID ( DOT 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);
 
         Object root_0 = null;
@@ -10310,14 +10364,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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:4: ID ( DOT ID )* ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:4: ID ( DOT ID )* ( dimension_definition )*
             {
             ID259=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_data_type3210); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_pattern_type3214); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(ID259);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:7: ( DOT ID )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:7: ( DOT ID )*
             loop84:
             do {
                 int alt84=2;
@@ -10330,14 +10384,14 @@
 
                 switch (alt84) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:9: DOT ID
             	    {
             	    DOT260=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_data_type3214); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_pattern_type3218); if (failed) return retval;
             	    if ( backtracking==0 ) stream_DOT.add(DOT260);
 
             	    ID261=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_data_type3216); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_pattern_type3220); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(ID261);
 
 
@@ -10349,7 +10403,7 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:19: ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:19: ( dimension_definition )*
             loop85:
             do {
                 int alt85=2;
@@ -10362,9 +10416,9 @@
 
                 switch (alt85) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:725:19: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:19: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_data_type3221);
+            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type3225);
             	    dimension_definition262=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
@@ -10390,11 +10444,165 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 726:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            // 727:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:6: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727: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);
+
+                if ( !(stream_ID.hasNext()) ) {
+                    throw new RewriteEarlyExitException();
+                }
+                while ( stream_ID.hasNext() ) {
+                    adaptor.addChild(root_1, stream_ID.next());
+
+                }
+                stream_ID.reset();
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:28: ( dimension_definition )*
+                while ( stream_dimension_definition.hasNext() ) {
+                    adaptor.addChild(root_1, stream_dimension_definition.next());
+
+                }
+                stream_dimension_definition.reset();
+
+                adaptor.addChild(root_0, root_1);
+                }
+
+            }
+
+            }
+
+            }
+
+            retval.stop = input.LT(-1);
+
+            if ( backtracking==0 ) {
+                retval.tree = (Object)adaptor.rulePostProcessing(root_0);
+                adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end pattern_type
+
+    public static class data_type_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start data_type
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:1: data_type : ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
+    public final data_type_return data_type() throws RecognitionException {
+        data_type_return retval = new data_type_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID263=null;
+        Token DOT264=null;
+        Token ID265=null;
+        dimension_definition_return dimension_definition266 = null;
+
+
+        Object ID263_tree=null;
+        Object DOT264_tree=null;
+        Object ID265_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
+        RewriteRuleSubtreeStream stream_dimension_definition=new RewriteRuleSubtreeStream(adaptor,"rule dimension_definition");
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:4: ID ( DOT ID )* ( dimension_definition )*
+            {
+            ID263=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_data_type3251); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID263);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:7: ( DOT ID )*
+            loop86:
+            do {
+                int alt86=2;
+                int LA86_0 = input.LA(1);
+
+                if ( (LA86_0==DOT) ) {
+                    alt86=1;
+                }
+
+
+                switch (alt86) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:9: DOT ID
+            	    {
+            	    DOT264=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_data_type3255); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT264);
+
+            	    ID265=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_data_type3257); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(ID265);
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop86;
+                }
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:19: ( dimension_definition )*
+            loop87:
+            do {
+                int alt87=2;
+                int LA87_0 = input.LA(1);
+
+                if ( (LA87_0==LEFT_SQUARE) ) {
+                    alt87=1;
+                }
+
+
+                switch (alt87) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:19: dimension_definition
+            	    {
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type3262);
+            	    dimension_definition266=dimension_definition();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition266.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop87;
+                }
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: dimension_definition, ID
+            // token labels: 
+            // rule labels: retval
+            // token list labels: 
+            // rule list labels: 
+            if ( backtracking==0 ) {
+            retval.tree = root_0;
+            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+            root_0 = (Object)adaptor.nil();
+            // 732:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            {
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732: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);
 
                 if ( !(stream_ID.hasNext()) ) {
@@ -10405,7 +10613,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:726:25: ( dimension_definition )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:25: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -10444,36 +10652,36 @@
     };
 
     // $ANTLR start dimension_definition
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:729:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
     public final dimension_definition_return dimension_definition() throws RecognitionException {
         dimension_definition_return retval = new dimension_definition_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_SQUARE263=null;
-        Token RIGHT_SQUARE264=null;
+        Token LEFT_SQUARE267=null;
+        Token RIGHT_SQUARE268=null;
 
-        Object LEFT_SQUARE263_tree=null;
-        Object RIGHT_SQUARE264_tree=null;
+        Object LEFT_SQUARE267_tree=null;
+        Object RIGHT_SQUARE268_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:2: ( LEFT_SQUARE RIGHT_SQUARE )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:4: LEFT_SQUARE RIGHT_SQUARE
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:4: LEFT_SQUARE RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_SQUARE263=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3247); if (failed) return retval;
+            LEFT_SQUARE267=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3288); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_SQUARE263_tree = (Object)adaptor.create(LEFT_SQUARE263);
-            adaptor.addChild(root_0, LEFT_SQUARE263_tree);
+            LEFT_SQUARE267_tree = (Object)adaptor.create(LEFT_SQUARE267);
+            adaptor.addChild(root_0, LEFT_SQUARE267_tree);
             }
-            RIGHT_SQUARE264=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3249); if (failed) return retval;
+            RIGHT_SQUARE268=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3290); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_SQUARE264_tree = (Object)adaptor.create(RIGHT_SQUARE264);
-            adaptor.addChild(root_0, RIGHT_SQUARE264_tree);
+            RIGHT_SQUARE268_tree = (Object)adaptor.create(RIGHT_SQUARE268);
+            adaptor.addChild(root_0, RIGHT_SQUARE268_tree);
             }
 
             }
@@ -10501,61 +10709,61 @@
     };
 
     // $ANTLR start accessor_path
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:733:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
     public final accessor_path_return accessor_path() throws RecognitionException {
         accessor_path_return retval = new accessor_path_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOT266=null;
-        accessor_element_return accessor_element265 = null;
+        Token DOT270=null;
+        accessor_element_return accessor_element269 = null;
 
-        accessor_element_return accessor_element267 = null;
+        accessor_element_return accessor_element271 = null;
 
 
-        Object DOT266_tree=null;
+        Object DOT270_tree=null;
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_accessor_element=new RewriteRuleSubtreeStream(adaptor,"rule accessor_element");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:4: accessor_element ( DOT accessor_element )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:4: accessor_element ( DOT accessor_element )*
             {
-            pushFollow(FOLLOW_accessor_element_in_accessor_path3260);
-            accessor_element265=accessor_element();
+            pushFollow(FOLLOW_accessor_element_in_accessor_path3301);
+            accessor_element269=accessor_element();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_accessor_element.add(accessor_element265.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:21: ( DOT accessor_element )*
-            loop86:
+            if ( backtracking==0 ) stream_accessor_element.add(accessor_element269.getTree());
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:21: ( DOT accessor_element )*
+            loop88:
             do {
-                int alt86=2;
-                int LA86_0 = input.LA(1);
+                int alt88=2;
+                int LA88_0 = input.LA(1);
 
-                if ( (LA86_0==DOT) ) {
-                    alt86=1;
+                if ( (LA88_0==DOT) ) {
+                    alt88=1;
                 }
 
 
-                switch (alt86) {
+                switch (alt88) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:23: DOT accessor_element
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:23: DOT accessor_element
             	    {
-            	    DOT266=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3264); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT266);
+            	    DOT270=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3305); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT270);
 
-            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3266);
-            	    accessor_element267=accessor_element();
+            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3307);
+            	    accessor_element271=accessor_element();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element267.getTree());
+            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element271.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop86;
+            	    break loop88;
                 }
             } while (true);
 
@@ -10571,9 +10779,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 735:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+            // 741:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:5: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:741: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);
@@ -10619,60 +10827,60 @@
     };
 
     // $ANTLR start accessor_element
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
     public final accessor_element_return accessor_element() throws RecognitionException {
         accessor_element_return retval = new accessor_element_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID268=null;
-        square_chunk_return square_chunk269 = null;
+        Token ID272=null;
+        square_chunk_return square_chunk273 = null;
 
 
-        Object ID268_tree=null;
+        Object ID272_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:4: ID ( square_chunk )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:4: ID ( square_chunk )*
             {
-            ID268=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accessor_element3290); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID268);
+            ID272=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accessor_element3331); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID272);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:7: ( square_chunk )*
-            loop87:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:7: ( square_chunk )*
+            loop89:
             do {
-                int alt87=2;
-                int LA87_0 = input.LA(1);
+                int alt89=2;
+                int LA89_0 = input.LA(1);
 
-                if ( (LA87_0==LEFT_SQUARE) ) {
-                    alt87=1;
+                if ( (LA89_0==LEFT_SQUARE) ) {
+                    alt89=1;
                 }
 
 
-                switch (alt87) {
+                switch (alt89) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:7: square_chunk
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:7: square_chunk
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3292);
-            	    square_chunk269=square_chunk();
+            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3333);
+            	    square_chunk273=square_chunk();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk269.getTree());
+            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk273.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop87;
+            	    break loop89;
                 }
             } while (true);
 
 
             // AST REWRITE
-            // elements: ID, square_chunk
+            // elements: square_chunk, ID
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -10682,15 +10890,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 740:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+            // 746:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746: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/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:30: ( square_chunk )*
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:30: ( square_chunk )*
                 while ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
@@ -10729,7 +10937,7 @@
     };
 
     // $ANTLR start rhs_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:1: rhs_chunk : rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749: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);
@@ -10744,10 +10952,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:5: rc= rhs_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:752:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:752:5: rc= rhs_chunk_data
             {
-            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3321);
+            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3362);
             rc=rhs_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -10767,7 +10975,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 747:2: -> VT_RHS_CHUNK[$rc.start,text]
+            // 753:2: -> VT_RHS_CHUNK[$rc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_RHS_CHUNK, ((Token)rc.start), text));
 
@@ -10800,61 +11008,61 @@
     };
 
     // $ANTLR start rhs_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:750:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:756:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
     public final rhs_chunk_data_return rhs_chunk_data() throws RecognitionException {
         rhs_chunk_data_return retval = new rhs_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token THEN270=null;
-        Token set271=null;
-        Token END272=null;
-        Token SEMICOLON273=null;
+        Token THEN274=null;
+        Token set275=null;
+        Token END276=null;
+        Token SEMICOLON277=null;
 
-        Object THEN270_tree=null;
-        Object set271_tree=null;
-        Object END272_tree=null;
-        Object SEMICOLON273_tree=null;
+        Object THEN274_tree=null;
+        Object set275_tree=null;
+        Object END276_tree=null;
+        Object SEMICOLON277_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:2: ( THEN (~ END )* END ( SEMICOLON )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:4: THEN (~ END )* END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:2: ( THEN (~ END )* END ( SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:4: THEN (~ END )* END ( SEMICOLON )?
             {
             root_0 = (Object)adaptor.nil();
 
-            THEN270=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3340); if (failed) return retval;
+            THEN274=(Token)input.LT(1);
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3381); if (failed) return retval;
             if ( backtracking==0 ) {
-            THEN270_tree = (Object)adaptor.create(THEN270);
-            adaptor.addChild(root_0, THEN270_tree);
+            THEN274_tree = (Object)adaptor.create(THEN274);
+            adaptor.addChild(root_0, THEN274_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:9: (~ END )*
-            loop88:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:9: (~ END )*
+            loop90:
             do {
-                int alt88=2;
-                int LA88_0 = input.LA(1);
+                int alt90=2;
+                int LA90_0 = input.LA(1);
 
-                if ( ((LA88_0>=VT_COMPILATION_UNIT && LA88_0<=DOT_STAR)||(LA88_0>=STRING && LA88_0<=MULTI_LINE_COMMENT)) ) {
-                    alt88=1;
+                if ( ((LA90_0>=VT_COMPILATION_UNIT && LA90_0<=DOT_STAR)||(LA90_0>=STRING && LA90_0<=MULTI_LINE_COMMENT)) ) {
+                    alt90=1;
                 }
 
 
-                switch (alt88) {
+                switch (alt90) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:11: ~ END
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:11: ~ END
             	    {
-            	    set271=(Token)input.LT(1);
+            	    set275=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=DOT_STAR)||(input.LA(1)>=STRING && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set271));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set275));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3344);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3385);    throw mse;
             	    }
 
 
@@ -10862,32 +11070,32 @@
             	    break;
 
             	default :
-            	    break loop88;
+            	    break loop90;
                 }
             } while (true);
 
-            END272=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk_data3350); if (failed) return retval;
+            END276=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_rhs_chunk_data3391); if (failed) return retval;
             if ( backtracking==0 ) {
-            END272_tree = (Object)adaptor.create(END272);
-            adaptor.addChild(root_0, END272_tree);
+            END276_tree = (Object)adaptor.create(END276);
+            adaptor.addChild(root_0, END276_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:23: ( SEMICOLON )?
-            int alt89=2;
-            int LA89_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:23: ( SEMICOLON )?
+            int alt91=2;
+            int LA91_0 = input.LA(1);
 
-            if ( (LA89_0==SEMICOLON) ) {
-                alt89=1;
+            if ( (LA91_0==SEMICOLON) ) {
+                alt91=1;
             }
-            switch (alt89) {
+            switch (alt91) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:751:23: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:23: SEMICOLON
                     {
-                    SEMICOLON273=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3352); if (failed) return retval;
+                    SEMICOLON277=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3393); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    SEMICOLON273_tree = (Object)adaptor.create(SEMICOLON273);
-                    adaptor.addChild(root_0, SEMICOLON273_tree);
+                    SEMICOLON277_tree = (Object)adaptor.create(SEMICOLON277);
+                    adaptor.addChild(root_0, SEMICOLON277_tree);
                     }
 
                     }
@@ -10921,7 +11129,7 @@
     };
 
     // $ANTLR start curly_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:754:1: curly_chunk : cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:760: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);
@@ -10936,10 +11144,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:757:5: cc= curly_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:763:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:763:5: cc= curly_chunk_data
             {
-            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3369);
+            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3410);
             cc=curly_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -10959,7 +11167,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 758:2: -> VT_CURLY_CHUNK[$cc.start,text]
+            // 764:2: -> VT_CURLY_CHUNK[$cc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_CURLY_CHUNK, ((Token)cc.start), text));
 
@@ -10992,91 +11200,91 @@
     };
 
     // $ANTLR start curly_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:767:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
     public final curly_chunk_data_return curly_chunk_data() throws RecognitionException {
         curly_chunk_data_return retval = new curly_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_CURLY274=null;
-        Token set275=null;
-        Token RIGHT_CURLY277=null;
-        curly_chunk_data_return curly_chunk_data276 = null;
+        Token LEFT_CURLY278=null;
+        Token set279=null;
+        Token RIGHT_CURLY281=null;
+        curly_chunk_data_return curly_chunk_data280 = null;
 
 
-        Object LEFT_CURLY274_tree=null;
-        Object set275_tree=null;
-        Object RIGHT_CURLY277_tree=null;
+        Object LEFT_CURLY278_tree=null;
+        Object set279_tree=null;
+        Object RIGHT_CURLY281_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_CURLY274=(Token)input.LT(1);
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3388); if (failed) return retval;
+            LEFT_CURLY278=(Token)input.LT(1);
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3429); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_CURLY274_tree = (Object)adaptor.create(LEFT_CURLY274);
-            adaptor.addChild(root_0, LEFT_CURLY274_tree);
+            LEFT_CURLY278_tree = (Object)adaptor.create(LEFT_CURLY278);
+            adaptor.addChild(root_0, LEFT_CURLY278_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
-            loop90:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
+            loop92:
             do {
-                int alt90=3;
-                int LA90_0 = input.LA(1);
+                int alt92=3;
+                int LA92_0 = input.LA(1);
 
-                if ( ((LA90_0>=VT_COMPILATION_UNIT && LA90_0<=THEN)||(LA90_0>=MISC && LA90_0<=MULTI_LINE_COMMENT)) ) {
-                    alt90=1;
+                if ( ((LA92_0>=VT_COMPILATION_UNIT && LA92_0<=THEN)||(LA92_0>=MISC && LA92_0<=MULTI_LINE_COMMENT)) ) {
+                    alt92=1;
                 }
-                else if ( (LA90_0==LEFT_CURLY) ) {
-                    alt90=2;
+                else if ( (LA92_0==LEFT_CURLY) ) {
+                    alt92=2;
                 }
 
 
-                switch (alt90) {
+                switch (alt92) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
-            	    set275=(Token)input.LT(1);
+            	    set279=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=THEN)||(input.LA(1)>=MISC && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set275));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set279));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3391);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3432);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:762:49: curly_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:49: curly_chunk_data
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3405);
-            	    curly_chunk_data276=curly_chunk_data();
+            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3446);
+            	    curly_chunk_data280=curly_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data276.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data280.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop90;
+            	    break loop92;
                 }
             } while (true);
 
-            RIGHT_CURLY277=(Token)input.LT(1);
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3410); if (failed) return retval;
+            RIGHT_CURLY281=(Token)input.LT(1);
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3451); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_CURLY277_tree = (Object)adaptor.create(RIGHT_CURLY277);
-            adaptor.addChild(root_0, RIGHT_CURLY277_tree);
+            RIGHT_CURLY281_tree = (Object)adaptor.create(RIGHT_CURLY281);
+            adaptor.addChild(root_0, RIGHT_CURLY281_tree);
             }
 
             }
@@ -11104,7 +11312,7 @@
     };
 
     // $ANTLR start paren_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:765:1: paren_chunk : pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:771: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);
@@ -11119,10 +11327,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:768:5: pc= paren_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:774:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:774:5: pc= paren_chunk_data
             {
-            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3426);
+            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3467);
             pc=paren_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -11142,7 +11350,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 769:2: -> VT_PAREN_CHUNK[$pc.start,text]
+            // 775:2: -> VT_PAREN_CHUNK[$pc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_PAREN_CHUNK, ((Token)pc.start), text));
 
@@ -11175,91 +11383,91 @@
     };
 
     // $ANTLR start paren_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:1: paren_chunk_data : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:778:1: paren_chunk_data : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
     public final paren_chunk_data_return paren_chunk_data() throws RecognitionException {
         paren_chunk_data_return retval = new paren_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN278=null;
-        Token set279=null;
-        Token RIGHT_PAREN281=null;
-        paren_chunk_data_return paren_chunk_data280 = null;
+        Token LEFT_PAREN282=null;
+        Token set283=null;
+        Token RIGHT_PAREN285=null;
+        paren_chunk_data_return paren_chunk_data284 = null;
 
 
-        Object LEFT_PAREN278_tree=null;
-        Object set279_tree=null;
-        Object RIGHT_PAREN281_tree=null;
+        Object LEFT_PAREN282_tree=null;
+        Object set283_tree=null;
+        Object RIGHT_PAREN285_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:2: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:4: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:2: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:4: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_PAREN278=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3446); if (failed) return retval;
+            LEFT_PAREN282=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3487); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_PAREN278_tree = (Object)adaptor.create(LEFT_PAREN278);
-            adaptor.addChild(root_0, LEFT_PAREN278_tree);
+            LEFT_PAREN282_tree = (Object)adaptor.create(LEFT_PAREN282);
+            adaptor.addChild(root_0, LEFT_PAREN282_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
-            loop91:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
+            loop93:
             do {
-                int alt91=3;
-                int LA91_0 = input.LA(1);
+                int alt93=3;
+                int LA93_0 = input.LA(1);
 
-                if ( ((LA91_0>=VT_COMPILATION_UNIT && LA91_0<=STRING)||LA91_0==COMMA||(LA91_0>=COLON && LA91_0<=MULTI_LINE_COMMENT)) ) {
-                    alt91=1;
+                if ( ((LA93_0>=VT_COMPILATION_UNIT && LA93_0<=STRING)||LA93_0==COMMA||(LA93_0>=COLON && LA93_0<=MULTI_LINE_COMMENT)) ) {
+                    alt93=1;
                 }
-                else if ( (LA91_0==LEFT_PAREN) ) {
-                    alt91=2;
+                else if ( (LA93_0==LEFT_PAREN) ) {
+                    alt93=2;
                 }
 
 
-                switch (alt91) {
+                switch (alt93) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
-            	    set279=(Token)input.LT(1);
+            	    set283=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=STRING)||input.LA(1)==COMMA||(input.LA(1)>=COLON && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set279));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set283));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3449);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3490);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:49: paren_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:49: paren_chunk_data
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3463);
-            	    paren_chunk_data280=paren_chunk_data();
+            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3504);
+            	    paren_chunk_data284=paren_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data280.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data284.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop91;
+            	    break loop93;
                 }
             } while (true);
 
-            RIGHT_PAREN281=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3468); if (failed) return retval;
+            RIGHT_PAREN285=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3509); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_PAREN281_tree = (Object)adaptor.create(RIGHT_PAREN281);
-            adaptor.addChild(root_0, RIGHT_PAREN281_tree);
+            RIGHT_PAREN285_tree = (Object)adaptor.create(RIGHT_PAREN285);
+            adaptor.addChild(root_0, RIGHT_PAREN285_tree);
             }
 
             }
@@ -11287,7 +11495,7 @@
     };
 
     // $ANTLR start square_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:1: square_chunk : sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782: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);
@@ -11302,10 +11510,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779:5: sc= square_chunk_data
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:5: sc= square_chunk_data
             {
-            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3485);
+            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3526);
             sc=square_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -11325,7 +11533,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 780:2: -> VT_SQUARE_CHUNK[$sc.start,text]
+            // 786:2: -> VT_SQUARE_CHUNK[$sc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SQUARE_CHUNK, ((Token)sc.start), text));
 
@@ -11358,91 +11566,91 @@
     };
 
     // $ANTLR start square_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:1: square_chunk_data : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:1: square_chunk_data : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
     public final square_chunk_data_return square_chunk_data() throws RecognitionException {
         square_chunk_data_return retval = new square_chunk_data_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_SQUARE282=null;
-        Token set283=null;
-        Token RIGHT_SQUARE285=null;
-        square_chunk_data_return square_chunk_data284 = null;
+        Token LEFT_SQUARE286=null;
+        Token set287=null;
+        Token RIGHT_SQUARE289=null;
+        square_chunk_data_return square_chunk_data288 = null;
 
 
-        Object LEFT_SQUARE282_tree=null;
-        Object set283_tree=null;
-        Object RIGHT_SQUARE285_tree=null;
+        Object LEFT_SQUARE286_tree=null;
+        Object set287_tree=null;
+        Object RIGHT_SQUARE289_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:2: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:4: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:2: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:4: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_SQUARE282=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3504); if (failed) return retval;
+            LEFT_SQUARE286=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3545); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_SQUARE282_tree = (Object)adaptor.create(LEFT_SQUARE282);
-            adaptor.addChild(root_0, LEFT_SQUARE282_tree);
+            LEFT_SQUARE286_tree = (Object)adaptor.create(LEFT_SQUARE286);
+            adaptor.addChild(root_0, LEFT_SQUARE286_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
-            loop92:
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
+            loop94:
             do {
-                int alt92=3;
-                int LA92_0 = input.LA(1);
+                int alt94=3;
+                int LA94_0 = input.LA(1);
 
-                if ( ((LA92_0>=VT_COMPILATION_UNIT && LA92_0<=NULL)||(LA92_0>=THEN && LA92_0<=MULTI_LINE_COMMENT)) ) {
-                    alt92=1;
+                if ( ((LA94_0>=VT_COMPILATION_UNIT && LA94_0<=NULL)||(LA94_0>=THEN && LA94_0<=MULTI_LINE_COMMENT)) ) {
+                    alt94=1;
                 }
-                else if ( (LA92_0==LEFT_SQUARE) ) {
-                    alt92=2;
+                else if ( (LA94_0==LEFT_SQUARE) ) {
+                    alt94=2;
                 }
 
 
-                switch (alt92) {
+                switch (alt94) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
-            	    set283=(Token)input.LT(1);
+            	    set287=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=NULL)||(input.LA(1)>=THEN && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set283));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set287));
             	        errorRecovery=false;failed=false;
             	    }
             	    else {
             	        if (backtracking>0) {failed=true; return retval;}
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data3507);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data3548);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784:52: square_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:52: square_chunk_data
             	    {
-            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3521);
-            	    square_chunk_data284=square_chunk_data();
+            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3562);
+            	    square_chunk_data288=square_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data284.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data288.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop92;
+            	    break loop94;
                 }
             } while (true);
 
-            RIGHT_SQUARE285=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3526); if (failed) return retval;
+            RIGHT_SQUARE289=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3567); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_SQUARE285_tree = (Object)adaptor.create(RIGHT_SQUARE285);
-            adaptor.addChild(root_0, RIGHT_SQUARE285_tree);
+            RIGHT_SQUARE289_tree = (Object)adaptor.create(RIGHT_SQUARE289);
+            adaptor.addChild(root_0, RIGHT_SQUARE289_tree);
             }
 
             }
@@ -11470,20 +11678,20 @@
     };
 
     // $ANTLR start date_effective_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:788:1: date_effective_key : {...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:1: date_effective_key : {...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] ;
     public final date_effective_key_return date_effective_key() throws RecognitionException {
         date_effective_key_return retval = new date_effective_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID286=null;
-        Token MISC287=null;
-        Token ID288=null;
+        Token ID290=null;
+        Token MISC291=null;
+        Token ID292=null;
 
-        Object ID286_tree=null;
-        Object MISC287_tree=null;
-        Object ID288_tree=null;
+        Object ID290_tree=null;
+        Object MISC291_tree=null;
+        Object ID292_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11491,24 +11699,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:3: ({...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:791:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:797:3: ({...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:797:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "date_effective_key", "(validateIdentifierKey(\"date\") && validateLT(2, \"-\") && validateLT(3, \"effective\"))");
             }
-            ID286=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key3545); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID286);
+            ID290=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key3586); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID290);
 
-            MISC287=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_effective_key3547); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC287);
+            MISC291=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_effective_key3588); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC291);
 
-            ID288=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key3549); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID288);
+            ID292=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key3590); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID292);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11525,7 +11733,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 792:2: -> VK_DATE_EFFECTIVE[$start, text]
+            // 798:2: -> VK_DATE_EFFECTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EFFECTIVE, ((Token)retval.start),  text));
 
@@ -11558,20 +11766,20 @@
     };
 
     // $ANTLR start date_expires_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:795:1: date_expires_key : {...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:801:1: date_expires_key : {...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] ;
     public final date_expires_key_return date_expires_key() throws RecognitionException {
         date_expires_key_return retval = new date_expires_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID289=null;
-        Token MISC290=null;
-        Token ID291=null;
+        Token ID293=null;
+        Token MISC294=null;
+        Token ID295=null;
 
-        Object ID289_tree=null;
-        Object MISC290_tree=null;
-        Object ID291_tree=null;
+        Object ID293_tree=null;
+        Object MISC294_tree=null;
+        Object ID295_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11579,24 +11787,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:3: ({...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:804:3: ({...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:804:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "date_expires_key", "(validateIdentifierKey(\"date\") && validateLT(2, \"-\") && validateLT(3, \"expires\"))");
             }
-            ID289=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key3575); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID289);
+            ID293=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key3616); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID293);
 
-            MISC290=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_expires_key3577); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC290);
+            MISC294=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_expires_key3618); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC294);
 
-            ID291=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key3579); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID291);
+            ID295=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key3620); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID295);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11613,7 +11821,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 799:2: -> VK_DATE_EXPIRES[$start, text]
+            // 805:2: -> VK_DATE_EXPIRES[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EXPIRES, ((Token)retval.start),  text));
 
@@ -11646,24 +11854,24 @@
     };
 
     // $ANTLR start lock_on_active_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:802:1: lock_on_active_key : {...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:808:1: lock_on_active_key : {...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] ;
     public final lock_on_active_key_return lock_on_active_key() throws RecognitionException {
         lock_on_active_key_return retval = new lock_on_active_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID292=null;
-        Token MISC293=null;
-        Token ID294=null;
-        Token MISC295=null;
         Token ID296=null;
+        Token MISC297=null;
+        Token ID298=null;
+        Token MISC299=null;
+        Token ID300=null;
 
-        Object ID292_tree=null;
-        Object MISC293_tree=null;
-        Object ID294_tree=null;
-        Object MISC295_tree=null;
         Object ID296_tree=null;
+        Object MISC297_tree=null;
+        Object ID298_tree=null;
+        Object MISC299_tree=null;
+        Object ID300_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11671,32 +11879,32 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:3: ({...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:5: {...}? => ID MISC ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:811:3: ({...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:811:5: {...}? => ID MISC ID MISC ID
             {
             if ( !((validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "lock_on_active_key", "(validateIdentifierKey(\"lock\") && validateLT(2, \"-\") && validateLT(3, \"on\") && validateLT(4, \"-\") && validateLT(5, \"active\"))");
             }
-            ID292=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key3605); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID292);
+            ID296=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3646); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID296);
 
-            MISC293=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3607); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC293);
+            MISC297=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3648); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC297);
 
-            ID294=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key3609); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID294);
+            ID298=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3650); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID298);
 
-            MISC295=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3611); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC295);
+            MISC299=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3652); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC299);
 
-            ID296=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key3613); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID296);
+            ID300=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key3654); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID300);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11713,7 +11921,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 806:2: -> VK_LOCK_ON_ACTIVE[$start, text]
+            // 812:2: -> VK_LOCK_ON_ACTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_LOCK_ON_ACTIVE, ((Token)retval.start),  text));
 
@@ -11746,20 +11954,20 @@
     };
 
     // $ANTLR start no_loop_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809:1: no_loop_key : {...}? => ID MISC ID -> VK_NO_LOOP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:815:1: no_loop_key : {...}? => ID MISC ID -> VK_NO_LOOP[$start, text] ;
     public final no_loop_key_return no_loop_key() throws RecognitionException {
         no_loop_key_return retval = new no_loop_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID297=null;
-        Token MISC298=null;
-        Token ID299=null;
+        Token ID301=null;
+        Token MISC302=null;
+        Token ID303=null;
 
-        Object ID297_tree=null;
-        Object MISC298_tree=null;
-        Object ID299_tree=null;
+        Object ID301_tree=null;
+        Object MISC302_tree=null;
+        Object ID303_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11767,24 +11975,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:3: ({...}? => ID MISC ID -> VK_NO_LOOP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:818:3: ({...}? => ID MISC ID -> VK_NO_LOOP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:818:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "no_loop_key", "(validateIdentifierKey(\"no\") && validateLT(2, \"-\") && validateLT(3, \"loop\"))");
             }
-            ID297=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key3639); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID297);
+            ID301=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key3680); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID301);
 
-            MISC298=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_no_loop_key3641); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC298);
+            MISC302=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_no_loop_key3682); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC302);
 
-            ID299=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key3643); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID299);
+            ID303=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key3684); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID303);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11801,7 +12009,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 813:2: -> VK_NO_LOOP[$start, text]
+            // 819:2: -> VK_NO_LOOP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NO_LOOP, ((Token)retval.start),  text));
 
@@ -11834,20 +12042,20 @@
     };
 
     // $ANTLR start auto_focus_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816:1: auto_focus_key : {...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:1: auto_focus_key : {...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] ;
     public final auto_focus_key_return auto_focus_key() throws RecognitionException {
         auto_focus_key_return retval = new auto_focus_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID300=null;
-        Token MISC301=null;
-        Token ID302=null;
+        Token ID304=null;
+        Token MISC305=null;
+        Token ID306=null;
 
-        Object ID300_tree=null;
-        Object MISC301_tree=null;
-        Object ID302_tree=null;
+        Object ID304_tree=null;
+        Object MISC305_tree=null;
+        Object ID306_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11855,24 +12063,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:3: ({...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:825:3: ({...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:825:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "auto_focus_key", "(validateIdentifierKey(\"auto\") && validateLT(2, \"-\") && validateLT(3, \"focus\"))");
             }
-            ID300=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key3669); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID300);
+            ID304=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key3710); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID304);
 
-            MISC301=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_auto_focus_key3671); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC301);
+            MISC305=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_auto_focus_key3712); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC305);
 
-            ID302=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key3673); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID302);
+            ID306=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key3714); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID306);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11889,7 +12097,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 820:2: -> VK_AUTO_FOCUS[$start, text]
+            // 826:2: -> VK_AUTO_FOCUS[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AUTO_FOCUS, ((Token)retval.start),  text));
 
@@ -11922,20 +12130,20 @@
     };
 
     // $ANTLR start activation_group_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:1: activation_group_key : {...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:1: activation_group_key : {...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] ;
     public final activation_group_key_return activation_group_key() throws RecognitionException {
         activation_group_key_return retval = new activation_group_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID303=null;
-        Token MISC304=null;
-        Token ID305=null;
+        Token ID307=null;
+        Token MISC308=null;
+        Token ID309=null;
 
-        Object ID303_tree=null;
-        Object MISC304_tree=null;
-        Object ID305_tree=null;
+        Object ID307_tree=null;
+        Object MISC308_tree=null;
+        Object ID309_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11943,24 +12151,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:826:3: ({...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:826:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:832:3: ({...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:832:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "activation_group_key", "(validateIdentifierKey(\"activation\") && validateLT(2, \"-\") && validateLT(3, \"group\"))");
             }
-            ID303=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key3699); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID303);
+            ID307=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key3740); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID307);
 
-            MISC304=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_activation_group_key3701); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC304);
+            MISC308=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_activation_group_key3742); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC308);
 
-            ID305=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key3703); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID305);
+            ID309=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key3744); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID309);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11977,7 +12185,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 827:2: -> VK_ACTIVATION_GROUP[$start, text]
+            // 833:2: -> VK_ACTIVATION_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTIVATION_GROUP, ((Token)retval.start),  text));
 
@@ -12010,20 +12218,20 @@
     };
 
     // $ANTLR start agenda_group_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:830:1: agenda_group_key : {...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:836:1: agenda_group_key : {...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] ;
     public final agenda_group_key_return agenda_group_key() throws RecognitionException {
         agenda_group_key_return retval = new agenda_group_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID306=null;
-        Token MISC307=null;
-        Token ID308=null;
+        Token ID310=null;
+        Token MISC311=null;
+        Token ID312=null;
 
-        Object ID306_tree=null;
-        Object MISC307_tree=null;
-        Object ID308_tree=null;
+        Object ID310_tree=null;
+        Object MISC311_tree=null;
+        Object ID312_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12031,24 +12239,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:3: ({...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:3: ({...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "agenda_group_key", "(validateIdentifierKey(\"agenda\") && validateLT(2, \"-\") && validateLT(3, \"group\"))");
             }
-            ID306=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key3729); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID306);
+            ID310=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key3770); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID310);
 
-            MISC307=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_agenda_group_key3731); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC307);
+            MISC311=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_agenda_group_key3772); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC311);
 
-            ID308=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key3733); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID308);
+            ID312=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key3774); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID312);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12065,7 +12273,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 834:2: -> VK_AGENDA_GROUP[$start, text]
+            // 840:2: -> VK_AGENDA_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AGENDA_GROUP, ((Token)retval.start),  text));
 
@@ -12098,20 +12306,20 @@
     };
 
     // $ANTLR start ruleflow_group_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:837:1: ruleflow_group_key : {...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:843:1: ruleflow_group_key : {...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] ;
     public final ruleflow_group_key_return ruleflow_group_key() throws RecognitionException {
         ruleflow_group_key_return retval = new ruleflow_group_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID309=null;
-        Token MISC310=null;
-        Token ID311=null;
+        Token ID313=null;
+        Token MISC314=null;
+        Token ID315=null;
 
-        Object ID309_tree=null;
-        Object MISC310_tree=null;
-        Object ID311_tree=null;
+        Object ID313_tree=null;
+        Object MISC314_tree=null;
+        Object ID315_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12119,24 +12327,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:3: ({...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:3: ({...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "ruleflow_group_key", "(validateIdentifierKey(\"ruleflow\") && validateLT(2, \"-\") && validateLT(3, \"group\"))");
             }
-            ID309=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3759); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID309);
+            ID313=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3800); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID313);
 
-            MISC310=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key3761); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC310);
+            MISC314=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key3802); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC314);
 
-            ID311=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3763); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID311);
+            ID315=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3804); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID315);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12153,7 +12361,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 841:2: -> VK_RULEFLOW_GROUP[$start, text]
+            // 847:2: -> VK_RULEFLOW_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULEFLOW_GROUP, ((Token)retval.start),  text));
 
@@ -12186,7 +12394,7 @@
     };
 
     // $ANTLR start duration_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:844:1: duration_key : {...}? =>id= ID -> VK_DURATION[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:850: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);
@@ -12199,15 +12407,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:845:2: ({...}? =>id= ID -> VK_DURATION[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:845:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:851:2: ({...}? =>id= ID -> VK_DURATION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:851:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("duration"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "duration_key", "(validateIdentifierKey(\"duration\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_duration_key3788); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_duration_key3829); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12222,7 +12430,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 845:52: -> VK_DURATION[$id]
+            // 851:52: -> VK_DURATION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DURATION, id));
 
@@ -12255,7 +12463,7 @@
     };
 
     // $ANTLR start package_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:848:1: package_key : {...}? =>id= ID -> VK_PACKAGE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:854: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);
@@ -12268,15 +12476,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:849:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("package"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "package_key", "(validateIdentifierKey(\"package\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_package_key3810); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_package_key3851); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12291,7 +12499,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 849:51: -> VK_PACKAGE[$id]
+            // 855:51: -> VK_PACKAGE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_PACKAGE, id));
 
@@ -12324,7 +12532,7 @@
     };
 
     // $ANTLR start import_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:852:1: import_key : {...}? =>id= ID -> VK_IMPORT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:858: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);
@@ -12337,15 +12545,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:853:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:853:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:859:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:859:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("import"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "import_key", "(validateIdentifierKey(\"import\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_import_key3832); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_import_key3873); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12360,7 +12568,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 853:50: -> VK_IMPORT[$id]
+            // 859:50: -> VK_IMPORT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IMPORT, id));
 
@@ -12393,7 +12601,7 @@
     };
 
     // $ANTLR start dialect_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:856:1: dialect_key : {...}? =>id= ID -> VK_DIALECT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:862: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);
@@ -12406,15 +12614,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:857:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:857:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:863:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:863:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("dialect"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "dialect_key", "(validateIdentifierKey(\"dialect\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dialect_key3854); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_dialect_key3895); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12429,7 +12637,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 857:51: -> VK_DIALECT[$id]
+            // 863:51: -> VK_DIALECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DIALECT, id));
 
@@ -12462,7 +12670,7 @@
     };
 
     // $ANTLR start salience_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:1: salience_key : {...}? =>id= ID -> VK_SALIENCE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:866: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);
@@ -12475,15 +12683,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:861:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:861:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("salience"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "salience_key", "(validateIdentifierKey(\"salience\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_salience_key3876); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_salience_key3917); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12498,7 +12706,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 861:52: -> VK_SALIENCE[$id]
+            // 867:52: -> VK_SALIENCE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SALIENCE, id));
 
@@ -12531,7 +12739,7 @@
     };
 
     // $ANTLR start enabled_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:864:1: enabled_key : {...}? =>id= ID -> VK_ENABLED[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:870: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);
@@ -12544,15 +12752,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:865:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:865:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("enabled"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "enabled_key", "(validateIdentifierKey(\"enabled\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enabled_key3898); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_enabled_key3939); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12567,7 +12775,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 865:51: -> VK_ENABLED[$id]
+            // 871:51: -> VK_ENABLED[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENABLED, id));
 
@@ -12600,7 +12808,7 @@
     };
 
     // $ANTLR start attributes_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:868:1: attributes_key : {...}? =>id= ID -> VK_ATTRIBUTES[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874: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);
@@ -12613,15 +12821,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:869:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:869:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:875:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:875:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("attributes"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "attributes_key", "(validateIdentifierKey(\"attributes\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_attributes_key3920); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_attributes_key3961); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12636,7 +12844,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 869:54: -> VK_ATTRIBUTES[$id]
+            // 875:54: -> VK_ATTRIBUTES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ATTRIBUTES, id));
 
@@ -12669,7 +12877,7 @@
     };
 
     // $ANTLR start when_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:872:1: when_key : {...}? =>id= ID -> VK_WHEN[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878: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);
@@ -12682,15 +12890,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:2: ({...}? =>id= ID -> VK_WHEN[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:873:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:879:2: ({...}? =>id= ID -> VK_WHEN[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:879:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("when"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "when_key", "(validateIdentifierKey(\"when\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_when_key3942); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_when_key3983); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12705,7 +12913,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 873:48: -> VK_WHEN[$id]
+            // 879:48: -> VK_WHEN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_WHEN, id));
 
@@ -12738,7 +12946,7 @@
     };
 
     // $ANTLR start rule_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:876:1: rule_key : {...}? =>id= ID -> VK_RULE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:882: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);
@@ -12751,15 +12959,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:877:2: ({...}? =>id= ID -> VK_RULE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:877:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:883:2: ({...}? =>id= ID -> VK_RULE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:883:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("rule"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "rule_key", "(validateIdentifierKey(\"rule\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_rule_key3964); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_rule_key4005); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12774,7 +12982,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 877:48: -> VK_RULE[$id]
+            // 883:48: -> VK_RULE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULE, id));
 
@@ -12807,7 +13015,7 @@
     };
 
     // $ANTLR start template_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:880:1: template_key : {...}? =>id= ID -> VK_TEMPLATE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:886: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);
@@ -12820,15 +13028,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:881:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:881:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:887:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:887:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("template"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "template_key", "(validateIdentifierKey(\"template\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_template_key3986); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_template_key4027); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12843,7 +13051,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 881:52: -> VK_TEMPLATE[$id]
+            // 887:52: -> VK_TEMPLATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_TEMPLATE, id));
 
@@ -12876,7 +13084,7 @@
     };
 
     // $ANTLR start query_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:884:1: query_key : {...}? =>id= ID -> VK_QUERY[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:890: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);
@@ -12889,15 +13097,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:885:2: ({...}? =>id= ID -> VK_QUERY[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:885:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:891:2: ({...}? =>id= ID -> VK_QUERY[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:891:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("query"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "query_key", "(validateIdentifierKey(\"query\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_query_key4008); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_query_key4049); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12912,7 +13120,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 885:49: -> VK_QUERY[$id]
+            // 891:49: -> VK_QUERY[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_QUERY, id));
 
@@ -12945,7 +13153,7 @@
     };
 
     // $ANTLR start declare_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:888:1: declare_key : {...}? =>id= ID -> VK_DECLARE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:894: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);
@@ -12958,15 +13166,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:889:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:889:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("declare"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "declare_key", "(validateIdentifierKey(\"declare\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_declare_key4030); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_declare_key4071); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12981,7 +13189,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 889:51: -> VK_DECLARE[$id]
+            // 895:51: -> VK_DECLARE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DECLARE, id));
 
@@ -13014,7 +13222,7 @@
     };
 
     // $ANTLR start function_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892:1: function_key : {...}? =>id= ID -> VK_FUNCTION[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:898: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);
@@ -13027,15 +13235,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:893:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:893:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("function"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "function_key", "(validateIdentifierKey(\"function\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_function_key4052); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_function_key4093); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13050,7 +13258,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 893:52: -> VK_FUNCTION[$id]
+            // 899:52: -> VK_FUNCTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FUNCTION, id));
 
@@ -13083,7 +13291,7 @@
     };
 
     // $ANTLR start global_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:896:1: global_key : {...}? =>id= ID -> VK_GLOBAL[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:902: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);
@@ -13096,15 +13304,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:897:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:897:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:903:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:903:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("global"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "global_key", "(validateIdentifierKey(\"global\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_global_key4074); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_global_key4115); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13119,7 +13327,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 897:50: -> VK_GLOBAL[$id]
+            // 903:50: -> VK_GLOBAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_GLOBAL, id));
 
@@ -13152,7 +13360,7 @@
     };
 
     // $ANTLR start eval_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:906: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);
@@ -13165,15 +13373,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:901:2: ({...}? =>id= ID -> VK_EVAL[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:901:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:907:2: ({...}? =>id= ID -> VK_EVAL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:907:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("eval"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "eval_key", "(validateIdentifierKey(\"eval\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_eval_key4096); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_eval_key4137); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13188,7 +13396,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 901:48: -> VK_EVAL[$id]
+            // 907:48: -> VK_EVAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EVAL, id));
 
@@ -13221,7 +13429,7 @@
     };
 
     // $ANTLR start contains_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:904:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:910: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);
@@ -13234,15 +13442,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:905:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:905:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:911:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:911:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("contains"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "contains_key", "(validateIdentifierKey(\"contains\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_contains_key4118); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_contains_key4159); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13257,7 +13465,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 905:52: -> VK_CONTAINS[$id]
+            // 911:52: -> VK_CONTAINS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_CONTAINS, id));
 
@@ -13290,7 +13498,7 @@
     };
 
     // $ANTLR start matches_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:908:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:914: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);
@@ -13303,15 +13511,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:909:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:909:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:915:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:915:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("matches"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "matches_key", "(validateIdentifierKey(\"matches\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_matches_key4140); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_matches_key4181); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13326,7 +13534,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 909:51: -> VK_MATCHES[$id]
+            // 915:51: -> VK_MATCHES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MATCHES, id));
 
@@ -13359,7 +13567,7 @@
     };
 
     // $ANTLR start excludes_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:912:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:918: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);
@@ -13372,15 +13580,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:913:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:919:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:919:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("excludes"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "excludes_key", "(validateIdentifierKey(\"excludes\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_excludes_key4162); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_excludes_key4203); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13395,7 +13603,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 913:52: -> VK_EXCLUDES[$id]
+            // 919:52: -> VK_EXCLUDES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXCLUDES, id));
 
@@ -13428,7 +13636,7 @@
     };
 
     // $ANTLR start soundslike_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:916:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:922: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);
@@ -13441,15 +13649,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:917:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:917:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("soundslike"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "soundslike_key", "(validateIdentifierKey(\"soundslike\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_soundslike_key4184); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_soundslike_key4225); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13464,7 +13672,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 917:54: -> VK_SOUNDSLIKE[$id]
+            // 923:54: -> VK_SOUNDSLIKE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SOUNDSLIKE, id));
 
@@ -13497,7 +13705,7 @@
     };
 
     // $ANTLR start memberof_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:926: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);
@@ -13510,15 +13718,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:921:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:921:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("memberof"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "memberof_key", "(validateIdentifierKey(\"memberof\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_memberof_key4206); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_memberof_key4247); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13533,7 +13741,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 921:52: -> VK_MEMBEROF[$id]
+            // 927:52: -> VK_MEMBEROF[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MEMBEROF, id));
 
@@ -13566,7 +13774,7 @@
     };
 
     // $ANTLR start not_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:930: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);
@@ -13579,15 +13787,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:925:2: ({...}? =>id= ID -> VK_NOT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:925:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:2: ({...}? =>id= ID -> VK_NOT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("not"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "not_key", "(validateIdentifierKey(\"not\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_not_key4228); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_not_key4269); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13602,7 +13810,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 925:47: -> VK_NOT[$id]
+            // 931:47: -> VK_NOT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NOT, id));
 
@@ -13635,7 +13843,7 @@
     };
 
     // $ANTLR start in_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:928:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:934: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);
@@ -13648,15 +13856,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:929:2: ({...}? =>id= ID -> VK_IN[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:929:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:2: ({...}? =>id= ID -> VK_IN[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("in"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "in_key", "(validateIdentifierKey(\"in\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_in_key4250); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_in_key4291); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13671,7 +13879,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 929:46: -> VK_IN[$id]
+            // 935:46: -> VK_IN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IN, id));
 
@@ -13704,7 +13912,7 @@
     };
 
     // $ANTLR start or_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:938: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);
@@ -13717,15 +13925,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:933:2: ({...}? =>id= ID -> VK_OR[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:933:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:939:2: ({...}? =>id= ID -> VK_OR[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:939:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("or"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "or_key", "(validateIdentifierKey(\"or\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_or_key4272); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_or_key4313); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13740,7 +13948,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 933:46: -> VK_OR[$id]
+            // 939:46: -> VK_OR[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_OR, id));
 
@@ -13773,7 +13981,7 @@
     };
 
     // $ANTLR start and_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:936:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:942: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);
@@ -13786,15 +13994,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:937:2: ({...}? =>id= ID -> VK_AND[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:937:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:943:2: ({...}? =>id= ID -> VK_AND[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:943:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("and"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "and_key", "(validateIdentifierKey(\"and\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_and_key4294); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_and_key4335); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13809,7 +14017,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 937:47: -> VK_AND[$id]
+            // 943:47: -> VK_AND[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AND, id));
 
@@ -13842,7 +14050,7 @@
     };
 
     // $ANTLR start exists_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:940:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946: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);
@@ -13855,15 +14063,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:941:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:941:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:947:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:947:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("exists"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "exists_key", "(validateIdentifierKey(\"exists\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_exists_key4316); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_exists_key4357); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13878,7 +14086,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 941:50: -> VK_EXISTS[$id]
+            // 947:50: -> VK_EXISTS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXISTS, id));
 
@@ -13911,7 +14119,7 @@
     };
 
     // $ANTLR start forall_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:944:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:950: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);
@@ -13924,15 +14132,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:945:2: ({...}? =>id= ID -> VK_FORALL[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:945:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:2: ({...}? =>id= ID -> VK_FORALL[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("forall"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "forall_key", "(validateIdentifierKey(\"forall\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_forall_key4338); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_forall_key4379); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13947,7 +14155,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 945:50: -> VK_FORALL[$id]
+            // 951:50: -> VK_FORALL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FORALL, id));
 
@@ -13980,7 +14188,7 @@
     };
 
     // $ANTLR start from_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:948:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:954: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);
@@ -13993,15 +14201,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:949:2: ({...}? =>id= ID -> VK_FROM[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:949:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:2: ({...}? =>id= ID -> VK_FROM[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("from"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "from_key", "(validateIdentifierKey(\"from\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_key4360); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_from_key4401); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14016,7 +14224,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 949:48: -> VK_FROM[$id]
+            // 955:48: -> VK_FROM[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FROM, id));
 
@@ -14049,20 +14257,20 @@
     };
 
     // $ANTLR start entry_point_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:952:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:958:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
     public final entry_point_key_return entry_point_key() throws RecognitionException {
         entry_point_key_return retval = new entry_point_key_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID312=null;
-        Token MISC313=null;
-        Token ID314=null;
+        Token ID316=null;
+        Token MISC317=null;
+        Token ID318=null;
 
-        Object ID312_tree=null;
-        Object MISC313_tree=null;
-        Object ID314_tree=null;
+        Object ID316_tree=null;
+        Object MISC317_tree=null;
+        Object ID318_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -14070,24 +14278,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:961:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey("entry") && validateLT(2, "-") && validateLT(3, "point"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "entry_point_key", "(validateIdentifierKey(\"entry\") && validateLT(2, \"-\") && validateLT(3, \"point\"))");
             }
-            ID312=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key4383); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID312);
+            ID316=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4424); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID316);
 
-            MISC313=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_entry_point_key4385); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC313);
+            MISC317=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_entry_point_key4426); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC317);
 
-            ID314=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key4387); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID314);
+            ID318=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4428); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID318);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -14104,7 +14312,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 956:2: -> VK_ENTRY_POINT[$start, text]
+            // 962:2: -> VK_ENTRY_POINT[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENTRY_POINT, ((Token)retval.start),  text));
 
@@ -14137,7 +14345,7 @@
     };
 
     // $ANTLR start accumulate_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:965: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);
@@ -14150,15 +14358,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:960:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:960:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:966:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:966:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("accumulate"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "accumulate_key", "(validateIdentifierKey(\"accumulate\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_key4412); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_key4453); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14173,7 +14381,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 960:54: -> VK_ACCUMULATE[$id]
+            // 966:54: -> VK_ACCUMULATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACCUMULATE, id));
 
@@ -14206,7 +14414,7 @@
     };
 
     // $ANTLR start init_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:963:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:969: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);
@@ -14219,15 +14427,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:964:2: ({...}? =>id= ID -> VK_INIT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:964:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:2: ({...}? =>id= ID -> VK_INIT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("init"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "init_key", "(validateIdentifierKey(\"init\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_init_key4434); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_init_key4475); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14242,7 +14450,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 964:48: -> VK_INIT[$id]
+            // 970:48: -> VK_INIT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_INIT, id));
 
@@ -14275,7 +14483,7 @@
     };
 
     // $ANTLR start action_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:967:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973: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);
@@ -14288,15 +14496,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:968:2: ({...}? =>id= ID -> VK_ACTION[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:968:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:2: ({...}? =>id= ID -> VK_ACTION[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("action"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "action_key", "(validateIdentifierKey(\"action\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_action_key4456); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_action_key4497); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14311,7 +14519,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 968:50: -> VK_ACTION[$id]
+            // 974:50: -> VK_ACTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTION, id));
 
@@ -14344,7 +14552,7 @@
     };
 
     // $ANTLR start reverse_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:977: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);
@@ -14357,15 +14565,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:972:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:972:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:978:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:978:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("reverse"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "reverse_key", "(validateIdentifierKey(\"reverse\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_reverse_key4478); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_reverse_key4519); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14380,7 +14588,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 972:51: -> VK_REVERSE[$id]
+            // 978:51: -> VK_REVERSE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_REVERSE, id));
 
@@ -14413,7 +14621,7 @@
     };
 
     // $ANTLR start result_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:981: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);
@@ -14426,15 +14634,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:976:2: ({...}? =>id= ID -> VK_RESULT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:976:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:982:2: ({...}? =>id= ID -> VK_RESULT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:982:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("result"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "result_key", "(validateIdentifierKey(\"result\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_result_key4500); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_result_key4541); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14449,7 +14657,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 976:50: -> VK_RESULT[$id]
+            // 982:50: -> VK_RESULT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RESULT, id));
 
@@ -14482,7 +14690,7 @@
     };
 
     // $ANTLR start collect_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:985: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);
@@ -14495,15 +14703,15 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:980:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:980:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey("collect"))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "collect_key", "(validateIdentifierKey(\"collect\"))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_collect_key4522); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_collect_key4563); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14518,7 +14726,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 980:51: -> VK_COLLECT[$id]
+            // 986:51: -> VK_COLLECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_COLLECT, id));
 
@@ -14547,11 +14755,11 @@
 
     // $ANTLR start synpred1
     public final void synpred1_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:5: ( LEFT_PAREN or_key )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:6: LEFT_PAREN or_key
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:5: ( LEFT_PAREN or_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:6: LEFT_PAREN or_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11487); if (failed) return ;
-        pushFollow(FOLLOW_or_key_in_synpred11489);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11491); if (failed) return ;
+        pushFollow(FOLLOW_or_key_in_synpred11493);
         or_key();
         _fsp--;
         if (failed) return ;
@@ -14562,28 +14770,28 @@
 
     // $ANTLR start synpred2
     public final void synpred2_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:5: ( or_key | DOUBLE_PIPE )
-        int alt93=2;
-        int LA93_0 = input.LA(1);
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:5: ( or_key | DOUBLE_PIPE )
+        int alt95=2;
+        int LA95_0 = input.LA(1);
 
-        if ( (LA93_0==ID) && ((validateIdentifierKey("or")))) {
-            alt93=1;
+        if ( (LA95_0==ID) && ((validateIdentifierKey("or")))) {
+            alt95=1;
         }
-        else if ( (LA93_0==DOUBLE_PIPE) ) {
-            alt93=2;
+        else if ( (LA95_0==DOUBLE_PIPE) ) {
+            alt95=2;
         }
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("485:5: synpred2 : ( or_key | DOUBLE_PIPE );", 93, 0, input);
+                new NoViableAltException("486:5: synpred2 : ( or_key | DOUBLE_PIPE );", 95, 0, input);
 
             throw nvae;
         }
-        switch (alt93) {
+        switch (alt95) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:6: or_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:6: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred21536);
+                pushFollow(FOLLOW_or_key_in_synpred21540);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -14591,9 +14799,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:13: DOUBLE_PIPE
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:13: DOUBLE_PIPE
                 {
-                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21538); if (failed) return ;
+                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21542); if (failed) return ;
 
                 }
                 break;
@@ -14603,11 +14811,11 @@
 
     // $ANTLR start synpred3
     public final void synpred3_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:5: ( LEFT_PAREN and_key )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:492:6: LEFT_PAREN and_key
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:5: ( LEFT_PAREN and_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:493:6: LEFT_PAREN and_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31589); if (failed) return ;
-        pushFollow(FOLLOW_and_key_in_synpred31591);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31593); if (failed) return ;
+        pushFollow(FOLLOW_and_key_in_synpred31595);
         and_key();
         _fsp--;
         if (failed) return ;
@@ -14618,28 +14826,28 @@
 
     // $ANTLR start synpred4
     public final void synpred4_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:5: ( and_key | DOUBLE_AMPER )
-        int alt94=2;
-        int LA94_0 = input.LA(1);
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:5: ( and_key | DOUBLE_AMPER )
+        int alt96=2;
+        int LA96_0 = input.LA(1);
 
-        if ( (LA94_0==ID) && ((validateIdentifierKey("and")))) {
-            alt94=1;
+        if ( (LA96_0==ID) && ((validateIdentifierKey("and")))) {
+            alt96=1;
         }
-        else if ( (LA94_0==DOUBLE_AMPER) ) {
-            alt94=2;
+        else if ( (LA96_0==DOUBLE_AMPER) ) {
+            alt96=2;
         }
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("495:5: synpred4 : ( and_key | DOUBLE_AMPER );", 94, 0, input);
+                new NoViableAltException("496:5: synpred4 : ( and_key | DOUBLE_AMPER );", 96, 0, input);
 
             throw nvae;
         }
-        switch (alt94) {
+        switch (alt96) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:6: and_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:6: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred41638);
+                pushFollow(FOLLOW_and_key_in_synpred41642);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -14647,9 +14855,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:14: DOUBLE_AMPER
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:496:14: DOUBLE_AMPER
                 {
-                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred41640); if (failed) return ;
+                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred41644); if (failed) return ;
 
                 }
                 break;
@@ -14659,10 +14867,10 @@
 
     // $ANTLR start synpred5
     public final void synpred5_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:4: ( SEMICOLON )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:5: SEMICOLON
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:4: ( SEMICOLON )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:509:5: SEMICOLON
         {
-        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred51742); if (failed) return ;
+        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred51746); if (failed) return ;
 
         }
     }
@@ -14670,27 +14878,27 @@
 
     // $ANTLR start synpred6
     public final void synpred6_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:12: ( LEFT_PAREN ( or_key | and_key ) )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:13: LEFT_PAREN ( or_key | and_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:12: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:13: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred61774); if (failed) return ;
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:24: ( or_key | and_key )
-        int alt95=2;
-        int LA95_0 = input.LA(1);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred61778); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:24: ( or_key | and_key )
+        int alt97=2;
+        int LA97_0 = input.LA(1);
 
-        if ( (LA95_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
-            int LA95_1 = input.LA(2);
+        if ( (LA97_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
+            int LA97_1 = input.LA(2);
 
             if ( ((validateIdentifierKey("or"))) ) {
-                alt95=1;
+                alt97=1;
             }
             else if ( ((validateIdentifierKey("and"))) ) {
-                alt95=2;
+                alt97=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("513:24: ( or_key | and_key )", 95, 1, input);
+                    new NoViableAltException("514:24: ( or_key | and_key )", 97, 1, input);
 
                 throw nvae;
             }
@@ -14698,15 +14906,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("513:24: ( or_key | and_key )", 95, 0, input);
+                new NoViableAltException("514:24: ( or_key | and_key )", 97, 0, input);
 
             throw nvae;
         }
-        switch (alt95) {
+        switch (alt97) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:25: or_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:25: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred61777);
+                pushFollow(FOLLOW_or_key_in_synpred61781);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -14714,9 +14922,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:513:32: and_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:32: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred61779);
+                pushFollow(FOLLOW_and_key_in_synpred61783);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -14733,27 +14941,27 @@
 
     // $ANTLR start synpred7
     public final void synpred7_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:5: ( LEFT_PAREN ( or_key | and_key ) )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:6: LEFT_PAREN ( or_key | and_key )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:5: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:6: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred71861); if (failed) return ;
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:17: ( or_key | and_key )
-        int alt96=2;
-        int LA96_0 = input.LA(1);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred71865); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:17: ( or_key | and_key )
+        int alt98=2;
+        int LA98_0 = input.LA(1);
 
-        if ( (LA96_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
-            int LA96_1 = input.LA(2);
+        if ( (LA98_0==ID) && (((validateIdentifierKey("or"))||(validateIdentifierKey("and"))))) {
+            int LA98_1 = input.LA(2);
 
             if ( ((validateIdentifierKey("or"))) ) {
-                alt96=1;
+                alt98=1;
             }
             else if ( ((validateIdentifierKey("and"))) ) {
-                alt96=2;
+                alt98=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("521:17: ( or_key | and_key )", 96, 1, input);
+                    new NoViableAltException("522:17: ( or_key | and_key )", 98, 1, input);
 
                 throw nvae;
             }
@@ -14761,15 +14969,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("521:17: ( or_key | and_key )", 96, 0, input);
+                new NoViableAltException("522:17: ( or_key | and_key )", 98, 0, input);
 
             throw nvae;
         }
-        switch (alt96) {
+        switch (alt98) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:18: or_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:18: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred71864);
+                pushFollow(FOLLOW_or_key_in_synpred71868);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -14777,9 +14985,9 @@
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521:25: and_key
+                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:522:25: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred71866);
+                pushFollow(FOLLOW_and_key_in_synpred71870);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -14796,10 +15004,10 @@
 
     // $ANTLR start synpred8
     public final void synpred8_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:5: ( LEFT_PAREN )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:6: LEFT_PAREN
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:5: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:6: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82362); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82366); if (failed) return ;
 
         }
     }
@@ -14807,10 +15015,10 @@
 
     // $ANTLR start synpred9
     public final void synpred9_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:6: ( LEFT_SQUARE )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:603:8: LEFT_SQUARE
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:6: ( LEFT_SQUARE )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:8: LEFT_SQUARE
         {
-        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92423); if (failed) return ;
+        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92427); if (failed) return ;
 
         }
     }
@@ -14818,10 +15026,10 @@
 
     // $ANTLR start synpred10
     public final void synpred10_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:6: ( LEFT_PAREN )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:605:8: LEFT_PAREN
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:6: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:606:8: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102445); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102449); if (failed) return ;
 
         }
     }
@@ -14829,11 +15037,11 @@
 
     // $ANTLR start synpred11
     public final void synpred11_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:53: ( DOUBLE_PIPE and_restr_connective )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673:53: DOUBLE_PIPE and_restr_connective
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:53: ( DOUBLE_PIPE and_restr_connective )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:53: DOUBLE_PIPE and_restr_connective
         {
-        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred112918); if (failed) return ;
-        pushFollow(FOLLOW_and_restr_connective_in_synpred112921);
+        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred112922); if (failed) return ;
+        pushFollow(FOLLOW_and_restr_connective_in_synpred112925);
         and_restr_connective();
         _fsp--;
         if (failed) return ;
@@ -14844,11 +15052,11 @@
 
     // $ANTLR start synpred12
     public final void synpred12_fragment() throws RecognitionException {   
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:54: ( DOUBLE_AMPER constraint_expression )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:677:54: DOUBLE_AMPER constraint_expression
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:54: ( DOUBLE_AMPER constraint_expression )
+        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:54: DOUBLE_AMPER constraint_expression
         {
-        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred122948); if (failed) return ;
-        pushFollow(FOLLOW_constraint_expression_in_synpred122951);
+        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred122952); if (failed) return ;
+        pushFollow(FOLLOW_constraint_expression_in_synpred122955);
         constraint_expression();
         _fsp--;
         if (failed) return ;
@@ -15036,197 +15244,170 @@
     protected DFA48 dfa48 = new DFA48(this);
     protected DFA53 dfa53 = new DFA53(this);
     protected DFA57 dfa57 = new DFA57(this);
-    protected DFA59 dfa59 = new DFA59(this);
-    protected DFA61 dfa61 = new DFA61(this);
     protected DFA74 dfa74 = new DFA74(this);
     protected DFA75 dfa75 = new DFA75(this);
     static final String DFA5_eotS =
-        "\u0085\uffff";
+        "\162\uffff";
     static final String DFA5_eofS =
-        "\3\uffff\1\14\1\20\10\uffff\1\14\14\uffff\2\14\4\uffff\1\14\5\uffff"+
-        "\1\20\1\uffff\1\20\5\uffff\1\14\5\uffff\1\106\1\uffff\1\106\1\20"+
-        "\5\uffff\2\14\1\uffff\1\14\3\uffff\1\14\4\uffff\2\20\1\uffff\1\20"+
-        "\3\uffff\1\20\5\uffff\2\14\1\uffff\1\14\2\20\5\uffff\1\14\1\uffff"+
-        "\2\14\4\uffff\1\20\1\uffff\2\20\3\uffff\1\14\4\uffff\1\20\1\uffff"+
-        "\1\14\5\uffff\1\20\7\uffff";
+        "\3\uffff\1\17\1\22\11\uffff\1\17\4\uffff\1\17\6\uffff\2\17\10\uffff"+
+        "\1\22\3\uffff\1\22\2\71\1\17\11\uffff\1\22\5\uffff\2\17\4\uffff"+
+        "\2\17\1\uffff\2\22\1\uffff\1\22\3\uffff\1\22\1\uffff\3\17\2\22\4"+
+        "\uffff\1\17\1\uffff\2\17\1\22\1\uffff\2\22\4\uffff\1\17\1\22\5\uffff"+
+        "\1\17\1\22\7\uffff";
     static final String DFA5_minS =
-        "\2\125\1\uffff\2\124\3\uffff\2\125\1\uffff\1\125\1\uffff\1\125\1"+
-        "\154\2\uffff\1\125\1\uffff\4\125\3\0\3\125\1\154\2\uffff\1\124\3"+
-        "\125\2\0\1\125\1\0\1\125\1\0\1\125\1\154\1\125\1\uffff\1\125\2\0"+
-        "\3\125\1\124\1\0\1\124\12\125\3\0\1\125\1\0\1\uffff\1\4\5\125\3"+
-        "\0\1\125\1\154\1\133\1\125\1\154\1\133\2\125\1\4\4\125\1\154\2\125"+
-        "\1\154\4\125\4\4\4\125\1\133\1\154\1\133\1\125\4\4\3\125\5\4\1\125"+
-        "\7\4";
+        "\2\126\1\uffff\2\125\3\uffff\1\126\1\155\2\126\2\uffff\1\126\1\uffff"+
+        "\1\126\2\uffff\1\125\3\126\3\0\3\126\1\155\2\uffff\1\0\4\126\3\0"+
+        "\1\126\2\125\1\126\2\0\1\uffff\3\126\2\uffff\1\0\2\126\1\0\1\4\1"+
+        "\uffff\4\126\3\0\7\126\3\0\1\126\1\4\5\126\4\4\10\126\4\4\2\126"+
+        "\5\4\2\126\7\4";
     static final String DFA5_maxS =
-        "\1\125\1\160\1\uffff\2\155\3\uffff\1\134\1\160\1\uffff\1\125\1\uffff"+
-        "\1\125\1\154\2\uffff\1\160\1\uffff\1\153\1\156\1\125\1\155\3\0\2"+
-        "\155\1\125\1\154\2\uffff\1\153\1\160\1\153\1\125\2\0\1\155\1\0\1"+
-        "\155\1\0\1\125\1\154\1\125\1\uffff\1\160\2\0\1\160\2\153\1\160\1"+
-        "\0\1\132\2\160\3\153\1\125\2\155\1\125\1\155\3\0\1\155\1\0\1\uffff"+
-        "\1\171\1\125\2\155\1\125\1\155\3\0\1\155\1\154\1\153\1\125\1\154"+
-        "\1\153\1\155\1\160\1\171\1\156\1\155\1\160\1\153\1\154\2\153\1\154"+
-        "\1\155\1\125\2\155\4\171\1\155\1\125\2\155\1\153\1\154\1\153\1\155"+
-        "\4\171\1\155\1\153\1\155\5\171\1\155\7\171";
+        "\1\126\1\161\1\uffff\2\156\3\uffff\1\126\1\155\1\161\1\135\2\uffff"+
+        "\1\126\1\uffff\1\161\2\uffff\2\154\1\126\1\156\3\0\2\156\1\126\1"+
+        "\155\2\uffff\1\0\1\157\1\161\1\126\1\156\3\0\1\156\1\161\1\133\1"+
+        "\161\2\0\1\uffff\1\161\2\154\2\uffff\1\0\2\161\1\0\1\172\1\uffff"+
+        "\1\126\2\156\1\126\3\0\2\156\1\126\2\156\1\126\1\156\3\0\1\156\1"+
+        "\172\1\157\1\156\1\161\1\156\1\161\4\172\1\156\1\126\3\156\1\126"+
+        "\2\156\4\172\2\156\5\172\2\156\7\172";
     static final String DFA5_acceptS =
-        "\2\uffff\1\1\2\uffff\3\1\2\uffff\1\10\1\uffff\1\3\2\uffff\1\7\1"+
-        "\1\1\uffff\1\6\13\uffff\1\2\1\4\15\uffff\1\5\30\uffff\1\4\76\uffff";
+        "\2\uffff\1\1\2\uffff\3\1\4\uffff\1\10\1\7\1\uffff\1\3\1\uffff\1"+
+        "\6\1\1\13\uffff\1\2\1\4\16\uffff\1\5\3\uffff\2\5\5\uffff\1\4\70"+
+        "\uffff";
     static final String DFA5_specialS =
-        "\1\74\1\72\1\uffff\1\7\1\11\3\uffff\1\70\1\161\1\uffff\1\65\1\uffff"+
-        "\1\162\1\52\2\uffff\1\31\1\uffff\1\21\1\14\1\45\1\123\1\71\1\157"+
-        "\1\126\1\116\1\102\1\112\1\115\2\uffff\1\13\1\75\1\55\1\40\1\17"+
-        "\1\2\1\165\1\16\1\117\1\156\1\24\1\147\1\142\1\uffff\1\20\1\121"+
-        "\1\144\1\37\1\160\1\36\1\120\1\134\1\34\1\27\1\63\1\163\1\50\1\3"+
-        "\1\26\1\145\1\42\1\46\1\35\1\146\1\4\1\155\1\133\1\150\1\uffff\1"+
-        "\131\1\167\1\114\1\1\1\41\1\73\1\47\1\153\1\5\1\125\1\77\1\141\1"+
-        "\127\1\43\1\67\1\51\1\53\1\62\1\76\1\32\1\132\1\154\1\110\1\164"+
-        "\1\103\1\111\1\66\1\25\1\33\1\152\1\23\1\101\1\57\1\44\1\130\1\166"+
-        "\1\10\1\107\1\64\1\106\1\56\1\0\1\61\1\15\1\140\1\124\1\54\1\6\1"+
-        "\30\1\137\1\143\1\22\1\100\1\151\1\12\1\105\1\60\1\113\1\136\1\135"+
-        "\1\122\1\104}>";
+        "\1\112\1\114\1\uffff\1\21\1\34\3\uffff\1\64\1\17\1\123\1\20\2\uffff"+
+        "\1\113\1\uffff\1\66\2\uffff\1\40\1\67\1\137\1\77\1\1\1\110\1\52"+
+        "\1\37\1\22\1\134\1\70\2\uffff\1\3\1\122\1\125\1\50\1\76\1\126\1"+
+        "\107\1\16\1\73\1\120\1\111\1\41\1\33\1\115\1\uffff\1\117\1\5\1\7"+
+        "\2\uffff\1\23\1\133\1\4\1\140\1\26\1\uffff\1\127\1\27\1\25\1\141"+
+        "\1\14\1\43\1\106\1\105\1\116\1\35\1\44\1\132\1\51\1\75\1\102\1\121"+
+        "\1\71\1\6\1\56\1\47\1\53\1\10\1\131\1\46\1\55\1\65\1\13\1\135\1"+
+        "\2\1\130\1\11\1\104\1\136\1\36\1\74\1\0\1\142\1\30\1\101\1\63\1"+
+        "\42\1\103\1\54\1\12\1\57\1\62\1\124\1\15\1\72\1\24\1\100\1\61\1"+
+        "\32\1\60\1\45\1\31}>";
     static final String[] DFA5_transitionS = {
             "\1\1",
-            "\1\3\3\uffff\1\4\1\6\3\uffff\1\7\1\5\20\uffff\1\2",
+            "\1\3\3\uffff\1\4\1\7\3\uffff\1\5\1\6\20\uffff\1\2",
             "",
-            "\1\15\1\11\1\13\1\14\1\12\1\uffff\1\10\20\uffff\1\16\1\uffff"+
-            "\1\17",
-            "\1\22\1\21\2\uffff\1\12\1\uffff\1\12\22\uffff\1\17",
+            "\1\16\1\12\1\10\1\17\1\14\1\uffff\1\13\20\uffff\1\11\1\uffff"+
+            "\1\15",
+            "\1\21\1\20\2\uffff\1\14\1\uffff\1\14\22\uffff\1\15",
             "",
             "",
             "",
-            "\1\23\4\uffff\1\12\1\uffff\1\24",
-            "\1\27\1\34\2\uffff\1\30\1\31\2\uffff\1\26\1\32\1\33\13\uffff"+
-            "\1\35\1\uffff\1\17\2\uffff\1\25",
+            "\1\23",
+            "\1\24",
+            "\1\30\1\34\2\uffff\1\31\1\27\2\uffff\1\26\1\33\1\32\13\uffff"+
+            "\1\35\1\uffff\1\15\2\uffff\1\25",
+            "\1\40\4\uffff\1\14\1\uffff\1\41",
             "",
-            "\1\40",
             "",
-            "\1\41",
             "\1\42",
             "",
+            "\1\45\1\34\2\uffff\1\46\1\47\2\uffff\1\26\1\50\1\44\13\uffff"+
+            "\1\35\1\uffff\1\15\2\uffff\1\43",
             "",
-            "\1\47\1\34\2\uffff\1\45\1\44\2\uffff\1\26\1\46\1\50\13\uffff"+
-            "\1\35\1\uffff\1\17\2\uffff\1\43",
             "",
-            "\1\51\1\52\3\uffff\1\12\1\54\1\24\1\12\15\uffff\1\53",
-            "\1\12\2\uffff\1\12\1\uffff\1\12\23\uffff\1\55",
-            "\1\56",
-            "\1\57\4\uffff\1\60\22\uffff\1\17",
+            "\1\17\1\51\1\10\1\17\23\uffff\1\11",
+            "\1\52\25\uffff\1\11",
+            "\1\53",
+            "\1\54\4\uffff\1\55\22\uffff\1\15",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\1\61\5\uffff\1\17\21\uffff\1\17",
-            "\1\61\5\uffff\1\17\21\uffff\1\17",
-            "\1\62",
-            "\1\63",
+            "\1\57\5\uffff\1\15\21\uffff\1\15",
+            "\1\57\5\uffff\1\15\21\uffff\1\15",
+            "\1\60",
+            "\1\61",
             "",
             "",
-            "\1\14\1\64\1\13\1\14\23\uffff\1\16",
-            "\1\65\1\22\2\uffff\2\14\3\uffff\2\14\13\uffff\1\22\4\uffff\1"+
-            "\14",
-            "\1\66\25\uffff\1\16",
-            "\1\67",
             "\1\uffff",
+            "\1\14\2\uffff\1\14\1\uffff\1\14\23\uffff\1\63",
+            "\1\64\1\21\2\uffff\2\17\3\uffff\2\17\13\uffff\1\21\4\uffff\1"+
+            "\17",
+            "\1\65",
+            "\1\66\5\uffff\1\15\21\uffff\1\15",
             "\1\uffff",
-            "\1\70\5\uffff\1\17\21\uffff\1\17",
             "\1\uffff",
-            "\1\70\5\uffff\1\17\21\uffff\1\17",
             "\1\uffff",
-            "\1\71",
-            "\1\72",
-            "\1\73",
-            "",
-            "\1\61\3\uffff\1\76\1\uffff\1\17\2\uffff\1\75\16\uffff\1\17\2"+
-            "\uffff\1\74",
+            "\1\66\5\uffff\1\15\21\uffff\1\15",
+            "\1\71\1\67\3\uffff\1\17\1\70\3\uffff\2\17\20\uffff\1\17",
+            "\2\71\4\uffff\1\63",
+            "\1\57\3\uffff\1\74\1\uffff\1\15\2\uffff\1\73\16\uffff\1\15\2"+
+            "\uffff\1\72",
             "\1\uffff",
             "\1\uffff",
-            "\1\102\3\uffff\1\103\1\101\2\uffff\1\17\1\104\1\100\15\uffff"+
-            "\1\17\2\uffff\1\77",
-            "\1\22\1\34\3\uffff\1\12\20\uffff\1\35",
-            "\1\22\4\uffff\1\12\20\uffff\1\35",
-            "\1\106\1\105\3\uffff\1\14\1\107\3\uffff\2\14\20\uffff\1\14",
+            "",
+            "\1\100\3\uffff\1\76\1\77\2\uffff\1\15\1\102\1\101\15\uffff\1"+
+            "\15\2\uffff\1\75",
+            "\1\21\1\34\3\uffff\1\14\20\uffff\1\35",
+            "\1\21\4\uffff\1\14\20\uffff\1\35",
+            "",
+            "",
             "\1\uffff",
-            "\2\106\4\uffff\1\55",
-            "\1\70\3\uffff\1\112\1\uffff\1\17\2\uffff\1\111\16\uffff\1\17"+
-            "\2\uffff\1\110",
-            "\1\117\3\uffff\1\116\1\115\2\uffff\1\17\1\120\1\114\15\uffff"+
-            "\1\17\2\uffff\1\113",
-            "\1\122\1\52\3\uffff\1\12\20\uffff\1\121",
-            "\1\122\4\uffff\1\12\1\54\1\24\16\uffff\1\53",
-            "\1\125\1\123\4\uffff\1\54\1\24\16\uffff\1\124",
-            "\1\126",
-            "\1\61\5\uffff\1\17\21\uffff\1\17",
-            "\1\61\5\uffff\1\17\21\uffff\1\17",
-            "\1\127",
-            "\1\61\5\uffff\1\17\21\uffff\1\17",
+            "\1\66\3\uffff\1\105\1\uffff\1\15\2\uffff\1\104\16\uffff\1\15"+
+            "\2\uffff\1\103",
+            "\1\110\3\uffff\1\111\1\112\2\uffff\1\15\1\113\1\107\15\uffff"+
+            "\1\15\2\uffff\1\106",
             "\1\uffff",
+            "\122\17\1\114\6\17\1\115\35\17",
+            "",
+            "\1\116",
+            "\1\57\5\uffff\1\15\21\uffff\1\15",
+            "\1\57\5\uffff\1\15\21\uffff\1\15",
+            "\1\117",
             "\1\uffff",
             "\1\uffff",
-            "\1\61\5\uffff\1\17\21\uffff\1\17",
             "\1\uffff",
-            "",
-            "\121\14\1\130\6\14\1\131\35\14",
-            "\1\132",
-            "\1\70\5\uffff\1\17\21\uffff\1\17",
-            "\1\70\5\uffff\1\17\21\uffff\1\17",
-            "\1\133",
-            "\1\70\5\uffff\1\17\21\uffff\1\17",
+            "\1\57\5\uffff\1\15\21\uffff\1\15",
+            "\1\57\5\uffff\1\15\21\uffff\1\15",
+            "\1\120",
+            "\1\66\5\uffff\1\15\21\uffff\1\15",
+            "\1\66\5\uffff\1\15\21\uffff\1\15",
+            "\1\121",
+            "\1\66\5\uffff\1\15\21\uffff\1\15",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\1\70\5\uffff\1\17\21\uffff\1\17",
-            "\1\134",
-            "\1\54\1\24\16\uffff\1\135",
-            "\1\136",
-            "\1\137",
-            "\1\54\1\24\16\uffff\1\140",
-            "\1\61\5\uffff\1\17\2\uffff\1\141\16\uffff\1\17",
-            "\1\61\3\uffff\1\143\1\uffff\1\17\2\uffff\1\144\16\uffff\1\17"+
-            "\2\uffff\1\142",
-            "\121\14\1\147\1\145\4\14\1\150\1\131\16\14\1\146\16\14",
-            "\1\14\30\uffff\1\55",
-            "\1\70\5\uffff\1\17\2\uffff\1\151\16\uffff\1\17",
-            "\1\70\3\uffff\1\154\1\uffff\1\17\2\uffff\1\153\16\uffff\1\17"+
-            "\2\uffff\1\152",
-            "\1\122\4\uffff\1\12\20\uffff\1\121",
-            "\1\155",
-            "\1\125\1\123\24\uffff\1\156",
-            "\1\125\5\uffff\1\54\1\24\16\uffff\1\124",
-            "\1\157",
-            "\1\61\5\uffff\1\17\21\uffff\1\17",
-            "\1\160",
-            "\1\61\5\uffff\1\17\21\uffff\1\17",
-            "\1\61\5\uffff\1\17\21\uffff\1\17",
-            "\121\14\1\161\44\14",
-            "\150\14\1\162\15\14",
-            "\127\14\1\150\1\131\16\14\1\163\16\14",
-            "\121\14\1\164\44\14",
-            "\1\70\5\uffff\1\17\21\uffff\1\17",
-            "\1\165",
-            "\1\70\5\uffff\1\17\21\uffff\1\17",
-            "\1\70\5\uffff\1\17\21\uffff\1\17",
-            "\1\54\1\24\16\uffff\1\135",
-            "\1\166",
-            "\1\54\1\24\16\uffff\1\140",
-            "\1\61\5\uffff\1\17\2\uffff\1\167\16\uffff\1\17",
-            "\121\14\1\147\1\145\24\14\1\170\16\14",
-            "\121\14\1\147\5\14\1\150\1\131\16\14\1\146\16\14",
-            "\150\14\1\171\15\14",
-            "\121\14\1\174\1\172\4\14\1\150\1\131\16\14\1\173\16\14",
-            "\1\70\5\uffff\1\17\2\uffff\1\175\16\uffff\1\17",
-            "\1\125\25\uffff\1\156",
-            "\1\61\5\uffff\1\17\21\uffff\1\17",
-            "\150\14\1\176\15\14",
-            "\127\14\1\150\1\131\16\14\1\163\16\14",
-            "\121\14\1\177\44\14",
-            "\150\14\1\u0080\15\14",
-            "\127\14\1\150\1\131\16\14\1\u0081\16\14",
-            "\1\70\5\uffff\1\17\21\uffff\1\17",
-            "\121\14\1\147\25\14\1\170\16\14",
-            "\121\14\1\174\1\172\24\14\1\u0082\16\14",
-            "\121\14\1\174\5\14\1\150\1\131\16\14\1\173\16\14",
-            "\150\14\1\u0083\15\14",
-            "\150\14\1\u0084\15\14",
-            "\127\14\1\150\1\131\16\14\1\u0081\16\14",
-            "\121\14\1\174\25\14\1\u0082\16\14"
+            "\1\66\5\uffff\1\15\21\uffff\1\15",
+            "\122\17\1\125\1\124\4\17\1\123\1\115\16\17\1\122\16\17",
+            "\1\17\30\uffff\1\63",
+            "\1\57\5\uffff\1\15\2\uffff\1\126\16\uffff\1\15",
+            "\1\57\3\uffff\1\131\1\uffff\1\15\2\uffff\1\130\16\uffff\1\15"+
+            "\2\uffff\1\127",
+            "\1\66\5\uffff\1\15\2\uffff\1\132\16\uffff\1\15",
+            "\1\66\3\uffff\1\134\1\uffff\1\15\2\uffff\1\135\16\uffff\1\15"+
+            "\2\uffff\1\133",
+            "\151\17\1\136\15\17",
+            "\122\17\1\137\44\17",
+            "\122\17\1\140\44\17",
+            "\130\17\1\123\1\115\16\17\1\141\16\17",
+            "\1\57\5\uffff\1\15\21\uffff\1\15",
+            "\1\142",
+            "\1\57\5\uffff\1\15\21\uffff\1\15",
+            "\1\57\5\uffff\1\15\21\uffff\1\15",
+            "\1\66\5\uffff\1\15\21\uffff\1\15",
+            "\1\143",
+            "\1\66\5\uffff\1\15\21\uffff\1\15",
+            "\1\66\5\uffff\1\15\21\uffff\1\15",
+            "\122\17\1\125\5\17\1\123\1\115\16\17\1\122\16\17",
+            "\122\17\1\146\1\145\4\17\1\123\1\115\16\17\1\144\16\17",
+            "\122\17\1\125\1\124\24\17\1\147\16\17",
+            "\151\17\1\150\15\17",
+            "\1\57\5\uffff\1\15\2\uffff\1\151\16\uffff\1\15",
+            "\1\66\5\uffff\1\15\2\uffff\1\152\16\uffff\1\15",
+            "\151\17\1\153\15\17",
+            "\122\17\1\154\44\17",
+            "\130\17\1\123\1\115\16\17\1\155\16\17",
+            "\151\17\1\156\15\17",
+            "\130\17\1\123\1\115\16\17\1\141\16\17",
+            "\1\57\5\uffff\1\15\21\uffff\1\15",
+            "\1\66\5\uffff\1\15\21\uffff\1\15",
+            "\122\17\1\146\5\17\1\123\1\115\16\17\1\144\16\17",
+            "\122\17\1\146\1\145\24\17\1\157\16\17",
+            "\151\17\1\160\15\17",
+            "\122\17\1\125\25\17\1\147\16\17",
+            "\151\17\1\161\15\17",
+            "\130\17\1\123\1\115\16\17\1\155\16\17",
+            "\122\17\1\146\25\17\1\157\16\17"
     };
 
     static final short[] DFA5_eot = DFA.unpackEncodedString(DFA5_eotS);
@@ -15259,263 +15440,257 @@
             this.transition = DFA5_transition;
         }
         public String getDescription() {
-            return "292:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );";
+            return "293:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA5_112 = input.LA(1);
+                        int LA5_93 = input.LA(1);
 
                          
-                        int index5_112 = input.index();
+                        int index5_93 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_112==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 119;}
+                        if ( (LA5_93==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
-                        else if ( (LA5_112==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_93==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
-                        else if ( (LA5_112==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+                        else if ( (LA5_93==COMMA||LA5_93==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_112==COMMA||LA5_112==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_112);
+                        input.seek(index5_93);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA5_74 = input.LA(1);
+                        int LA5_23 = input.LA(1);
 
                          
-                        int index5_74 = input.index();
+                        int index5_23 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_74==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+                        if ( ((validateIdentifierKey("import"))) ) {s = 15;}
 
-                        else if ( (LA5_74==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+                        else if ( ((validateIdentifierKey("function"))) ) {s = 46;}
 
-                        else if ( (LA5_74==COMMA||LA5_74==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
 
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 12;}
+
                          
-                        input.seek(index5_74);
+                        input.seek(index5_23);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA5_37 = input.LA(1);
+                        int LA5_86 = input.LA(1);
 
                          
-                        int index5_37 = input.index();
+                        int index5_86 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+                        if ( (LA5_86==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+                        else if ( (LA5_86==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
+                        else if ( (LA5_86==COMMA||LA5_86==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
+
                          
-                        input.seek(index5_37);
+                        input.seek(index5_86);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA5_59 = input.LA(1);
+                        int LA5_32 = input.LA(1);
 
                          
-                        int index5_59 = input.index();
+                        int index5_32 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_59==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 83;}
+                        if ( ((validateIdentifierKey("function"))) ) {s = 50;}
 
-                        else if ( (LA5_59==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 84;}
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 12;}
 
-                        else if ( (LA5_59==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 85;}
-
-                        else if ( (LA5_59==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
-
-                        else if ( (LA5_59==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
-
                          
-                        input.seek(index5_59);
+                        input.seek(index5_32);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA5_66 = input.LA(1);
+                        int LA5_54 = input.LA(1);
 
                          
-                        int index5_66 = input.index();
+                        int index5_54 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+                        if ( (LA5_54==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 70;}
 
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+                        else if ( (LA5_54==INT) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 71;}
 
+                        else if ( (LA5_54==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 72;}
+
+                        else if ( (LA5_54==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 73;}
+
+                        else if ( (LA5_54==COLON||LA5_54==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
+
+                        else if ( (LA5_54==LEFT_PAREN) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 74;}
+
+                        else if ( (LA5_54==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 75;}
+
                          
-                        input.seek(index5_66);
+                        input.seek(index5_54);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA5_79 = input.LA(1);
+                        int LA5_48 = input.LA(1);
 
                          
-                        int index5_79 = input.index();
+                        int index5_48 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+                        if ( (LA5_48==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
 
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+                        else if ( (LA5_48==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 12;}
 
+                        else if ( (LA5_48==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 28;}
+
+                        else if ( (LA5_48==ID) && ((validateIdentifierKey("template")))) {s = 17;}
+
                          
-                        input.seek(index5_79);
+                        input.seek(index5_48);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA5_118 = input.LA(1);
+                        int LA5_75 = input.LA(1);
 
                          
-                        int index5_118 = input.index();
+                        int index5_75 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_118==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 85;}
+                        if ( (LA5_75==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
-                        else if ( (LA5_118==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 110;}
+                        else if ( (LA5_75==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
+                        else if ( (LA5_75==COMMA||LA5_75==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
+
                          
-                        input.seek(index5_118);
+                        input.seek(index5_75);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA5_3 = input.LA(1);
+                        int LA5_49 = input.LA(1);
 
                          
-                        int index5_3 = input.index();
+                        int index5_49 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_3==LEFT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 8;}
+                        if ( (LA5_49==ID) && ((validateIdentifierKey("template")))) {s = 17;}
 
-                        else if ( (LA5_3==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import"))!
 )||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "f!
 unction") )&&(validateIdentifierKey("import")))||((validateLT(1, "impo
rt") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("rule"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validate!
 LT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("imp!
 ort")))||((validateLT(1, "import") && validateLT(2, "function") )&&(va
lidateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, !
 "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(valid!
 ateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(
2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function")!
  )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((valida!
 teLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierK
ey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||((validateLT(1, "import") && validateLT(2, "function") )&&!
 (validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT!
 (1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("
import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||!
 ((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "func!
 tion") )&&(validateIdentifierKey("import")))||((validateLT(1, "import"
) && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdenti!
 fierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") &!
 & validateLT(2, "function") )&&(validateIdentifierKey("import")))||((v
alidateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function!
 ") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("function"))||((validateLT(1, "import") && validateLT(2, "function") )&&(vali!
 dateIdentifierKey("import")))||((validateLT(1, "import") && validateLT
(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import!
 ")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2,!
  "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "i
mport") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {s = 9;}
+                        else if ( (LA5_49==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
 
-                        else if ( (LA5_3==END) && ((validateIdentifierKey("query")))) {s = 10;}
+                        else if ( (LA5_49==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 12;}
 
-                        else if ( (LA5_3==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 11;}
-
-                        else if ( (LA5_3==EOF||LA5_3==DOT_STAR) && ((validateIdentifierKey("import")))) {s = 12;}
-
-                        else if ( (LA5_3==SEMICOLON) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 13;}
-
-                        else if ( (LA5_3==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 14;}
-
-                        else if ( (LA5_3==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_3);
+                        input.seek(index5_49);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA5_107 = input.LA(1);
+                        int LA5_79 = input.LA(1);
 
                          
-                        int index5_107 = input.index();
+                        int index5_79 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_107==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+                        if ( (LA5_79==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 87;}
 
-                        else if ( (LA5_107==COMMA||LA5_107==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( (LA5_79==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 88;}
 
-                        else if ( (LA5_107==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+                        else if ( (LA5_79==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
+                        else if ( (LA5_79==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
+
+                        else if ( (LA5_79==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 89;}
+
+                        else if ( (LA5_79==COMMA||LA5_79==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
+
                          
-                        input.seek(index5_107);
+                        input.seek(index5_79);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA5_4 = input.LA(1);
+                        int LA5_88 = input.LA(1);
 
                          
-                        int index5_4 = input.index();
+                        int index5_88 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_4==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+                        if ( (LA5_88==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_4==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 17;}
+                        else if ( (LA5_88==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
-                        else if ( (LA5_4==END||LA5_4==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+                        else if ( (LA5_88==COMMA||LA5_88==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_4==SEMICOLON) && ((validateIdentifierKey("template")))) {s = 18;}
-
-                        else if ( (LA5_4==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_4);
+                        input.seek(index5_88);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA5_125 = input.LA(1);
+                        int LA5_101 = input.LA(1);
 
                          
-                        int index5_125 = input.index();
+                        int index5_101 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_125==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+                        if ( (LA5_101==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 108;}
 
-                        else if ( (LA5_125==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+                        else if ( ((LA5_101>=VT_COMPILATION_UNIT && LA5_101<=SEMICOLON)||(LA5_101>=DOT && LA5_101<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_125==COMMA||LA5_125==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_125);
+                        input.seek(index5_101);
                         if ( s>=0 ) return s;
                         break;
                     case 11 : 
-                        int LA5_32 = input.LA(1);
+                        int LA5_84 = input.LA(1);
 
                          
-                        int index5_32 = input.index();
+                        int index5_84 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_32==EOF||LA5_32==SEMICOLON||LA5_32==DOT_STAR) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( (LA5_84==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 96;}
 
-                        else if ( (LA5_32==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 52;}
+                        else if ( ((LA5_84>=VT_COMPILATION_UNIT && LA5_84<=SEMICOLON)||(LA5_84>=DOT && LA5_84<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_32==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 11;}
-
-                        else if ( (LA5_32==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 14;}
-
                          
-                        input.seek(index5_32);
+                        input.seek(index5_84);
                         if ( s>=0 ) return s;
                         break;
                     case 12 : 
-                        int LA5_20 = input.LA(1);
+                        int LA5_62 = input.LA(1);
 
                          
-                        int index5_20 = input.index();
+                        int index5_62 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_20==ID||LA5_20==END||LA5_20==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+                        if ( ((validateIdentifierKey("import"))) ) {s = 15;}
 
-                        else if ( (LA5_20==LEFT_CURLY) && ((validateIdentifierKey("function")))) {s = 45;}
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
 
                          
-                        input.seek(index5_20);
+                        input.seek(index5_62);
                         if ( s>=0 ) return s;
                         break;
                     case 13 : 
-                        int LA5_114 = input.LA(1);
+                        int LA5_105 = input.LA(1);
 
                          
-                        int index5_114 = input.index();
+                        int index5_105 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_114==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
+                        if ( (LA5_105==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_114==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 102;}
+                        else if ( (LA5_105==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
-                        else if ( (LA5_114==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+                        else if ( (LA5_105==COMMA||LA5_105==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_114==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
-
-                        else if ( ((LA5_114>=VT_COMPILATION_UNIT && LA5_114<=SEMICOLON)||(LA5_114>=DOT && LA5_114<=LEFT_PAREN)||(LA5_114>=COLON && LA5_114<=NULL)||(LA5_114>=RIGHT_SQUARE && LA5_114<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
-
                          
-                        input.seek(index5_114);
+                        input.seek(index5_105);
                         if ( s>=0 ) return s;
                         break;
                     case 14 : 
@@ -15525,426 +15700,446 @@
                         int index5_39 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
 
-                        else if ( ((validateIdentifierKey("template"))) ) {s = 18;}
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
 
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 12;}
 
-                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
-
                          
                         input.seek(index5_39);
                         if ( s>=0 ) return s;
                         break;
                     case 15 : 
-                        int LA5_36 = input.LA(1);
+                        int LA5_9 = input.LA(1);
 
                          
-                        int index5_36 = input.index();
+                        int index5_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+                        if ( (LA5_9==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 20;}
 
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
-
                          
-                        input.seek(index5_36);
+                        input.seek(index5_9);
                         if ( s>=0 ) return s;
                         break;
                     case 16 : 
-                        int LA5_46 = input.LA(1);
+                        int LA5_11 = input.LA(1);
 
                          
-                        int index5_46 = input.index();
+                        int index5_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_46==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 60;}
+                        if ( (LA5_11==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 32;}
 
-                        else if ( (LA5_46==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 61;}
+                        else if ( (LA5_11==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 33;}
 
-                        else if ( (LA5_46==COMMA||LA5_46==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( (LA5_11==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 12;}
 
-                        else if ( (LA5_46==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
-
-                        else if ( (LA5_46==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 62;}
-
-                        else if ( (LA5_46==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
-
                          
-                        input.seek(index5_46);
+                        input.seek(index5_11);
                         if ( s>=0 ) return s;
                         break;
                     case 17 : 
-                        int LA5_19 = input.LA(1);
+                        int LA5_3 = input.LA(1);
 
                          
-                        int index5_19 = input.index();
+                        int index5_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_19==LEFT_PAREN||LA5_19==COLON) && ((validateIdentifierKey("query")))) {s = 10;}
+                        if ( (LA5_3==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 8;}
 
-                        else if ( (LA5_19==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 41;}
+                        else if ( (LA5_3==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 9;}
 
-                        else if ( (LA5_19==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 42;}
+                        else if ( (LA5_3==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import"))!
 )||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "f!
 unction") )&&(validateIdentifierKey("import")))||((validateLT(1, "impo
rt") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("rule"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validate!
 LT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("imp!
 ort")))||((validateLT(1, "import") && validateLT(2, "function") )&&(va
lidateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, !
 "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(valid!
 ateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(
2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function")!
  )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((valida!
 teLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierK
ey("import")))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&!
 (validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIde!
 ntifierKey("template"))||((validateLT(1, "import") && validateLT(2, "f
unction") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||!
 ((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "func!
 tion") )&&(validateIdentifierKey("import")))||((validateLT(1, "import"
) && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdenti!
 fierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") &!
 & validateLT(2, "function") )&&(validateIdentifierKey("import")))||((v
alidateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function!
 ") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("function"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(vali!
 dateIdentifierKey("import")))||((validateLT(1, "import") && validateLT
(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import!
 ")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2,!
  "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "i
mport") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {s = 10;}
 
-                        else if ( (LA5_19==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 43;}
+                        else if ( (LA5_3==LEFT_PAREN) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 11;}
 
-                        else if ( (LA5_19==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+                        else if ( (LA5_3==END) && ((validateIdentifierKey("query")))) {s = 12;}
 
-                        else if ( (LA5_19==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+                        else if ( (LA5_3==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
+                        else if ( (LA5_3==SEMICOLON) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 14;}
+
+                        else if ( (LA5_3==EOF||LA5_3==DOT_STAR) && ((validateIdentifierKey("import")))) {s = 15;}
+
                          
-                        input.seek(index5_19);
+                        input.seek(index5_3);
                         if ( s>=0 ) return s;
                         break;
                     case 18 : 
-                        int LA5_122 = input.LA(1);
+                        int LA5_27 = input.LA(1);
 
                          
-                        int index5_122 = input.index();
+                        int index5_27 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_122==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 127;}
+                        if ( (LA5_27==COMMA||LA5_27==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( ((LA5_122>=VT_COMPILATION_UNIT && LA5_122<=SEMICOLON)||(LA5_122>=DOT && LA5_122<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_27==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
+                        else if ( (LA5_27==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
+
                          
-                        input.seek(index5_122);
+                        input.seek(index5_27);
                         if ( s>=0 ) return s;
                         break;
                     case 19 : 
-                        int LA5_101 = input.LA(1);
+                        int LA5_52 = input.LA(1);
 
                          
-                        int index5_101 = input.index();
+                        int index5_52 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_101==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 113;}
+                        if ( ((validateIdentifierKey("import"))) ) {s = 15;}
 
-                        else if ( ((LA5_101>=VT_COMPILATION_UNIT && LA5_101<=SEMICOLON)||(LA5_101>=DOT && LA5_101<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( ((validateIdentifierKey("template"))) ) {s = 17;}
 
                          
-                        input.seek(index5_101);
+                        input.seek(index5_52);
                         if ( s>=0 ) return s;
                         break;
                     case 20 : 
-                        int LA5_42 = input.LA(1);
+                        int LA5_107 = input.LA(1);
 
                          
-                        int index5_42 = input.index();
+                        int index5_107 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_42==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 57;}
+                        if ( (LA5_107==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 77;}
 
+                        else if ( (LA5_107==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 83;}
+
+                        else if ( ((LA5_107>=VT_COMPILATION_UNIT && LA5_107<=SEMICOLON)||(LA5_107>=DOT && LA5_107<=LEFT_PAREN)||(LA5_107>=COLON && LA5_107<=NULL)||(LA5_107>=RIGHT_SQUARE && LA5_107<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
+
+                        else if ( (LA5_107==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 100;}
+
+                        else if ( (LA5_107==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 102;}
+
                          
-                        input.seek(index5_42);
+                        input.seek(index5_107);
                         if ( s>=0 ) return s;
                         break;
                     case 21 : 
-                        int LA5_98 = input.LA(1);
+                        int LA5_60 = input.LA(1);
 
                          
-                        int index5_98 = input.index();
+                        int index5_60 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_98==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 112;}
+                        if ( (LA5_60==COMMA||LA5_60==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
+                        else if ( (LA5_60==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
+
+                        else if ( (LA5_60==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
+
                          
-                        input.seek(index5_98);
+                        input.seek(index5_60);
                         if ( s>=0 ) return s;
                         break;
                     case 22 : 
-                        int LA5_60 = input.LA(1);
+                        int LA5_56 = input.LA(1);
 
                          
-                        int index5_60 = input.index();
+                        int index5_56 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_60==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 86;}
+                        if ( (LA5_56==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 76;}
 
+                        else if ( ((LA5_56>=VT_COMPILATION_UNIT && LA5_56<=SEMICOLON)||(LA5_56>=DOT && LA5_56<=COMMA)||(LA5_56>=COLON && LA5_56<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
+
+                        else if ( (LA5_56==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 77;}
+
                          
-                        input.seek(index5_60);
+                        input.seek(index5_56);
                         if ( s>=0 ) return s;
                         break;
                     case 23 : 
-                        int LA5_55 = input.LA(1);
+                        int LA5_59 = input.LA(1);
 
                          
-                        int index5_55 = input.index();
+                        int index5_59 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_55==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 72;}
+                        if ( (LA5_59==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_55==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 73;}
+                        else if ( (LA5_59==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
-                        else if ( (LA5_55==COMMA||LA5_55==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( (LA5_59==COMMA||LA5_59==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_55==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
-
-                        else if ( (LA5_55==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 74;}
-
-                        else if ( (LA5_55==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
-
                          
-                        input.seek(index5_55);
+                        input.seek(index5_59);
                         if ( s>=0 ) return s;
                         break;
                     case 24 : 
-                        int LA5_119 = input.LA(1);
+                        int LA5_95 = input.LA(1);
 
                          
-                        int index5_119 = input.index();
+                        int index5_95 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_119==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( (LA5_95==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 77;}
 
-                        else if ( (LA5_119==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+                        else if ( (LA5_95==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 100;}
 
-                        else if ( (LA5_119==COMMA||LA5_119==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( ((LA5_95>=VT_COMPILATION_UNIT && LA5_95<=SEMICOLON)||(LA5_95>=DOT_STAR && LA5_95<=LEFT_PAREN)||(LA5_95>=COLON && LA5_95<=NULL)||(LA5_95>=RIGHT_SQUARE && LA5_95<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
+                        else if ( (LA5_95==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 83;}
+
+                        else if ( (LA5_95==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 101;}
+
+                        else if ( (LA5_95==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 102;}
+
                          
-                        input.seek(index5_119);
+                        input.seek(index5_95);
                         if ( s>=0 ) return s;
                         break;
                     case 25 : 
-                        int LA5_17 = input.LA(1);
+                        int LA5_113 = input.LA(1);
 
                          
-                        int index5_17 = input.index();
+                        int index5_113 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_17==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 35;}
+                        if ( ((LA5_113>=VT_COMPILATION_UNIT && LA5_113<=SEMICOLON)||(LA5_113>=DOT && LA5_113<=NULL)||(LA5_113>=RIGHT_SQUARE && LA5_113<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_17==COLON) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 22;}
+                        else if ( (LA5_113==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 102;}
 
-                        else if ( (LA5_17==LEFT_PAREN) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 36;}
+                        else if ( (LA5_113==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 111;}
 
-                        else if ( (LA5_17==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 37;}
-
-                        else if ( (LA5_17==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 38;}
-
-                        else if ( (LA5_17==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 39;}
-
-                        else if ( (LA5_17==INT) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 40;}
-
-                        else if ( (LA5_17==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 28;}
-
-                        else if ( (LA5_17==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
-
-                        else if ( (LA5_17==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_17);
+                        input.seek(index5_113);
                         if ( s>=0 ) return s;
                         break;
                     case 26 : 
-                        int LA5_90 = input.LA(1);
+                        int LA5_110 = input.LA(1);
 
                          
-                        int index5_90 = input.index();
+                        int index5_110 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_90==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 105;}
+                        if ( ((LA5_110>=VT_COMPILATION_UNIT && LA5_110<=SEMICOLON)||(LA5_110>=DOT && LA5_110<=NULL)||(LA5_110>=RIGHT_SQUARE && LA5_110<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_90==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+                        else if ( (LA5_110==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 85;}
 
-                        else if ( (LA5_90==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+                        else if ( (LA5_110==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
 
-                        else if ( (LA5_90==COMMA||LA5_90==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_90);
+                        input.seek(index5_110);
                         if ( s>=0 ) return s;
                         break;
                     case 27 : 
-                        int LA5_99 = input.LA(1);
+                        int LA5_44 = input.LA(1);
 
                          
-                        int index5_99 = input.index();
+                        int index5_44 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_99==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
 
-                        else if ( (LA5_99==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 12;}
 
-                        else if ( (LA5_99==COMMA||LA5_99==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_99);
+                        input.seek(index5_44);
                         if ( s>=0 ) return s;
                         break;
                     case 28 : 
-                        int LA5_54 = input.LA(1);
+                        int LA5_4 = input.LA(1);
 
                          
-                        int index5_54 = input.index();
+                        int index5_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_54==LEFT_PAREN) && ((validateIdentifierKey("function")))) {s = 45;}
+                        if ( (LA5_4==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 16;}
 
-                        else if ( (LA5_54==EOF||(LA5_54>=SEMICOLON && LA5_54<=ID)) && ((validateIdentifierKey("global")))) {s = 70;}
+                        else if ( (LA5_4==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
+                        else if ( (LA5_4==END||LA5_4==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 12;}
+
+                        else if ( (LA5_4==SEMICOLON) && ((validateIdentifierKey("template")))) {s = 17;}
+
+                        else if ( (LA5_4==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
                          
-                        input.seek(index5_54);
+                        input.seek(index5_4);
                         if ( s>=0 ) return s;
                         break;
                     case 29 : 
-                        int LA5_64 = input.LA(1);
+                        int LA5_67 = input.LA(1);
 
                          
-                        int index5_64 = input.index();
+                        int index5_67 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_64==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( (LA5_67==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 80;}
 
-                        else if ( (LA5_64==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
-
-                        else if ( (LA5_64==COMMA||LA5_64==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_64);
+                        input.seek(index5_67);
                         if ( s>=0 ) return s;
                         break;
                     case 30 : 
-                        int LA5_51 = input.LA(1);
+                        int LA5_91 = input.LA(1);
 
                          
-                        int index5_51 = input.index();
+                        int index5_91 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_51==ID) && ((validateIdentifierKey("template")))) {s = 18;}
+                        if ( (LA5_91==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 99;}
 
-                        else if ( (LA5_51==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
-
-                        else if ( (LA5_51==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
-
                          
-                        input.seek(index5_51);
+                        input.seek(index5_91);
                         if ( s>=0 ) return s;
                         break;
                     case 31 : 
-                        int LA5_49 = input.LA(1);
+                        int LA5_26 = input.LA(1);
 
                          
-                        int index5_49 = input.index();
+                        int index5_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_49==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 63;}
+                        if ( (LA5_26==COMMA||LA5_26==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_49==INT) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 64;}
+                        else if ( (LA5_26==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
-                        else if ( (LA5_49==LEFT_PAREN) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 65;}
+                        else if ( (LA5_26==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_49==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 66;}
-
-                        else if ( (LA5_49==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 67;}
-
-                        else if ( (LA5_49==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 68;}
-
-                        else if ( (LA5_49==COLON||LA5_49==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_49);
+                        input.seek(index5_26);
                         if ( s>=0 ) return s;
                         break;
                     case 32 : 
-                        int LA5_35 = input.LA(1);
+                        int LA5_19 = input.LA(1);
 
                          
-                        int index5_35 = input.index();
+                        int index5_19 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_35==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 55;}
+                        if ( (LA5_19==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 9;}
 
+                        else if ( (LA5_19==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 41;}
+
+                        else if ( (LA5_19==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 8;}
+
+                        else if ( (LA5_19==EOF||LA5_19==SEMICOLON||LA5_19==DOT_STAR) && ((validateIdentifierKey("import")))) {s = 15;}
+
                          
-                        input.seek(index5_35);
+                        input.seek(index5_19);
                         if ( s>=0 ) return s;
                         break;
                     case 33 : 
-                        int LA5_75 = input.LA(1);
+                        int LA5_43 = input.LA(1);
 
                          
-                        int index5_75 = input.index();
+                        int index5_43 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_75==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 91;}
+                        if ( (LA5_43==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 58;}
 
+                        else if ( (LA5_43==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 59;}
+
+                        else if ( (LA5_43==COMMA||LA5_43==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
+
+                        else if ( (LA5_43==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
+
+                        else if ( (LA5_43==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
+
+                        else if ( (LA5_43==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 60;}
+
                          
-                        input.seek(index5_75);
+                        input.seek(index5_43);
                         if ( s>=0 ) return s;
                         break;
                     case 34 : 
-                        int LA5_62 = input.LA(1);
+                        int LA5_98 = input.LA(1);
 
                          
-                        int index5_62 = input.index();
+                        int index5_98 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_62==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( (LA5_98==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 105;}
 
-                        else if ( (LA5_62==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+                        else if ( (LA5_98==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
-                        else if ( (LA5_62==COMMA||LA5_62==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( (LA5_98==COMMA||LA5_98==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
+                        else if ( (LA5_98==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
+
                          
-                        input.seek(index5_62);
+                        input.seek(index5_98);
                         if ( s>=0 ) return s;
                         break;
                     case 35 : 
-                        int LA5_84 = input.LA(1);
+                        int LA5_63 = input.LA(1);
 
                          
-                        int index5_84 = input.index();
+                        int index5_63 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_84==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 95;}
+                        if ( ((validateIdentifierKey("import"))) ) {s = 15;}
 
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
+
                          
-                        input.seek(index5_84);
+                        input.seek(index5_63);
                         if ( s>=0 ) return s;
                         break;
                     case 36 : 
-                        int LA5_104 = input.LA(1);
+                        int LA5_68 = input.LA(1);
 
                          
-                        int index5_104 = input.index();
+                        int index5_68 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA5_104>=VT_COMPILATION_UNIT && LA5_104<=SEMICOLON)||(LA5_104>=DOT && LA5_104<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( (LA5_68==COMMA||LA5_68==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_104==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 116;}
+                        else if ( (LA5_68==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
+                        else if ( (LA5_68==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
                          
-                        input.seek(index5_104);
+                        input.seek(index5_68);
                         if ( s>=0 ) return s;
                         break;
                     case 37 : 
-                        int LA5_21 = input.LA(1);
+                        int LA5_112 = input.LA(1);
 
                          
-                        int index5_21 = input.index();
+                        int index5_112 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_21==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 46;}
+                        if ( (LA5_112==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 77;}
 
+                        else if ( (LA5_112==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 83;}
+
+                        else if ( ((LA5_112>=VT_COMPILATION_UNIT && LA5_112<=LEFT_PAREN)||(LA5_112>=COLON && LA5_112<=NULL)||(LA5_112>=RIGHT_SQUARE && LA5_112<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
+
+                        else if ( (LA5_112==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 109;}
+
                          
-                        input.seek(index5_21);
+                        input.seek(index5_112);
                         if ( s>=0 ) return s;
                         break;
                     case 38 : 
-                        int LA5_63 = input.LA(1);
+                        int LA5_81 = input.LA(1);
 
                          
-                        int index5_63 = input.index();
+                        int index5_81 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_63==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 87;}
+                        if ( (LA5_81==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 91;}
 
+                        else if ( (LA5_81==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 92;}
+
+                        else if ( (LA5_81==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 93;}
+
+                        else if ( (LA5_81==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
+                        else if ( (LA5_81==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_81==COMMA||LA5_81==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
+
                          
-                        input.seek(index5_63);
+                        input.seek(index5_81);
                         if ( s>=0 ) return s;
                         break;
                     case 39 : 
@@ -15954,1374 +16149,1023 @@
                         int index5_77 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+                        if ( (LA5_77==LEFT_CURLY) && ((validateIdentifierKey("function")))) {s = 51;}
 
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+                        else if ( (LA5_77==EOF||LA5_77==ID) && ((validateIdentifierKey("import")))) {s = 15;}
 
                          
                         input.seek(index5_77);
                         if ( s>=0 ) return s;
                         break;
                     case 40 : 
-                        int LA5_58 = input.LA(1);
+                        int LA5_35 = input.LA(1);
 
                          
-                        int index5_58 = input.index();
+                        int index5_35 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_58==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+                        if ( (LA5_35==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 53;}
 
-                        else if ( (LA5_58==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
-
-                        else if ( (LA5_58==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 43;}
-
-                        else if ( (LA5_58==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 82;}
-
-                        else if ( (LA5_58==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
-
                          
-                        input.seek(index5_58);
+                        input.seek(index5_35);
                         if ( s>=0 ) return s;
                         break;
                     case 41 : 
-                        int LA5_86 = input.LA(1);
+                        int LA5_70 = input.LA(1);
 
                          
-                        int index5_86 = input.index();
+                        int index5_70 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_86==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 97;}
+                        if ( (LA5_70==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 81;}
 
-                        else if ( (LA5_86==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
-
-                        else if ( (LA5_86==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
-
-                        else if ( (LA5_86==COMMA||LA5_86==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_86);
+                        input.seek(index5_70);
                         if ( s>=0 ) return s;
                         break;
                     case 42 : 
-                        int LA5_14 = input.LA(1);
+                        int LA5_25 = input.LA(1);
 
                          
-                        int index5_14 = input.index();
+                        int index5_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_14==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 34;}
+                        if ( ((validateIdentifierKey("import"))) ) {s = 15;}
 
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
+
                          
-                        input.seek(index5_14);
+                        input.seek(index5_25);
                         if ( s>=0 ) return s;
                         break;
                     case 43 : 
-                        int LA5_87 = input.LA(1);
+                        int LA5_78 = input.LA(1);
 
                          
-                        int index5_87 = input.index();
+                        int index5_78 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_87==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 98;}
+                        if ( (LA5_78==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 86;}
 
-                        else if ( (LA5_87==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 99;}
+                        else if ( (LA5_78==COMMA||LA5_78==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_87==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 100;}
+                        else if ( (LA5_78==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
-                        else if ( (LA5_87==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+                        else if ( (LA5_78==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_87==COMMA||LA5_87==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
-                        else if ( (LA5_87==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
-
                          
-                        input.seek(index5_87);
+                        input.seek(index5_78);
                         if ( s>=0 ) return s;
                         break;
                     case 44 : 
-                        int LA5_117 = input.LA(1);
+                        int LA5_100 = input.LA(1);
 
                          
-                        int index5_117 = input.index();
+                        int index5_100 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_117==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 125;}
+                        if ( (LA5_100==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 107;}
 
-                        else if ( (LA5_117==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+                        else if ( ((LA5_100>=VT_COMPILATION_UNIT && LA5_100<=LEFT_SQUARE)||(LA5_100>=THEN && LA5_100<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_117==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
-
-                        else if ( (LA5_117==COMMA||LA5_117==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_117);
+                        input.seek(index5_100);
                         if ( s>=0 ) return s;
                         break;
                     case 45 : 
-                        int LA5_34 = input.LA(1);
+                        int LA5_82 = input.LA(1);
 
                          
-                        int index5_34 = input.index();
+                        int index5_82 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_34==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 54;}
+                        if ( (LA5_82==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 94;}
 
-                        else if ( (LA5_34==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 14;}
+                        else if ( ((LA5_82>=VT_COMPILATION_UNIT && LA5_82<=LEFT_SQUARE)||(LA5_82>=THEN && LA5_82<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
                          
-                        input.seek(index5_34);
+                        input.seek(index5_82);
                         if ( s>=0 ) return s;
                         break;
                     case 46 : 
-                        int LA5_111 = input.LA(1);
+                        int LA5_76 = input.LA(1);
 
                          
-                        int index5_111 = input.index();
+                        int index5_76 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_111==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+                        if ( (LA5_76==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 77;}
 
-                        else if ( (LA5_111==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+                        else if ( (LA5_76==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 82;}
 
-                        else if ( (LA5_111==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 96;}
+                        else if ( ((LA5_76>=VT_COMPILATION_UNIT && LA5_76<=SEMICOLON)||(LA5_76>=DOT_STAR && LA5_76<=LEFT_PAREN)||(LA5_76>=COLON && LA5_76<=NULL)||(LA5_76>=RIGHT_SQUARE && LA5_76<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
+                        else if ( (LA5_76==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 83;}
+
+                        else if ( (LA5_76==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 84;}
+
+                        else if ( (LA5_76==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 85;}
+
                          
-                        input.seek(index5_111);
+                        input.seek(index5_76);
                         if ( s>=0 ) return s;
                         break;
                     case 47 : 
-                        int LA5_103 = input.LA(1);
+                        int LA5_102 = input.LA(1);
 
                          
-                        int index5_103 = input.index();
+                        int index5_102 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_103==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+                        if ( (LA5_102==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 77;}
 
-                        else if ( (LA5_103==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 115;}
+                        else if ( (LA5_102==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 109;}
 
-                        else if ( ((LA5_103>=VT_COMPILATION_UNIT && LA5_103<=LEFT_PAREN)||(LA5_103>=COLON && LA5_103<=NULL)||(LA5_103>=RIGHT_SQUARE && LA5_103<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( ((LA5_102>=VT_COMPILATION_UNIT && LA5_102<=LEFT_PAREN)||(LA5_102>=COLON && LA5_102<=NULL)||(LA5_102>=RIGHT_SQUARE && LA5_102<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_103==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+                        else if ( (LA5_102==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 83;}
 
                          
-                        input.seek(index5_103);
+                        input.seek(index5_102);
                         if ( s>=0 ) return s;
                         break;
                     case 48 : 
-                        int LA5_127 = input.LA(1);
+                        int LA5_111 = input.LA(1);
 
                          
-                        int index5_127 = input.index();
+                        int index5_111 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_127==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 130;}
+                        if ( (LA5_111==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 113;}
 
-                        else if ( (LA5_127==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 124;}
+                        else if ( ((LA5_111>=VT_COMPILATION_UNIT && LA5_111<=LEFT_SQUARE)||(LA5_111>=THEN && LA5_111<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_127==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 122;}
-
-                        else if ( ((LA5_127>=VT_COMPILATION_UNIT && LA5_127<=SEMICOLON)||(LA5_127>=DOT_STAR && LA5_127<=NULL)||(LA5_127>=RIGHT_SQUARE && LA5_127<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
-
                          
-                        input.seek(index5_127);
+                        input.seek(index5_111);
                         if ( s>=0 ) return s;
                         break;
                     case 49 : 
-                        int LA5_113 = input.LA(1);
+                        int LA5_109 = input.LA(1);
 
                          
-                        int index5_113 = input.index();
+                        int index5_109 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA5_113>=VT_COMPILATION_UNIT && LA5_113<=SEMICOLON)||(LA5_113>=DOT_STAR && LA5_113<=NULL)||(LA5_113>=RIGHT_SQUARE && LA5_113<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( (LA5_109==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 112;}
 
-                        else if ( (LA5_113==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 120;}
+                        else if ( ((LA5_109>=VT_COMPILATION_UNIT && LA5_109<=LEFT_SQUARE)||(LA5_109>=THEN && LA5_109<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_113==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
-
-                        else if ( (LA5_113==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 101;}
-
                          
-                        input.seek(index5_113);
+                        input.seek(index5_109);
                         if ( s>=0 ) return s;
                         break;
                     case 50 : 
-                        int LA5_88 = input.LA(1);
+                        int LA5_103 = input.LA(1);
 
                          
-                        int index5_88 = input.index();
+                        int index5_103 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_88==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 101;}
+                        if ( (LA5_103==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 110;}
 
-                        else if ( (LA5_88==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 102;}
+                        else if ( ((LA5_103>=VT_COMPILATION_UNIT && LA5_103<=LEFT_SQUARE)||(LA5_103>=THEN && LA5_103<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_88==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
-
-                        else if ( (LA5_88==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
-
-                        else if ( (LA5_88==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
-
-                        else if ( ((LA5_88>=VT_COMPILATION_UNIT && LA5_88<=SEMICOLON)||(LA5_88>=DOT_STAR && LA5_88<=LEFT_PAREN)||(LA5_88>=COLON && LA5_88<=NULL)||(LA5_88>=RIGHT_SQUARE && LA5_88<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
-
                          
-                        input.seek(index5_88);
+                        input.seek(index5_103);
                         if ( s>=0 ) return s;
                         break;
                     case 51 : 
-                        int LA5_56 = input.LA(1);
+                        int LA5_97 = input.LA(1);
 
                          
-                        int index5_56 = input.index();
+                        int index5_97 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_56==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 75;}
+                        if ( (LA5_97==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
 
-                        else if ( (LA5_56==INT) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 76;}
+                        else if ( ((LA5_97>=VT_COMPILATION_UNIT && LA5_97<=LEFT_SQUARE)||(LA5_97>=THEN && LA5_97<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_56==LEFT_PAREN) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 77;}
-
-                        else if ( (LA5_56==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 78;}
-
-                        else if ( (LA5_56==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 79;}
-
-                        else if ( (LA5_56==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 80;}
-
-                        else if ( (LA5_56==COLON||LA5_56==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_56);
+                        input.seek(index5_97);
                         if ( s>=0 ) return s;
                         break;
                     case 52 : 
-                        int LA5_109 = input.LA(1);
+                        int LA5_8 = input.LA(1);
 
                          
-                        int index5_109 = input.index();
+                        int index5_8 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_109==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+                        if ( (LA5_8==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 19;}
 
-                        else if ( (LA5_109==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
-
-                        else if ( (LA5_109==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 93;}
-
                          
-                        input.seek(index5_109);
+                        input.seek(index5_8);
                         if ( s>=0 ) return s;
                         break;
                     case 53 : 
-                        int LA5_11 = input.LA(1);
+                        int LA5_83 = input.LA(1);
 
                          
-                        int index5_11 = input.index();
+                        int index5_83 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_11==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 32;}
+                        if ( ((LA5_83>=VT_COMPILATION_UNIT && LA5_83<=SEMICOLON)||(LA5_83>=DOT && LA5_83<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
+                        else if ( (LA5_83==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 95;}
+
                          
-                        input.seek(index5_11);
+                        input.seek(index5_83);
                         if ( s>=0 ) return s;
                         break;
                     case 54 : 
-                        int LA5_97 = input.LA(1);
+                        int LA5_16 = input.LA(1);
 
                          
-                        int index5_97 = input.index();
+                        int index5_16 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_97==COMMA||LA5_97==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        if ( (LA5_16==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 35;}
 
-                        else if ( (LA5_97==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+                        else if ( (LA5_16==COLON) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 22;}
 
-                        else if ( (LA5_97==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_16==INT) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 36;}
 
+                        else if ( (LA5_16==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 37;}
+
+                        else if ( (LA5_16==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 38;}
+
+                        else if ( (LA5_16==LEFT_PAREN) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 39;}
+
+                        else if ( (LA5_16==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
+
+                        else if ( (LA5_16==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 40;}
+
+                        else if ( (LA5_16==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 28;}
+
+                        else if ( (LA5_16==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
+
                          
-                        input.seek(index5_97);
+                        input.seek(index5_16);
                         if ( s>=0 ) return s;
                         break;
                     case 55 : 
-                        int LA5_85 = input.LA(1);
+                        int LA5_20 = input.LA(1);
 
                          
-                        int index5_85 = input.index();
+                        int index5_20 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_85==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 96;}
+                        if ( (LA5_20==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 42;}
 
-                        else if ( (LA5_85==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+                        else if ( (LA5_20==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("global"))))) {s = 9;}
 
-                        else if ( (LA5_85==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
-
                          
-                        input.seek(index5_85);
+                        input.seek(index5_20);
                         if ( s>=0 ) return s;
                         break;
                     case 56 : 
-                        int LA5_8 = input.LA(1);
+                        int LA5_29 = input.LA(1);
 
                          
-                        int index5_8 = input.index();
+                        int index5_29 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_8==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 19;}
+                        if ( (LA5_29==RIGHT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 49;}
 
-                        else if ( (LA5_8==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
-
-                        else if ( (LA5_8==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
-
                          
-                        input.seek(index5_8);
+                        input.seek(index5_29);
                         if ( s>=0 ) return s;
                         break;
                     case 57 : 
-                        int LA5_23 = input.LA(1);
+                        int LA5_74 = input.LA(1);
 
                          
-                        int index5_23 = input.index();
+                        int index5_74 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
 
-                        else if ( ((validateIdentifierKey("template"))) ) {s = 18;}
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
 
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
-
                          
-                        input.seek(index5_23);
+                        input.seek(index5_74);
                         if ( s>=0 ) return s;
                         break;
                     case 58 : 
-                        int LA5_1 = input.LA(1);
+                        int LA5_106 = input.LA(1);
 
                          
-                        int index5_1 = input.index();
+                        int index5_106 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {s = 2;}
+                        if ( (LA5_106==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
-                        else if ( (LA5_1==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {s = 3;}
+                        else if ( (LA5_106==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
-                        else if ( (LA5_1==STRING) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 4;}
+                        else if ( (LA5_106==COMMA||LA5_106==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 5;}
-
-                        else if ( (LA5_1==LEFT_PAREN) && ((validateIdentifierKey("salience")))) {s = 6;}
-
-                        else if ( (LA5_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 7;}
-
                          
-                        input.seek(index5_1);
+                        input.seek(index5_106);
                         if ( s>=0 ) return s;
                         break;
                     case 59 : 
-                        int LA5_76 = input.LA(1);
+                        int LA5_40 = input.LA(1);
 
                          
-                        int index5_76 = input.index();
+                        int index5_40 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_76==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+                        if ( (LA5_40==COMMA||LA5_40==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_76==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+                        else if ( (LA5_40==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
-                        else if ( (LA5_76==COMMA||LA5_76==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( (LA5_40==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
                          
-                        input.seek(index5_76);
+                        input.seek(index5_40);
                         if ( s>=0 ) return s;
                         break;
                     case 60 : 
-                        int LA5_0 = input.LA(1);
+                        int LA5_92 = input.LA(1);
 
                          
-                        int index5_0 = input.index();
+                        int index5_92 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_0==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("template"))||(validateIdentifierKey("query"))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("import"))||((validateLT(1, "import") && validateLT!
 (2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("function"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {s = 1;}
+                        if ( (LA5_92==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
+                        else if ( (LA5_92==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
+
+                        else if ( (LA5_92==COMMA||LA5_92==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
+
                          
-                        input.seek(index5_0);
+                        input.seek(index5_92);
                         if ( s>=0 ) return s;
                         break;
                     case 61 : 
-                        int LA5_33 = input.LA(1);
+                        int LA5_71 = input.LA(1);
 
                          
-                        int index5_33 = input.index();
+                        int index5_71 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA5_33>=STRING && LA5_33<=LEFT_PAREN)||(LA5_33>=BOOL && LA5_33<=INT)||LA5_33==MISC) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( (LA5_71==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
-                        else if ( (LA5_33==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 53;}
+                        else if ( (LA5_71==COMMA||LA5_71==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_33==DOT||LA5_33==LEFT_SQUARE) && ((validateIdentifierKey("template")))) {s = 18;}
+                        else if ( (LA5_71==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
                          
-                        input.seek(index5_33);
+                        input.seek(index5_71);
                         if ( s>=0 ) return s;
                         break;
                     case 62 : 
-                        int LA5_89 = input.LA(1);
+                        int LA5_36 = input.LA(1);
 
                          
-                        int index5_89 = input.index();
+                        int index5_36 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_89==LEFT_CURLY) && ((validateIdentifierKey("function")))) {s = 45;}
+                        if ( (LA5_36==COMMA||LA5_36==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_89==EOF||LA5_89==ID) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_36==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
+                        else if ( (LA5_36==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
+
                          
-                        input.seek(index5_89);
+                        input.seek(index5_36);
                         if ( s>=0 ) return s;
                         break;
                     case 63 : 
-                        int LA5_81 = input.LA(1);
+                        int LA5_22 = input.LA(1);
 
                          
-                        int index5_81 = input.index();
+                        int index5_22 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_81==RIGHT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 92;}
+                        if ( (LA5_22==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 44;}
 
+                        else if ( (LA5_22==LEFT_PAREN) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 45;}
+
+                        else if ( (LA5_22==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
+
                          
-                        input.seek(index5_81);
+                        input.seek(index5_22);
                         if ( s>=0 ) return s;
                         break;
                     case 64 : 
-                        int LA5_123 = input.LA(1);
+                        int LA5_108 = input.LA(1);
 
                          
-                        int index5_123 = input.index();
+                        int index5_108 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_123==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 128;}
+                        if ( ((LA5_108>=VT_COMPILATION_UNIT && LA5_108<=SEMICOLON)||(LA5_108>=DOT_STAR && LA5_108<=NULL)||(LA5_108>=RIGHT_SQUARE && LA5_108<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( ((LA5_123>=VT_COMPILATION_UNIT && LA5_123<=LEFT_SQUARE)||(LA5_123>=THEN && LA5_123<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_108==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 111;}
 
+                        else if ( (LA5_108==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 102;}
+
+                        else if ( (LA5_108==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 101;}
+
                          
-                        input.seek(index5_123);
+                        input.seek(index5_108);
                         if ( s>=0 ) return s;
                         break;
                     case 65 : 
-                        int LA5_102 = input.LA(1);
+                        int LA5_96 = input.LA(1);
 
                          
-                        int index5_102 = input.index();
+                        int index5_96 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_102==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 114;}
+                        if ( ((LA5_96>=VT_COMPILATION_UNIT && LA5_96<=SEMICOLON)||(LA5_96>=DOT_STAR && LA5_96<=NULL)||(LA5_96>=RIGHT_SQUARE && LA5_96<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( ((LA5_102>=VT_COMPILATION_UNIT && LA5_102<=LEFT_SQUARE)||(LA5_102>=THEN && LA5_102<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_96==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
 
+                        else if ( (LA5_96==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 85;}
+
+                        else if ( (LA5_96==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 84;}
+
                          
-                        input.seek(index5_102);
+                        input.seek(index5_96);
                         if ( s>=0 ) return s;
                         break;
                     case 66 : 
-                        int LA5_27 = input.LA(1);
+                        int LA5_72 = input.LA(1);
 
                          
-                        int index5_27 = input.index();
+                        int index5_72 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_27==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
 
-                        else if ( (LA5_27==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
 
-                        else if ( (LA5_27==COMMA||LA5_27==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_27);
+                        input.seek(index5_72);
                         if ( s>=0 ) return s;
                         break;
                     case 67 : 
-                        int LA5_95 = input.LA(1);
+                        int LA5_99 = input.LA(1);
 
                          
-                        int index5_95 = input.index();
+                        int index5_99 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_95==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 85;}
+                        if ( (LA5_99==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 106;}
 
-                        else if ( (LA5_95==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 84;}
+                        else if ( (LA5_99==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
-                        else if ( (LA5_95==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
+                        else if ( (LA5_99==COMMA||LA5_99==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_95==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
+                        else if ( (LA5_99==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
                          
-                        input.seek(index5_95);
+                        input.seek(index5_99);
                         if ( s>=0 ) return s;
                         break;
                     case 68 : 
-                        int LA5_132 = input.LA(1);
+                        int LA5_89 = input.LA(1);
 
                          
-                        int index5_132 = input.index();
+                        int index5_89 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_132==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 124;}
+                        if ( (LA5_89==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
-                        else if ( (LA5_132==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 130;}
+                        else if ( (LA5_89==COMMA||LA5_89==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( ((LA5_132>=VT_COMPILATION_UNIT && LA5_132<=SEMICOLON)||(LA5_132>=DOT && LA5_132<=NULL)||(LA5_132>=RIGHT_SQUARE && LA5_132<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_89==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
                          
-                        input.seek(index5_132);
+                        input.seek(index5_89);
                         if ( s>=0 ) return s;
                         break;
                     case 69 : 
-                        int LA5_126 = input.LA(1);
+                        int LA5_65 = input.LA(1);
 
                          
-                        int index5_126 = input.index();
+                        int index5_65 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_126==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 103;}
+                        if ( (LA5_65==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
-                        else if ( (LA5_126==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 120;}
+                        else if ( (LA5_65==COMMA||LA5_65==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( ((LA5_126>=VT_COMPILATION_UNIT && LA5_126<=SEMICOLON)||(LA5_126>=DOT && LA5_126<=NULL)||(LA5_126>=RIGHT_SQUARE && LA5_126<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_65==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
                          
-                        input.seek(index5_126);
+                        input.seek(index5_65);
                         if ( s>=0 ) return s;
                         break;
                     case 70 : 
-                        int LA5_110 = input.LA(1);
+                        int LA5_64 = input.LA(1);
 
                          
-                        int index5_110 = input.index();
+                        int index5_64 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_110==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 118;}
+                        if ( ((validateIdentifierKey("import"))) ) {s = 15;}
 
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
+
                          
-                        input.seek(index5_110);
+                        input.seek(index5_64);
                         if ( s>=0 ) return s;
                         break;
                     case 71 : 
-                        int LA5_108 = input.LA(1);
+                        int LA5_38 = input.LA(1);
 
                          
-                        int index5_108 = input.index();
+                        int index5_38 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_108==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
 
-                        else if ( (LA5_108==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
 
-                        else if ( (LA5_108==COMMA||LA5_108==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
                          
-                        input.seek(index5_108);
+                        input.seek(index5_38);
                         if ( s>=0 ) return s;
                         break;
                     case 72 : 
-                        int LA5_93 = input.LA(1);
+                        int LA5_24 = input.LA(1);
 
                          
-                        int index5_93 = input.index();
+                        int index5_24 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_93==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 109;}
+                        if ( ((validateIdentifierKey("import"))) ) {s = 15;}
 
+                        else if ( ((validateIdentifierKey("template"))) ) {s = 17;}
+
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
+
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 12;}
+
                          
-                        input.seek(index5_93);
+                        input.seek(index5_24);
                         if ( s>=0 ) return s;
                         break;
                     case 73 : 
-                        int LA5_96 = input.LA(1);
+                        int LA5_42 = input.LA(1);
 
                          
-                        int index5_96 = input.index();
+                        int index5_42 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_96==RIGHT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 111;}
+                        if ( (LA5_42==LEFT_PAREN) && ((validateIdentifierKey("function")))) {s = 51;}
 
+                        else if ( (LA5_42==EOF||(LA5_42>=SEMICOLON && LA5_42<=ID)) && ((validateIdentifierKey("global")))) {s = 57;}
+
                          
-                        input.seek(index5_96);
+                        input.seek(index5_42);
                         if ( s>=0 ) return s;
                         break;
                     case 74 : 
-                        int LA5_28 = input.LA(1);
+                        int LA5_0 = input.LA(1);
 
                          
-                        int index5_28 = input.index();
+                        int index5_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_28==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 50;}
+                        if ( (LA5_0==ID) && (((validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("template"))||(validateIdentifierKey("query"))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("function"))||(v!
 alidateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("rule"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("dialect"))))) {s = 1;}
 
                          
-                        input.seek(index5_28);
+                        input.seek(index5_0);
                         if ( s>=0 ) return s;
                         break;
                     case 75 : 
-                        int LA5_128 = input.LA(1);
+                        int LA5_14 = input.LA(1);
 
                          
-                        int index5_128 = input.index();
+                        int index5_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_128==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 124;}
+                        if ( (LA5_14==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 34;}
 
-                        else if ( (LA5_128==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 123;}
+                        else if ( (LA5_14==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_128==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
-
-                        else if ( (LA5_128==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
-
-                        else if ( ((LA5_128>=VT_COMPILATION_UNIT && LA5_128<=SEMICOLON)||(LA5_128>=DOT && LA5_128<=LEFT_PAREN)||(LA5_128>=COLON && LA5_128<=NULL)||(LA5_128>=RIGHT_SQUARE && LA5_128<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
-
                          
-                        input.seek(index5_128);
+                        input.seek(index5_14);
                         if ( s>=0 ) return s;
                         break;
                     case 76 : 
-                        int LA5_73 = input.LA(1);
+                        int LA5_1 = input.LA(1);
 
                          
-                        int index5_73 = input.index();
+                        int index5_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_73==COMMA||LA5_73==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        if ( (LA5_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))))) {s = 2;}
 
-                        else if ( (LA5_73==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+                        else if ( (LA5_1==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("global"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))||(validateIdentifierKey("template"))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))))) {s = 3;}
 
-                        else if ( (LA5_73==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+                        else if ( (LA5_1==STRING) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))||(validateIdentifierKey("dialect"))))) {s = 4;}
 
-                         
-                        input.seek(index5_73);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 77 : 
-                        int LA5_29 = input.LA(1);
+                        else if ( (LA5_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 5;}
 
-                         
-                        int index5_29 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_29==RIGHT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 51;}
+                        else if ( (LA5_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 6;}
 
-                         
-                        input.seek(index5_29);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 78 : 
-                        int LA5_26 = input.LA(1);
+                        else if ( (LA5_1==LEFT_PAREN) && ((validateIdentifierKey("salience")))) {s = 7;}
 
                          
-                        int index5_26 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_26==COMMA||LA5_26==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
-                        else if ( (LA5_26==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
-
-                        else if ( (LA5_26==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
-
-                         
-                        input.seek(index5_26);
+                        input.seek(index5_1);
                         if ( s>=0 ) return s;
                         break;
-                    case 79 : 
-                        int LA5_40 = input.LA(1);
+                    case 77 : 
+                        int LA5_45 = input.LA(1);
 
                          
-                        int index5_40 = input.index();
+                        int index5_45 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_40==COMMA||LA5_40==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
 
-                        else if ( (LA5_40==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 12;}
 
-                        else if ( (LA5_40==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
-
                          
-                        input.seek(index5_40);
+                        input.seek(index5_45);
                         if ( s>=0 ) return s;
                         break;
-                    case 80 : 
-                        int LA5_52 = input.LA(1);
+                    case 78 : 
+                        int LA5_66 = input.LA(1);
 
                          
-                        int index5_52 = input.index();
+                        int index5_66 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_52==STRING||(LA5_52>=BOOL && LA5_52<=INT)||LA5_52==MISC) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( (LA5_66==EOF) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_52==ID) && (((validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 69;}
+                        else if ( (LA5_66==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 47;}
 
-                        else if ( (LA5_52==EOF||LA5_52==SEMICOLON) && ((validateIdentifierKey("global")))) {s = 70;}
+                        else if ( (LA5_66==COMMA||LA5_66==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_52==LEFT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 71;}
-
                          
-                        input.seek(index5_52);
+                        input.seek(index5_66);
                         if ( s>=0 ) return s;
                         break;
-                    case 81 : 
+                    case 79 : 
                         int LA5_47 = input.LA(1);
 
                          
                         int index5_47 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
+                        if ( (LA5_47==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 61;}
 
-                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
+                        else if ( (LA5_47==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 62;}
 
-                         
-                        input.seek(index5_47);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 82 : 
-                        int LA5_131 = input.LA(1);
+                        else if ( (LA5_47==COLON||LA5_47==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                         
-                        int index5_131 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_131==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+                        else if ( (LA5_47==LEFT_PAREN) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 63;}
 
-                        else if ( (LA5_131==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+                        else if ( (LA5_47==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 64;}
 
-                        else if ( ((LA5_131>=VT_COMPILATION_UNIT && LA5_131<=LEFT_PAREN)||(LA5_131>=COLON && LA5_131<=NULL)||(LA5_131>=RIGHT_SQUARE && LA5_131<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_47==INT) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 65;}
 
-                        else if ( (LA5_131==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 129;}
+                        else if ( (LA5_47==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 66;}
 
                          
-                        input.seek(index5_131);
+                        input.seek(index5_47);
                         if ( s>=0 ) return s;
                         break;
-                    case 83 : 
-                        int LA5_22 = input.LA(1);
+                    case 80 : 
+                        int LA5_41 = input.LA(1);
 
                          
-                        int index5_22 = input.index();
+                        int index5_41 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_22==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 47;}
+                        if ( (LA5_41==STRING||(LA5_41>=BOOL && LA5_41<=INT)||LA5_41==MISC) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( (LA5_22==LEFT_PAREN) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 48;}
+                        else if ( (LA5_41==ID) && (((validateIdentifierKey("global"))||(validateIdentifierKey("import"))))) {s = 55;}
 
-                        else if ( (LA5_22==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( (LA5_41==LEFT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 56;}
 
-                         
-                        input.seek(index5_22);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 84 : 
-                        int LA5_116 = input.LA(1);
+                        else if ( (LA5_41==EOF||LA5_41==SEMICOLON) && ((validateIdentifierKey("global")))) {s = 57;}
 
                          
-                        int index5_116 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_116==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
-
-                        else if ( (LA5_116==DOT) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 122;}
-
-                        else if ( ((LA5_116>=VT_COMPILATION_UNIT && LA5_116<=SEMICOLON)||(LA5_116>=DOT_STAR && LA5_116<=LEFT_PAREN)||(LA5_116>=COLON && LA5_116<=NULL)||(LA5_116>=RIGHT_SQUARE && LA5_116<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
-
-                        else if ( (LA5_116==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 123;}
-
-                        else if ( (LA5_116==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 124;}
-
-                        else if ( (LA5_116==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
-
-                         
-                        input.seek(index5_116);
+                        input.seek(index5_41);
                         if ( s>=0 ) return s;
                         break;
-                    case 85 : 
-                        int LA5_80 = input.LA(1);
+                    case 81 : 
+                        int LA5_73 = input.LA(1);
 
                          
-                        int index5_80 = input.index();
+                        int index5_73 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_80==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
 
-                        else if ( (LA5_80==COMMA||LA5_80==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
 
-                        else if ( (LA5_80==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
-
                          
-                        input.seek(index5_80);
+                        input.seek(index5_73);
                         if ( s>=0 ) return s;
                         break;
-                    case 86 : 
-                        int LA5_25 = input.LA(1);
+                    case 82 : 
+                        int LA5_33 = input.LA(1);
 
                          
-                        int index5_25 = input.index();
+                        int index5_33 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+                        if ( (LA5_33==ID||LA5_33==END||LA5_33==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 12;}
 
-                        else if ( ((validateIdentifierKey("function"))) ) {s = 45;}
+                        else if ( (LA5_33==LEFT_CURLY) && ((validateIdentifierKey("function")))) {s = 51;}
 
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
-
                          
-                        input.seek(index5_25);
+                        input.seek(index5_33);
                         if ( s>=0 ) return s;
                         break;
-                    case 87 : 
-                        int LA5_83 = input.LA(1);
+                    case 83 : 
+                        int LA5_10 = input.LA(1);
 
                          
-                        int index5_83 = input.index();
+                        int index5_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_83==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 94;}
+                        if ( (LA5_10==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 21;}
 
-                         
-                        input.seek(index5_83);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 88 : 
-                        int LA5_105 = input.LA(1);
+                        else if ( (LA5_10==COLON) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 22;}
 
-                         
-                        int index5_105 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_105==COMMA||LA5_105==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( (LA5_10==LEFT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 23;}
 
-                        else if ( (LA5_105==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
+                        else if ( (LA5_10==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))))) {s = 24;}
 
-                        else if ( (LA5_105==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
+                        else if ( (LA5_10==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                         
-                        input.seek(index5_105);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 89 : 
-                        int LA5_71 = input.LA(1);
+                        else if ( (LA5_10==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 25;}
 
-                         
-                        int index5_71 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_71==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 88;}
+                        else if ( (LA5_10==INT) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 26;}
 
-                        else if ( ((LA5_71>=VT_COMPILATION_UNIT && LA5_71<=SEMICOLON)||(LA5_71>=DOT && LA5_71<=COMMA)||(LA5_71>=COLON && LA5_71<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_10==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 27;}
 
-                        else if ( (LA5_71==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+                        else if ( (LA5_10==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 28;}
 
-                         
-                        input.seek(index5_71);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 90 : 
-                        int LA5_91 = input.LA(1);
+                        else if ( (LA5_10==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
 
-                         
-                        int index5_91 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_91==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 106;}
+                        else if ( (((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))) ) {s = 30;}
 
-                        else if ( (LA5_91==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 107;}
+                        else if ( ((validateIdentifierKey("global"))) ) {s = 31;}
 
-                        else if ( (LA5_91==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
-
-                        else if ( (LA5_91==COMMA||LA5_91==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
-                        else if ( (LA5_91==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 108;}
-
-                        else if ( (LA5_91==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
-
                          
-                        input.seek(index5_91);
+                        input.seek(index5_10);
                         if ( s>=0 ) return s;
                         break;
-                    case 91 : 
-                        int LA5_68 = input.LA(1);
+                    case 84 : 
+                        int LA5_104 = input.LA(1);
 
                          
-                        int index5_68 = input.index();
+                        int index5_104 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_68==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+                        if ( (LA5_104==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 77;}
 
-                        else if ( (LA5_68==COMMA||LA5_68==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( (LA5_104==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 83;}
 
-                        else if ( (LA5_68==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( ((LA5_104>=VT_COMPILATION_UNIT && LA5_104<=LEFT_PAREN)||(LA5_104>=COLON && LA5_104<=NULL)||(LA5_104>=RIGHT_SQUARE && LA5_104<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                         
-                        input.seek(index5_68);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 92 : 
-                        int LA5_53 = input.LA(1);
+                        else if ( (LA5_104==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 97;}
 
                          
-                        int index5_53 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
-
-                        else if ( ((validateIdentifierKey("template"))) ) {s = 18;}
-
-                         
-                        input.seek(index5_53);
+                        input.seek(index5_104);
                         if ( s>=0 ) return s;
                         break;
-                    case 93 : 
-                        int LA5_130 = input.LA(1);
+                    case 85 : 
+                        int LA5_34 = input.LA(1);
 
                          
-                        int index5_130 = input.index();
+                        int index5_34 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_130==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 132;}
+                        if ( ((LA5_34>=STRING && LA5_34<=LEFT_PAREN)||(LA5_34>=BOOL && LA5_34<=INT)||LA5_34==MISC) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                        else if ( ((LA5_130>=VT_COMPILATION_UNIT && LA5_130<=LEFT_SQUARE)||(LA5_130>=THEN && LA5_130<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_34==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 52;}
 
-                         
-                        input.seek(index5_130);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 94 : 
-                        int LA5_129 = input.LA(1);
+                        else if ( (LA5_34==DOT||LA5_34==LEFT_SQUARE) && ((validateIdentifierKey("template")))) {s = 17;}
 
                          
-                        int index5_129 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_129==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 131;}
-
-                        else if ( ((LA5_129>=VT_COMPILATION_UNIT && LA5_129<=LEFT_SQUARE)||(LA5_129>=THEN && LA5_129<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
-
-                         
-                        input.seek(index5_129);
+                        input.seek(index5_34);
                         if ( s>=0 ) return s;
                         break;
-                    case 95 : 
-                        int LA5_120 = input.LA(1);
+                    case 86 : 
+                        int LA5_37 = input.LA(1);
 
                          
-                        int index5_120 = input.index();
+                        int index5_37 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_120==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 126;}
+                        if ( ((validateIdentifierKey("dialect"))) ) {s = 18;}
 
-                        else if ( ((LA5_120>=VT_COMPILATION_UNIT && LA5_120<=LEFT_SQUARE)||(LA5_120>=THEN && LA5_120<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( ((validateIdentifierKey("template"))) ) {s = 17;}
 
-                         
-                        input.seek(index5_120);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 96 : 
-                        int LA5_115 = input.LA(1);
+                        else if ( ((validateIdentifierKey("rule"))) ) {s = 13;}
 
-                         
-                        int index5_115 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_115==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 121;}
+                        else if ( ((validateIdentifierKey("query"))) ) {s = 12;}
 
-                        else if ( ((LA5_115>=VT_COMPILATION_UNIT && LA5_115<=LEFT_SQUARE)||(LA5_115>=THEN && LA5_115<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
-
                          
-                        input.seek(index5_115);
+                        input.seek(index5_37);
                         if ( s>=0 ) return s;
                         break;
-                    case 97 : 
-                        int LA5_82 = input.LA(1);
+                    case 87 : 
+                        int LA5_58 = input.LA(1);
 
                          
-                        int index5_82 = input.index();
+                        int index5_58 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_82==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 93;}
+                        if ( (LA5_58==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 78;}
 
-                        else if ( (LA5_82==COMMA) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 44;}
-
-                        else if ( (LA5_82==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 20;}
-
                          
-                        input.seek(index5_82);
+                        input.seek(index5_58);
                         if ( s>=0 ) return s;
                         break;
-                    case 98 : 
-                        int LA5_44 = input.LA(1);
+                    case 88 : 
+                        int LA5_87 = input.LA(1);
 
                          
-                        int index5_44 = input.index();
+                        int index5_87 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_44==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 59;}
+                        if ( (LA5_87==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 98;}
 
                          
-                        input.seek(index5_44);
+                        input.seek(index5_87);
                         if ( s>=0 ) return s;
                         break;
-                    case 99 : 
-                        int LA5_121 = input.LA(1);
+                    case 89 : 
+                        int LA5_80 = input.LA(1);
 
                          
-                        int index5_121 = input.index();
+                        int index5_80 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_121==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+                        if ( (LA5_80==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 90;}
 
-                        else if ( (LA5_121==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+                        else if ( (LA5_80==COMMA||LA5_80==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_121==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 115;}
+                        else if ( (LA5_80==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
-                        else if ( ((LA5_121>=VT_COMPILATION_UNIT && LA5_121<=LEFT_PAREN)||(LA5_121>=COLON && LA5_121<=NULL)||(LA5_121>=RIGHT_SQUARE && LA5_121<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_80==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
                          
-                        input.seek(index5_121);
+                        input.seek(index5_80);
                         if ( s>=0 ) return s;
                         break;
-                    case 100 : 
-                        int LA5_48 = input.LA(1);
-
-                         
-                        int index5_48 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
-
-                         
-                        input.seek(index5_48);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 101 : 
-                        int LA5_61 = input.LA(1);
-
-                         
-                        int index5_61 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_61==COMMA||LA5_61==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
-                        else if ( (LA5_61==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
-
-                        else if ( (LA5_61==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
-
-                         
-                        input.seek(index5_61);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 102 : 
-                        int LA5_65 = input.LA(1);
-
-                         
-                        int index5_65 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
-
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
-
-                         
-                        input.seek(index5_65);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 103 : 
-                        int LA5_43 = input.LA(1);
-
-                         
-                        int index5_43 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_43==RIGHT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 58;}
-
-                         
-                        input.seek(index5_43);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 104 : 
+                    case 90 : 
                         int LA5_69 = input.LA(1);
 
                          
                         int index5_69 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
+                        if ( (LA5_69==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
-                        else if ( ((validateIdentifierKey("global"))) ) {s = 70;}
+                        else if ( (LA5_69==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
+                        else if ( (LA5_69==COMMA||LA5_69==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
+
                          
                         input.seek(index5_69);
                         if ( s>=0 ) return s;
                         break;
-                    case 105 : 
-                        int LA5_124 = input.LA(1);
+                    case 91 : 
+                        int LA5_53 = input.LA(1);
 
                          
-                        int index5_124 = input.index();
+                        int index5_53 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_124==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 89;}
+                        if ( (LA5_53==MISC) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 67;}
 
-                        else if ( (LA5_124==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 129;}
+                        else if ( (LA5_53==BOOL) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 68;}
 
-                        else if ( ((LA5_124>=VT_COMPILATION_UNIT && LA5_124<=LEFT_PAREN)||(LA5_124>=COLON && LA5_124<=NULL)||(LA5_124>=RIGHT_SQUARE && LA5_124<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 12;}
+                        else if ( (LA5_53==COMMA||LA5_53==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
-                        else if ( (LA5_124==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 104;}
+                        else if ( (LA5_53==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
-                         
-                        input.seek(index5_124);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 106 : 
-                        int LA5_100 = input.LA(1);
+                        else if ( (LA5_53==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
-                         
-                        int index5_100 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_100==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 49;}
+                        else if ( (LA5_53==STRING) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 69;}
 
-                        else if ( (LA5_100==COMMA||LA5_100==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
-                        else if ( (LA5_100==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
-
                          
-                        input.seek(index5_100);
+                        input.seek(index5_53);
                         if ( s>=0 ) return s;
                         break;
-                    case 107 : 
-                        int LA5_78 = input.LA(1);
+                    case 92 : 
+                        int LA5_28 = input.LA(1);
 
                          
-                        int index5_78 = input.index();
+                        int index5_28 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("dialect"))) ) {s = 16;}
+                        if ( (LA5_28==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 48;}
 
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
-
                          
-                        input.seek(index5_78);
+                        input.seek(index5_28);
                         if ( s>=0 ) return s;
                         break;
-                    case 108 : 
-                        int LA5_92 = input.LA(1);
+                    case 93 : 
+                        int LA5_85 = input.LA(1);
 
                          
-                        int index5_92 = input.index();
+                        int index5_85 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_92==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 82;}
+                        if ( (LA5_85==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 97;}
 
-                        else if ( (LA5_92==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 81;}
+                        else if ( (LA5_85==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 83;}
 
-                        else if ( (LA5_92==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
+                        else if ( (LA5_85==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 77;}
 
-                         
-                        input.seek(index5_92);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 109 : 
-                        int LA5_67 = input.LA(1);
+                        else if ( ((LA5_85>=VT_COMPILATION_UNIT && LA5_85<=LEFT_PAREN)||(LA5_85>=COLON && LA5_85<=NULL)||(LA5_85>=RIGHT_SQUARE && LA5_85<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
                          
-                        int index5_67 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
-
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
-
-                         
-                        input.seek(index5_67);
+                        input.seek(index5_85);
                         if ( s>=0 ) return s;
                         break;
-                    case 110 : 
-                        int LA5_41 = input.LA(1);
+                    case 94 : 
+                        int LA5_90 = input.LA(1);
 
                          
-                        int index5_41 = input.index();
+                        int index5_90 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("function"))) ) {s = 45;}
+                        if ( (LA5_90==EOF) && ((validateIdentifierKey("dialect")))) {s = 18;}
 
-                        else if ( ((validateIdentifierKey("query"))) ) {s = 10;}
+                        else if ( (LA5_90==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 54;}
 
-                         
-                        input.seek(index5_41);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 111 : 
-                        int LA5_24 = input.LA(1);
+                        else if ( (LA5_90==COMMA||LA5_90==THEN) && ((validateIdentifierKey("rule")))) {s = 13;}
 
                          
-                        int index5_24 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey("import"))) ) {s = 12;}
-
-                        else if ( ((validateIdentifierKey("rule"))) ) {s = 15;}
-
-                         
-                        input.seek(index5_24);
+                        input.seek(index5_90);
                         if ( s>=0 ) return s;
                         break;
-                    case 112 : 
-                        int LA5_50 = input.LA(1);
+                    case 95 : 
+                        int LA5_21 = input.LA(1);
 
                          
-                        int index5_50 = input.index();
+                        int index5_21 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_50==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
+                        if ( (LA5_21==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 43;}
 
-                        else if ( (LA5_50==ID) && ((validateIdentifierKey("template")))) {s = 18;}
-
-                        else if ( (LA5_50==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 28;}
-
-                        else if ( (LA5_50==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
-
                          
-                        input.seek(index5_50);
+                        input.seek(index5_21);
                         if ( s>=0 ) return s;
                         break;
-                    case 113 : 
-                        int LA5_9 = input.LA(1);
+                    case 96 : 
+                        int LA5_55 = input.LA(1);
 
                          
-                        int index5_9 = input.index();
+                        int index5_55 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_9==MISC) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 21;}
+                        if ( ((validateIdentifierKey("import"))) ) {s = 15;}
 
-                        else if ( (LA5_9==COLON) && (((validateIdentifierKey("query"))||(validateIdentifierKey("rule"))))) {s = 22;}
+                        else if ( ((validateIdentifierKey("global"))) ) {s = 57;}
 
-                        else if ( (LA5_9==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))||(validateIdentifierKey("template"))))) {s = 23;}
-
-                        else if ( (LA5_9==STRING) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 24;}
-
-                        else if ( (LA5_9==LEFT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))||(validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 25;}
-
-                        else if ( (LA5_9==BOOL) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 26;}
-
-                        else if ( (LA5_9==INT) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 27;}
-
-                        else if ( (LA5_9==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 28;}
-
-                        else if ( (LA5_9==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("template"))))) {s = 29;}
-
-                        else if ( (LA5_9==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
-
-                        else if ( (((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey("import")))) ) {s = 30;}
-
-                        else if ( ((validateIdentifierKey("global"))) ) {s = 31;}
-
                          
-                        input.seek(index5_9);
+                        input.seek(index5_55);
                         if ( s>=0 ) return s;
                         break;
-                    case 114 : 
-                        int LA5_13 = input.LA(1);
+                    case 97 : 
+                        int LA5_61 = input.LA(1);
 
                          
-                        int index5_13 = input.index();
+                        int index5_61 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_13==EOF) && ((validateIdentifierKey("import")))) {s = 12;}
+                        if ( (LA5_61==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("rule"))))) {s = 79;}
 
-                        else if ( (LA5_13==ID) && (((validateIdentifierKey("import"))||(validateIdentifierKey("template"))))) {s = 33;}
-
                          
-                        input.seek(index5_13);
+                        input.seek(index5_61);
                         if ( s>=0 ) return s;
                         break;
-                    case 115 : 
-                        int LA5_57 = input.LA(1);
-
-                         
-                        int index5_57 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_57==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 81;}
-
-                        else if ( (LA5_57==LEFT_PAREN) && ((validateIdentifierKey("query")))) {s = 10;}
-
-                        else if ( (LA5_57==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 42;}
-
-                        else if ( (LA5_57==ID) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 82;}
-
-                         
-                        input.seek(index5_57);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 116 : 
+                    case 98 : 
                         int LA5_94 = input.LA(1);
 
                          
                         int index5_94 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA5_94==LEFT_SQUARE) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 110;}
+                        if ( (LA5_94==RIGHT_PAREN) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 77;}
 
-                        else if ( (LA5_94==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("query"))))) {s = 85;}
+                        else if ( (LA5_94==ID) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 85;}
 
-                        else if ( (LA5_94==DOT) && (((validateIdentifierKey("query"))||(validateIdentifierKey("function"))))) {s = 83;}
+                        else if ( ((LA5_94>=VT_COMPILATION_UNIT && LA5_94<=SEMICOLON)||(LA5_94>=DOT && LA5_94<=LEFT_PAREN)||(LA5_94>=COLON && LA5_94<=NULL)||(LA5_94>=RIGHT_SQUARE && LA5_94<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("import")))) {s = 15;}
 
-                         
-                        input.seek(index5_94);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 117 : 
-                        int LA5_38 = input.LA(1);
+                        else if ( (LA5_94==LEFT_SQUARE) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 82;}
 
-                         
-                        int index5_38 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_38==COMMA||LA5_38==THEN) && ((validateIdentifierKey("rule")))) {s = 15;}
+                        else if ( (LA5_94==COMMA) && (((validateIdentifierKey("function"))||(validateIdentifierKey("import"))))) {s = 83;}
 
-                        else if ( (LA5_38==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 56;}
-
-                        else if ( (LA5_38==EOF) && ((validateIdentifierKey("dialect")))) {s = 16;}
-
                          
-                        input.seek(index5_38);
+                        input.seek(index5_94);
                         if ( s>=0 ) return s;
                         break;
-                    case 118 : 
-                        int LA5_106 = input.LA(1);
-
-                         
-                        int index5_106 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_106==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 117;}
-
-                         
-                        input.seek(index5_106);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 119 : 
-                        int LA5_72 = input.LA(1);
-
-                         
-                        int index5_72 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_72==ID) && (((validateIdentifierKey("rule"))||(validateIdentifierKey("dialect"))))) {s = 90;}
-
-                         
-                        input.seek(index5_72);
-                        if ( s>=0 ) return s;
-                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
@@ -17335,9 +17179,9 @@
     static final String DFA12_eofS =
         "\16\uffff";
     static final String DFA12_minS =
-        "\2\125\1\uffff\1\125\1\uffff\1\125\1\154\3\125\2\154\1\132\1\125";
+        "\2\126\1\uffff\1\126\1\uffff\1\126\1\155\3\126\2\155\1\133\1\126";
     static final String DFA12_maxS =
-        "\1\132\1\134\1\uffff\1\153\1\uffff\1\125\1\154\3\153\2\154\2\153";
+        "\1\133\1\135\1\uffff\1\154\1\uffff\1\126\1\155\3\154\2\155\2\154";
     static final String DFA12_acceptS =
         "\2\uffff\1\2\1\uffff\1\1\11\uffff";
     static final String DFA12_specialS =
@@ -17389,7 +17233,7 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "339:23: ( parameters )?";
+            return "340:23: ( parameters )?";
         }
     }
     static final String DFA17_eotS =
@@ -17397,20 +17241,20 @@
     static final String DFA17_eofS =
         "\6\uffff";
     static final String DFA17_minS =
-        "\2\125\1\154\2\uffff\1\125";
+        "\2\126\1\uffff\1\155\1\uffff\1\126";
     static final String DFA17_maxS =
-        "\1\125\1\153\1\154\2\uffff\1\153";
+        "\1\126\1\154\1\uffff\1\155\1\uffff\1\154";
     static final String DFA17_acceptS =
-        "\3\uffff\1\2\1\1\1\uffff";
+        "\2\uffff\1\1\1\uffff\1\2\1\uffff";
     static final String DFA17_specialS =
         "\6\uffff}>";
     static final String[] DFA17_transitionS = {
             "\1\1",
-            "\2\4\4\uffff\2\3\16\uffff\1\2",
+            "\2\2\4\uffff\2\4\16\uffff\1\3",
+            "",
             "\1\5",
             "",
-            "",
-            "\1\4\5\uffff\2\3\16\uffff\1\2"
+            "\1\2\5\uffff\2\4\16\uffff\1\3"
     };
 
     static final short[] DFA17_eot = DFA.unpackEncodedString(DFA17_eotS);
@@ -17443,53 +17287,49 @@
             this.transition = DFA17_transition;
         }
         public String getDescription() {
-            return "356:4: ( data_type )?";
+            return "357:4: ( data_type )?";
         }
     }
     static final String DFA24_eotS =
-        "\36\uffff";
+        "\33\uffff";
     static final String DFA24_eofS =
-        "\36\uffff";
+        "\33\uffff";
     static final String DFA24_minS =
-        "\2\125\5\uffff\1\125\1\4\1\uffff\1\125\1\4\1\0\2\uffff\1\0\1\4\2"+
-        "\0\2\4\1\uffff\1\4\1\0\2\4\4\0";
+        "\2\126\3\uffff\1\4\1\126\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 DFA24_maxS =
-        "\1\155\1\160\5\uffff\1\155\1\171\1\uffff\1\160\1\171\1\0\2\uffff"+
-        "\1\0\1\171\2\0\2\171\1\uffff\1\171\1\0\2\171\4\0";
+        "\1\156\1\161\3\uffff\1\172\1\156\3\uffff\1\172\1\0\1\uffff\1\0\1"+
+        "\172\2\0\3\172\1\0\2\172\4\0";
     static final String DFA24_acceptS =
-        "\2\uffff\1\2\4\1\2\uffff\1\2\3\uffff\2\1\6\uffff\1\1\10\uffff";
+        "\2\uffff\1\2\2\1\2\uffff\1\2\2\1\2\uffff\1\1\16\uffff";
     static final String DFA24_specialS =
-        "\1\5\1\0\5\uffff\1\15\1\7\1\uffff\1\14\1\6\1\13\2\uffff\1\3\1\10"+
-        "\1\11\1\17\1\4\1\12\1\uffff\1\2\1\16\1\1\1\20\4\uffff}>";
+        "\1\0\1\11\3\uffff\1\6\1\10\3\uffff\1\17\1\15\1\uffff\1\14\1\3\1"+
+        "\12\1\4\1\2\1\5\1\13\1\7\1\16\1\1\4\uffff}>";
     static final String[] DFA24_transitionS = {
             "\1\1\27\uffff\1\2",
-            "\1\11\3\uffff\1\5\1\10\2\uffff\1\7\1\6\1\4\15\uffff\1\11\2\uffff"+
+            "\1\7\3\uffff\1\11\1\5\2\uffff\1\6\1\10\1\4\15\uffff\1\7\2\uffff"+
             "\1\3",
             "",
             "",
             "",
+            "\122\14\1\12\4\14\1\13\37\14",
+            "\1\15\4\uffff\1\7\22\uffff\1\7",
             "",
             "",
-            "\1\12\4\uffff\1\11\22\uffff\1\11",
-            "\121\15\1\13\4\15\1\14\37\15",
             "",
-            "\2\11\2\uffff\1\16\1\17\2\uffff\1\11\2\16\13\uffff\1\11\4\uffff"+
-            "\1\16",
-            "\121\15\1\22\1\23\3\15\1\21\1\15\1\25\1\20\15\15\1\24\16\15",
+            "\122\14\1\20\1\21\3\14\1\17\2\14\1\16\15\14\1\22\16\14",
             "\1\uffff",
             "",
-            "",
             "\1\uffff",
-            "\121\15\1\26\4\15\1\27\1\15\1\25\35\15",
+            "\122\14\1\23\4\14\1\24\37\14",
             "\1\uffff",
             "\1\uffff",
-            "\121\15\1\30\4\15\1\25\1\15\1\25\35\15",
-            "\126\15\1\25\1\15\1\25\17\15\1\31\15\15",
-            "",
-            "\122\15\1\32\3\15\1\33\1\15\1\25\16\15\1\34\16\15",
+            "\122\14\1\25\44\14",
+            "\151\14\1\26\15\14",
+            "\123\14\1\27\3\14\1\30\20\14\1\31\16\14",
             "\1\uffff",
-            "\122\15\1\23\3\15\1\35\1\15\1\25\16\15\1\24\16\15",
-            "\126\15\1\35\1\15\1\25\16\15\1\24\16\15",
+            "\123\14\1\21\3\14\1\32\20\14\1\22\16\14",
+            "\127\14\1\32\20\14\1\22\16\14",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -17526,312 +17366,281 @@
             this.transition = DFA24_transition;
         }
         public String getDescription() {
-            return "386:21: ( rule_attributes )?";
+            return "387:21: ( rule_attributes )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA24_1 = input.LA(1);
+                        int LA24_0 = input.LA(1);
 
                          
-                        int index24_1 = input.index();
+                        int index24_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))))) {s = 3;}
+                        if ( (LA24_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {s = 1;}
 
-                        else if ( (LA24_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 4;}
+                        else if ( (LA24_0==THEN) ) {s = 2;}
 
-                        else if ( (LA24_1==STRING) && ((validateIdentifierKey("dialect")))) {s = 5;}
-
-                        else if ( (LA24_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 6;}
-
-                        else if ( (LA24_1==COLON) && (((validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))))) {s = 7;}
-
-                        else if ( (LA24_1==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 8;}
-
-                        else if ( (LA24_1==ID||LA24_1==THEN) && ((validateIdentifierKey("when")))) {s = 9;}
-
                          
-                        input.seek(index24_1);
+                        input.seek(index24_0);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA24_24 = input.LA(1);
+                        int LA24_22 = input.LA(1);
 
                          
-                        int index24_24 = input.index();
+                        int index24_22 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_24==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
+                        if ( ((LA24_22>=VT_COMPILATION_UNIT && LA24_22<=STRING)||(LA24_22>=COMMA && LA24_22<=NULL)||(LA24_22>=RIGHT_SQUARE && LA24_22<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
 
-                        else if ( (LA24_24==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 20;}
+                        else if ( (LA24_22==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 18;}
 
-                        else if ( (LA24_24==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 29;}
+                        else if ( (LA24_22==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 26;}
 
-                        else if ( (LA24_24==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 19;}
-
-                        else if ( ((LA24_24>=VT_COMPILATION_UNIT && LA24_24<=ID)||(LA24_24>=DOT_STAR && LA24_24<=STRING)||LA24_24==COMMA||(LA24_24>=COLON && LA24_24<=NULL)||(LA24_24>=RIGHT_SQUARE && LA24_24<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
-
                          
-                        input.seek(index24_24);
+                        input.seek(index24_22);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA24_22 = input.LA(1);
+                        int LA24_17 = input.LA(1);
 
                          
-                        int index24_22 = input.index();
+                        int index24_17 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_22==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
+                        if ( (LA24_17==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 21;}
 
-                        else if ( (LA24_22==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 26;}
+                        else if ( ((LA24_17>=VT_COMPILATION_UNIT && LA24_17<=SEMICOLON)||(LA24_17>=DOT && LA24_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
 
-                        else if ( (LA24_22==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 27;}
-
-                        else if ( (LA24_22==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 28;}
-
-                        else if ( ((LA24_22>=VT_COMPILATION_UNIT && LA24_22<=ID)||(LA24_22>=DOT_STAR && LA24_22<=STRING)||LA24_22==COMMA||(LA24_22>=COLON && LA24_22<=NULL)||(LA24_22>=RIGHT_SQUARE && LA24_22<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
-
                          
-                        input.seek(index24_22);
+                        input.seek(index24_17);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA24_15 = input.LA(1);
+                        int LA24_14 = input.LA(1);
 
                          
-                        int index24_15 = input.index();
+                        int index24_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("attributes"))) ) {s = 21;}
+                        if ( ((LA24_14>=VT_COMPILATION_UNIT && LA24_14<=SEMICOLON)||(LA24_14>=DOT && LA24_14<=STRING)||(LA24_14>=COMMA && LA24_14<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
 
-                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+                        else if ( (LA24_14==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 19;}
 
+                        else if ( (LA24_14==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 20;}
+
                          
-                        input.seek(index24_15);
+                        input.seek(index24_14);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA24_19 = input.LA(1);
+                        int LA24_16 = input.LA(1);
 
                          
-                        int index24_19 = input.index();
+                        int index24_16 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_19==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 24;}
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
 
-                        else if ( (LA24_19==LEFT_PAREN||LA24_19==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 7;}
 
-                        else if ( ((LA24_19>=VT_COMPILATION_UNIT && LA24_19<=SEMICOLON)||(LA24_19>=DOT && LA24_19<=STRING)||LA24_19==COMMA||(LA24_19>=COLON && LA24_19<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
-
                          
-                        input.seek(index24_19);
+                        input.seek(index24_16);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA24_0 = input.LA(1);
+                        int LA24_18 = input.LA(1);
 
                          
-                        int index24_0 = input.index();
+                        int index24_18 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("dialect"))))) {s = 1;}
+                        if ( (LA24_18==RIGHT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 22;}
 
-                        else if ( (LA24_0==THEN) ) {s = 2;}
+                        else if ( ((LA24_18>=VT_COMPILATION_UNIT && LA24_18<=LEFT_SQUARE)||(LA24_18>=THEN && LA24_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
 
                          
-                        input.seek(index24_0);
+                        input.seek(index24_18);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA24_11 = input.LA(1);
+                        int LA24_5 = input.LA(1);
 
                          
-                        int index24_11 = input.index();
+                        int index24_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_11==COLON) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 16;}
+                        if ( (LA24_5==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 10;}
 
-                        else if ( (LA24_11==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+                        else if ( (LA24_5==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 11;}
 
-                        else if ( (LA24_11==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 18;}
+                        else if ( ((LA24_5>=VT_COMPILATION_UNIT && LA24_5<=SEMICOLON)||(LA24_5>=DOT && LA24_5<=STRING)||(LA24_5>=COMMA && LA24_5<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
 
-                        else if ( (LA24_11==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 19;}
-
-                        else if ( (LA24_11==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 20;}
-
-                        else if ( (LA24_11==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
-
-                        else if ( ((LA24_11>=VT_COMPILATION_UNIT && LA24_11<=SEMICOLON)||(LA24_11>=DOT_STAR && LA24_11<=STRING)||LA24_11==COMMA||(LA24_11>=BOOL && LA24_11<=NULL)||(LA24_11>=RIGHT_SQUARE && LA24_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
-
                          
-                        input.seek(index24_11);
+                        input.seek(index24_5);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA24_8 = input.LA(1);
+                        int LA24_20 = input.LA(1);
 
                          
-                        int index24_8 = input.index();
+                        int index24_20 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_8==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 11;}
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
 
-                        else if ( (LA24_8==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 12;}
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 7;}
 
-                        else if ( ((LA24_8>=VT_COMPILATION_UNIT && LA24_8<=SEMICOLON)||(LA24_8>=DOT && LA24_8<=STRING)||(LA24_8>=COMMA && LA24_8<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
-
                          
-                        input.seek(index24_8);
+                        input.seek(index24_20);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA24_16 = input.LA(1);
+                        int LA24_6 = input.LA(1);
 
                          
-                        int index24_16 = input.index();
+                        int index24_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_16==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 22;}
+                        if ( (LA24_6==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))))) {s = 13;}
 
-                        else if ( (LA24_16==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 23;}
+                        else if ( (LA24_6==LEFT_PAREN||LA24_6==THEN) && ((validateIdentifierKey("when")))) {s = 7;}
 
-                        else if ( (LA24_16==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
-
-                        else if ( ((LA24_16>=VT_COMPILATION_UNIT && LA24_16<=SEMICOLON)||(LA24_16>=DOT && LA24_16<=STRING)||LA24_16==COMMA||(LA24_16>=COLON && LA24_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
-
                          
-                        input.seek(index24_16);
+                        input.seek(index24_6);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA24_17 = input.LA(1);
+                        int LA24_1 = input.LA(1);
 
                          
-                        int index24_17 = input.index();
+                        int index24_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("salience"))) ) {s = 21;}
+                        if ( (LA24_1==MISC) && (((validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {s = 3;}
 
-                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+                        else if ( (LA24_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 4;}
 
+                        else if ( (LA24_1==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 5;}
+
+                        else if ( (LA24_1==COLON) && (((validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))))) {s = 6;}
+
+                        else if ( (LA24_1==ID||LA24_1==THEN) && ((validateIdentifierKey("when")))) {s = 7;}
+
+                        else if ( (LA24_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 8;}
+
+                        else if ( (LA24_1==STRING) && ((validateIdentifierKey("dialect")))) {s = 9;}
+
                          
-                        input.seek(index24_17);
+                        input.seek(index24_1);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA24_20 = input.LA(1);
+                        int LA24_15 = input.LA(1);
 
                          
-                        int index24_20 = input.index();
+                        int index24_15 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_20==RIGHT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 25;}
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
 
-                        else if ( (LA24_20==LEFT_PAREN||LA24_20==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 7;}
 
-                        else if ( ((LA24_20>=VT_COMPILATION_UNIT && LA24_20<=STRING)||LA24_20==COMMA||(LA24_20>=COLON && LA24_20<=LEFT_SQUARE)||(LA24_20>=THEN && LA24_20<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
-
                          
-                        input.seek(index24_20);
+                        input.seek(index24_15);
                         if ( s>=0 ) return s;
                         break;
                     case 11 : 
-                        int LA24_12 = input.LA(1);
+                        int LA24_19 = input.LA(1);
 
                          
-                        int index24_12 = input.index();
+                        int index24_19 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("salience"))) ) {s = 21;}
+                        if ( ((LA24_19>=VT_COMPILATION_UNIT && LA24_19<=ID)||(LA24_19>=DOT_STAR && LA24_19<=STRING)||(LA24_19>=COMMA && LA24_19<=NULL)||(LA24_19>=RIGHT_SQUARE && LA24_19<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
 
-                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+                        else if ( (LA24_19==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 23;}
 
+                        else if ( (LA24_19==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 24;}
+
+                        else if ( (LA24_19==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 25;}
+
                          
-                        input.seek(index24_12);
+                        input.seek(index24_19);
                         if ( s>=0 ) return s;
                         break;
                     case 12 : 
-                        int LA24_10 = input.LA(1);
+                        int LA24_13 = input.LA(1);
 
                          
-                        int index24_10 = input.index();
+                        int index24_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_10==STRING||(LA24_10>=BOOL && LA24_10<=INT)||LA24_10==MISC) && ((validateIdentifierKey("attributes")))) {s = 14;}
+                        if ( ((validateIdentifierKey("attributes"))) ) {s = 12;}
 
-                        else if ( ((LA24_10>=ID && LA24_10<=DOT)||LA24_10==COLON||LA24_10==LEFT_SQUARE) && ((validateIdentifierKey("when")))) {s = 9;}
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 7;}
 
-                        else if ( (LA24_10==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))))) {s = 15;}
-
                          
-                        input.seek(index24_10);
+                        input.seek(index24_13);
                         if ( s>=0 ) return s;
                         break;
                     case 13 : 
-                        int LA24_7 = input.LA(1);
+                        int LA24_11 = input.LA(1);
 
                          
-                        int index24_7 = input.index();
+                        int index24_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_7==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("attributes"))))) {s = 10;}
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
 
-                        else if ( (LA24_7==LEFT_PAREN||LA24_7==THEN) && ((validateIdentifierKey("when")))) {s = 9;}
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 7;}
 
                          
-                        input.seek(index24_7);
+                        input.seek(index24_11);
                         if ( s>=0 ) return s;
                         break;
                     case 14 : 
-                        int LA24_23 = input.LA(1);
+                        int LA24_21 = input.LA(1);
 
                          
-                        int index24_23 = input.index();
+                        int index24_21 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("salience"))) ) {s = 21;}
+                        if ( ((LA24_21>=VT_COMPILATION_UNIT && LA24_21<=ID)||(LA24_21>=DOT_STAR && LA24_21<=STRING)||(LA24_21>=COMMA && LA24_21<=NULL)||(LA24_21>=RIGHT_SQUARE && LA24_21<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
 
-                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+                        else if ( (LA24_21==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 18;}
 
+                        else if ( (LA24_21==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 26;}
+
+                        else if ( (LA24_21==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+
                          
-                        input.seek(index24_23);
+                        input.seek(index24_21);
                         if ( s>=0 ) return s;
                         break;
                     case 15 : 
-                        int LA24_18 = input.LA(1);
+                        int LA24_10 = input.LA(1);
 
                          
-                        int index24_18 = input.index();
+                        int index24_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("salience"))) ) {s = 21;}
+                        if ( (LA24_10==COLON) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 14;}
 
-                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+                        else if ( (LA24_10==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 15;}
 
-                         
-                        input.seek(index24_18);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 16 : 
-                        int LA24_25 = input.LA(1);
+                        else if ( (LA24_10==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 16;}
 
-                         
-                        int index24_25 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA24_25==RIGHT_PAREN) && ((validateIdentifierKey("salience")))) {s = 21;}
+                        else if ( ((LA24_10>=VT_COMPILATION_UNIT && LA24_10<=SEMICOLON)||(LA24_10>=DOT_STAR && LA24_10<=STRING)||(LA24_10>=COMMA && LA24_10<=RIGHT_PAREN)||(LA24_10>=BOOL && LA24_10<=NULL)||(LA24_10>=RIGHT_SQUARE && LA24_10<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
 
-                        else if ( (LA24_25==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 20;}
+                        else if ( (LA24_10==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
 
-                        else if ( (LA24_25==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 29;}
+                        else if ( (LA24_10==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 18;}
 
-                        else if ( ((LA24_25>=VT_COMPILATION_UNIT && LA24_25<=STRING)||LA24_25==COMMA||(LA24_25>=COLON && LA24_25<=NULL)||(LA24_25>=RIGHT_SQUARE && LA24_25<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 13;}
-
                          
-                        input.seek(index24_25);
+                        input.seek(index24_10);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -17847,43 +17656,43 @@
     static final String DFA30_eofS =
         "\32\uffff";
     static final String DFA30_minS =
-        "\2\125\6\uffff\1\4\1\uffff\1\4\1\0\1\uffff\1\4\2\0\3\4\1\0\2\4\4"+
+        "\2\126\5\uffff\1\4\2\uffff\1\4\1\uffff\1\0\1\4\2\0\3\4\1\0\2\4\4"+
         "\0";
     static final String DFA30_maxS =
-        "\1\155\1\160\6\uffff\1\171\1\uffff\1\171\1\0\1\uffff\1\171\2\0\3"+
-        "\171\1\0\2\171\4\0";
+        "\1\156\1\161\5\uffff\1\172\2\uffff\1\172\1\uffff\1\0\1\172\2\0\3"+
+        "\172\1\0\2\172\4\0";
     static final String DFA30_acceptS =
-        "\2\uffff\1\2\5\1\1\uffff\1\2\2\uffff\1\1\15\uffff";
+        "\2\uffff\1\2\3\1\1\2\1\uffff\2\1\1\uffff\1\1\16\uffff";
     static final String DFA30_specialS =
-        "\1\3\1\11\6\uffff\1\5\1\uffff\1\4\1\12\1\uffff\1\6\1\7\1\14\1\2"+
-        "\1\10\1\1\1\13\1\0\1\15\4\uffff}>";
+        "\1\7\1\4\5\uffff\1\6\2\uffff\1\15\1\uffff\1\13\1\3\1\1\1\11\1\2"+
+        "\1\5\1\12\1\10\1\14\1\0\4\uffff}>";
     static final String[] DFA30_transitionS = {
             "\1\1\5\uffff\1\3\21\uffff\1\2",
-            "\1\11\3\uffff\1\5\1\10\2\uffff\1\11\1\6\1\7\15\uffff\1\11\2"+
-            "\uffff\1\4",
+            "\1\6\3\uffff\1\10\1\7\2\uffff\1\6\1\11\1\5\15\uffff\1\6\2\uffff"+
+            "\1\4",
             "",
             "",
             "",
             "",
             "",
+            "\122\13\1\12\4\13\1\14\37\13",
             "",
-            "\121\14\1\12\4\14\1\13\37\14",
             "",
-            "\121\14\1\17\1\20\3\14\1\16\2\14\1\15\15\14\1\21\16\14",
-            "\1\uffff",
+            "\122\13\1\16\1\20\3\13\1\17\2\13\1\15\15\13\1\21\16\13",
             "",
-            "\121\14\1\22\4\14\1\23\37\14",
             "\1\uffff",
+            "\122\13\1\22\4\13\1\23\37\13",
             "\1\uffff",
-            "\121\14\1\24\44\14",
-            "\150\14\1\25\15\14",
-            "\122\14\1\26\3\14\1\27\20\14\1\30\16\14",
             "\1\uffff",
-            "\122\14\1\20\3\14\1\31\20\14\1\21\16\14",
-            "\126\14\1\31\20\14\1\21\16\14",
+            "\122\13\1\24\44\13",
+            "\151\13\1\25\15\13",
+            "\123\13\1\26\3\13\1\27\20\13\1\30\16\13",
             "\1\uffff",
+            "\123\13\1\20\3\13\1\31\20\13\1\21\16\13",
+            "\127\13\1\31\20\13\1\21\16\13",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
             "\1\uffff"
     };
 
@@ -17917,47 +17726,41 @@
             this.transition = DFA30_transition;
         }
         public String getDescription() {
-            return "()* loopback of 401:45: ( ( COMMA )? attr= rule_attribute )*";
+            return "()* loopback of 402:45: ( ( COMMA )? attr= rule_attribute )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA30_20 = input.LA(1);
+                        int LA30_21 = input.LA(1);
 
                          
-                        int index30_20 = input.index();
+                        int index30_21 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA30_20>=VT_COMPILATION_UNIT && LA30_20<=ID)||(LA30_20>=DOT_STAR && LA30_20<=STRING)||(LA30_20>=COMMA && LA30_20<=NULL)||(LA30_20>=RIGHT_SQUARE && LA30_20<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+                        if ( ((LA30_21>=VT_COMPILATION_UNIT && LA30_21<=STRING)||(LA30_21>=COMMA && LA30_21<=NULL)||(LA30_21>=RIGHT_SQUARE && LA30_21<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 11;}
 
-                        else if ( (LA30_20==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+                        else if ( (LA30_21==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
 
-                        else if ( (LA30_20==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 25;}
+                        else if ( (LA30_21==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 25;}
 
-                        else if ( (LA30_20==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 16;}
-
                          
-                        input.seek(index30_20);
+                        input.seek(index30_21);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA30_18 = input.LA(1);
+                        int LA30_14 = input.LA(1);
 
                          
-                        int index30_18 = input.index();
+                        int index30_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA30_18>=VT_COMPILATION_UNIT && LA30_18<=ID)||(LA30_18>=DOT_STAR && LA30_18<=STRING)||(LA30_18>=COMMA && LA30_18<=NULL)||(LA30_18>=RIGHT_SQUARE && LA30_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 11;}
 
-                        else if ( (LA30_18==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 22;}
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 6;}
 
-                        else if ( (LA30_18==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 23;}
-
-                        else if ( (LA30_18==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 24;}
-
                          
-                        input.seek(index30_18);
+                        input.seek(index30_14);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
@@ -17969,199 +17772,205 @@
                         s = -1;
                         if ( (LA30_16==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 20;}
 
-                        else if ( ((LA30_16>=VT_COMPILATION_UNIT && LA30_16<=SEMICOLON)||(LA30_16>=DOT && LA30_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+                        else if ( ((LA30_16>=VT_COMPILATION_UNIT && LA30_16<=SEMICOLON)||(LA30_16>=DOT && LA30_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 11;}
 
                          
                         input.seek(index30_16);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA30_0 = input.LA(1);
+                        int LA30_13 = input.LA(1);
 
                          
-                        int index30_0 = input.index();
+                        int index30_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("when"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("dialect"))))) {s = 1;}
+                        if ( ((LA30_13>=VT_COMPILATION_UNIT && LA30_13<=SEMICOLON)||(LA30_13>=DOT && LA30_13<=STRING)||(LA30_13>=COMMA && LA30_13<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 11;}
 
-                        else if ( (LA30_0==THEN) ) {s = 2;}
+                        else if ( (LA30_13==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 18;}
 
-                        else if ( (LA30_0==COMMA) ) {s = 3;}
+                        else if ( (LA30_13==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 19;}
 
                          
-                        input.seek(index30_0);
+                        input.seek(index30_13);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA30_10 = input.LA(1);
+                        int LA30_1 = input.LA(1);
 
                          
-                        int index30_10 = input.index();
+                        int index30_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_10==COLON) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 13;}
+                        if ( (LA30_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {s = 4;}
 
-                        else if ( (LA30_10==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 14;}
+                        else if ( (LA30_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 5;}
 
-                        else if ( (LA30_10==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 15;}
+                        else if ( (LA30_1==ID||LA30_1==COLON||LA30_1==THEN) && ((validateIdentifierKey("when")))) {s = 6;}
 
-                        else if ( (LA30_10==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 16;}
+                        else if ( (LA30_1==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 7;}
 
-                        else if ( (LA30_10==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+                        else if ( (LA30_1==STRING) && ((validateIdentifierKey("dialect")))) {s = 8;}
 
-                        else if ( ((LA30_10>=VT_COMPILATION_UNIT && LA30_10<=SEMICOLON)||(LA30_10>=DOT_STAR && LA30_10<=STRING)||(LA30_10>=COMMA && LA30_10<=RIGHT_PAREN)||(LA30_10>=BOOL && LA30_10<=NULL)||(LA30_10>=RIGHT_SQUARE && LA30_10<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+                        else if ( (LA30_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 9;}
 
                          
-                        input.seek(index30_10);
+                        input.seek(index30_1);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA30_8 = input.LA(1);
+                        int LA30_17 = input.LA(1);
 
                          
-                        int index30_8 = input.index();
+                        int index30_17 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_8==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 10;}
+                        if ( (LA30_17==RIGHT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 21;}
 
-                        else if ( (LA30_8==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 11;}
+                        else if ( ((LA30_17>=VT_COMPILATION_UNIT && LA30_17<=LEFT_SQUARE)||(LA30_17>=THEN && LA30_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 11;}
 
-                        else if ( ((LA30_8>=VT_COMPILATION_UNIT && LA30_8<=SEMICOLON)||(LA30_8>=DOT && LA30_8<=STRING)||(LA30_8>=COMMA && LA30_8<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
-
                          
-                        input.seek(index30_8);
+                        input.seek(index30_17);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA30_13 = input.LA(1);
+                        int LA30_7 = input.LA(1);
 
                          
-                        int index30_13 = input.index();
+                        int index30_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_13==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 18;}
+                        if ( (LA30_7==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 10;}
 
-                        else if ( (LA30_13==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 19;}
+                        else if ( ((LA30_7>=VT_COMPILATION_UNIT && LA30_7<=SEMICOLON)||(LA30_7>=DOT && LA30_7<=STRING)||(LA30_7>=COMMA && LA30_7<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 11;}
 
-                        else if ( ((LA30_13>=VT_COMPILATION_UNIT && LA30_13<=SEMICOLON)||(LA30_13>=DOT && LA30_13<=STRING)||(LA30_13>=COMMA && LA30_13<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+                        else if ( (LA30_7==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 12;}
 
                          
-                        input.seek(index30_13);
+                        input.seek(index30_7);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA30_14 = input.LA(1);
+                        int LA30_0 = input.LA(1);
 
                          
-                        int index30_14 = input.index();
+                        int index30_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
+                        if ( (LA30_0==ID) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("duration"))||(validateIdentifierKey("when"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("enabled"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))||(validateIdentifierKey("salience"))||(validateIdentifierKey("dialect"))))) {s = 1;}
 
-                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+                        else if ( (LA30_0==THEN) ) {s = 2;}
 
+                        else if ( (LA30_0==COMMA) ) {s = 3;}
+
                          
-                        input.seek(index30_14);
+                        input.seek(index30_0);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA30_17 = input.LA(1);
+                        int LA30_19 = input.LA(1);
 
                          
-                        int index30_17 = input.index();
+                        int index30_19 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_17==RIGHT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 21;}
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 11;}
 
-                        else if ( ((LA30_17>=VT_COMPILATION_UNIT && LA30_17<=LEFT_SQUARE)||(LA30_17>=THEN && LA30_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 6;}
 
                          
-                        input.seek(index30_17);
+                        input.seek(index30_19);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA30_1 = input.LA(1);
+                        int LA30_15 = input.LA(1);
 
                          
-                        int index30_1 = input.index();
+                        int index30_15 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_1==MISC) && (((validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "effective"))||(validateIdentifierKey("agenda") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("date") && validateLT(2, "-") && validateLT(3, "expires"))||(validateIdentifierKey("lock") && validateLT(2, "-") && validateLT(3, "on") && validateLT(4, "-") && validateLT(5, "active"))||(validateIdentifierKey("activation") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("no") && validateLT(2, "-") && validateLT(3, "loop"))||(validateIdentifierKey("ruleflow") && validateLT(2, "-") && validateLT(3, "group"))||(validateIdentifierKey("auto") && validateLT(2, "-") && validateLT(3, "focus"))))) {s = 4;}
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 11;}
 
-                        else if ( (LA30_1==STRING) && ((validateIdentifierKey("dialect")))) {s = 5;}
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 6;}
 
-                        else if ( (LA30_1==BOOL) && ((validateIdentifierKey("enabled")))) {s = 6;}
-
-                        else if ( (LA30_1==INT) && (((validateIdentifierKey("duration"))||(validateIdentifierKey("salience"))))) {s = 7;}
-
-                        else if ( (LA30_1==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 8;}
-
-                        else if ( (LA30_1==ID||LA30_1==COLON||LA30_1==THEN) && ((validateIdentifierKey("when")))) {s = 9;}
-
                          
-                        input.seek(index30_1);
+                        input.seek(index30_15);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA30_11 = input.LA(1);
+                        int LA30_18 = input.LA(1);
 
                          
-                        int index30_11 = input.index();
+                        int index30_18 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
+                        if ( ((LA30_18>=VT_COMPILATION_UNIT && LA30_18<=ID)||(LA30_18>=DOT_STAR && LA30_18<=STRING)||(LA30_18>=COMMA && LA30_18<=NULL)||(LA30_18>=RIGHT_SQUARE && LA30_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 11;}
 
-                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+                        else if ( (LA30_18==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 22;}
 
+                        else if ( (LA30_18==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 23;}
+
+                        else if ( (LA30_18==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 24;}
+
                          
-                        input.seek(index30_11);
+                        input.seek(index30_18);
                         if ( s>=0 ) return s;
                         break;
                     case 11 : 
-                        int LA30_19 = input.LA(1);
+                        int LA30_12 = input.LA(1);
 
                          
-                        int index30_19 = input.index();
+                        int index30_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
+                        if ( ((validateIdentifierKey("salience"))) ) {s = 11;}
 
-                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+                        else if ( ((validateIdentifierKey("when"))) ) {s = 6;}
 
                          
-                        input.seek(index30_19);
+                        input.seek(index30_12);
                         if ( s>=0 ) return s;
                         break;
                     case 12 : 
-                        int LA30_15 = input.LA(1);
+                        int LA30_20 = input.LA(1);
 
                          
-                        int index30_15 = input.index();
+                        int index30_20 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("salience"))) ) {s = 12;}
+                        if ( ((LA30_20>=VT_COMPILATION_UNIT && LA30_20<=ID)||(LA30_20>=DOT_STAR && LA30_20<=STRING)||(LA30_20>=COMMA && LA30_20<=NULL)||(LA30_20>=RIGHT_SQUARE && LA30_20<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 11;}
 
-                        else if ( ((validateIdentifierKey("when"))) ) {s = 9;}
+                        else if ( (LA30_20==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
 
+                        else if ( (LA30_20==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 25;}
+
+                        else if ( (LA30_20==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 16;}
+
                          
-                        input.seek(index30_15);
+                        input.seek(index30_20);
                         if ( s>=0 ) return s;
                         break;
                     case 13 : 
-                        int LA30_21 = input.LA(1);
+                        int LA30_10 = input.LA(1);
 
                          
-                        int index30_21 = input.index();
+                        int index30_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA30_21>=VT_COMPILATION_UNIT && LA30_21<=STRING)||(LA30_21>=COMMA && LA30_21<=NULL)||(LA30_21>=RIGHT_SQUARE && LA30_21<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 12;}
+                        if ( (LA30_10==COLON) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 13;}
 
-                        else if ( (LA30_21==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+                        else if ( ((LA30_10>=VT_COMPILATION_UNIT && LA30_10<=SEMICOLON)||(LA30_10>=DOT_STAR && LA30_10<=STRING)||(LA30_10>=COMMA && LA30_10<=RIGHT_PAREN)||(LA30_10>=BOOL && LA30_10<=NULL)||(LA30_10>=RIGHT_SQUARE && LA30_10<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey("salience")))) {s = 11;}
 
-                        else if ( (LA30_21==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 25;}
+                        else if ( (LA30_10==ID) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 14;}
 
+                        else if ( (LA30_10==LEFT_PAREN) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 15;}
+
+                        else if ( (LA30_10==DOT) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 16;}
+
+                        else if ( (LA30_10==LEFT_SQUARE) && (((validateIdentifierKey("when"))||(validateIdentifierKey("salience"))))) {s = 17;}
+
                          
-                        input.seek(index30_21);
+                        input.seek(index30_10);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -18177,41 +17986,41 @@
     static final String DFA47_eofS =
         "\164\uffff";
     static final String DFA47_minS =
-        "\3\125\2\0\1\125\1\0\1\uffff\1\125\1\154\2\uffff\1\126\1\125\1\uffff"+
-        "\1\126\1\132\1\125\1\154\1\125\1\126\1\125\1\126\1\132\1\125\2\0"+
-        "\1\125\1\154\2\125\2\0\1\125\1\0\1\4\10\125\2\uffff\1\126\1\132"+
-        "\1\125\1\0\2\125\1\4\10\125\1\0\1\uffff\1\125\1\uffff\1\4\24\0\1"+
-        "\uffff\16\0\1\uffff\16\0";
+        "\3\126\2\0\1\126\1\0\1\126\1\155\3\uffff\1\127\1\126\1\uffff\1\127"+
+        "\1\133\1\126\1\155\1\126\1\127\1\126\1\127\1\133\1\126\2\0\1\126"+
+        "\1\155\2\126\2\0\1\126\1\4\10\126\1\0\2\uffff\1\127\1\133\1\126"+
+        "\1\0\2\126\1\0\1\4\10\126\1\uffff\1\126\1\4\11\0\1\uffff\13\0\1"+
+        "\uffff\4\0\1\uffff\30\0";
     static final String DFA47_maxS =
-        "\2\132\1\153\2\0\1\132\1\0\1\uffff\1\125\1\154\2\uffff\1\153\1\125"+
-        "\1\uffff\2\153\1\125\1\154\1\134\1\153\1\134\3\153\2\0\1\125\1\154"+
-        "\1\134\1\153\2\0\1\125\1\0\1\171\1\125\1\153\6\152\2\uffff\3\153"+
-        "\1\0\1\140\1\125\1\171\1\125\1\153\6\152\1\0\1\uffff\1\153\1\uffff"+
-        "\1\171\24\0\1\uffff\16\0\1\uffff\16\0";
+        "\2\133\1\154\2\0\1\133\1\0\1\126\1\155\3\uffff\1\154\1\126\1\uffff"+
+        "\2\154\1\126\1\155\1\135\1\154\1\135\3\154\2\0\1\126\1\155\1\135"+
+        "\1\154\2\0\1\126\1\172\1\126\1\154\6\153\1\0\2\uffff\3\154\1\0\1"+
+        "\141\1\126\1\0\1\172\1\126\1\154\6\153\1\uffff\1\154\1\172\11\0"+
+        "\1\uffff\13\0\1\uffff\4\0\1\uffff\30\0";
     static final String DFA47_acceptS =
-        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\1"+
-        "\uffff\1\3\25\uffff\1\3\16\uffff\1\3\16\uffff";
+        "\11\uffff\1\1\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\13\uffff"+
+        "\1\3\13\uffff\1\3\4\uffff\1\3\30\uffff";
     static final String DFA47_specialS =
-        "\2\uffff\1\11\1\0\1\12\1\uffff\1\10\22\uffff\1\2\1\7\4\uffff\1\5"+
-        "\1\1\1\uffff\1\3\16\uffff\1\6\13\uffff\1\4\66\uffff}>";
+        "\2\uffff\1\10\1\6\1\7\1\uffff\1\12\22\uffff\1\1\1\4\4\uffff\1\0"+
+        "\1\5\12\uffff\1\3\5\uffff\1\2\2\uffff\1\11\77\uffff}>";
     static final String[] DFA47_transitionS = {
             "\1\2\4\uffff\1\1",
-            "\1\4\4\uffff\1\3",
-            "\1\7\1\10\3\uffff\1\6\2\uffff\1\5\15\uffff\1\11",
+            "\1\3\4\uffff\1\4",
+            "\1\11\1\7\3\uffff\1\6\2\uffff\1\5\15\uffff\1\10",
             "\1\uffff",
             "\1\uffff",
             "\1\14\4\uffff\1\15",
             "\1\uffff",
-            "",
             "\1\17",
             "\1\20",
             "",
             "",
+            "",
             "\1\21\3\uffff\1\23\20\uffff\1\22",
             "\1\24",
             "",
-            "\1\10\3\uffff\1\25\20\uffff\1\11",
-            "\1\25\20\uffff\1\11",
+            "\1\7\3\uffff\1\25\20\uffff\1\10",
+            "\1\25\20\uffff\1\10",
             "\1\26",
             "\1\27",
             "\1\30\4\uffff\1\31\1\uffff\1\32",
@@ -18219,52 +18028,51 @@
             "\1\36\4\uffff\1\37\1\uffff\1\40",
             "\1\21\3\uffff\1\23\20\uffff\1\22",
             "\1\23\20\uffff\1\22",
-            "\1\45\1\44\3\uffff\1\42\2\uffff\1\41\5\uffff\1\46\1\47\1\50"+
-            "\1\51\1\52\1\53\2\uffff\1\43",
+            "\1\44\1\43\3\uffff\1\53\2\uffff\1\41\5\uffff\1\45\1\46\1\47"+
+            "\1\50\1\51\1\52\2\uffff\1\42",
             "\1\uffff",
             "\1\uffff",
             "\1\56",
             "\1\57",
             "\1\60\4\uffff\1\61\1\uffff\1\62",
-            "\1\66\1\65\3\uffff\1\75\2\uffff\1\63\5\uffff\1\67\1\70\1\71"+
-            "\1\72\1\73\1\74\2\uffff\1\64",
+            "\1\67\1\66\3\uffff\1\64\2\uffff\1\63\5\uffff\1\70\1\71\1\72"+
+            "\1\73\1\74\1\75\2\uffff\1\65",
             "\1\uffff",
             "\1\uffff",
             "\1\77",
+            "\150\100\1\101\1\102\15\100",
+            "\1\103",
+            "\1\106\3\uffff\1\107\1\104\3\uffff\2\107\11\uffff\2\107\1\105",
+            "\1\110\3\uffff\1\107\1\111\3\uffff\2\107\11\uffff\2\107",
+            "\1\110\3\uffff\1\107\1\111\3\uffff\2\107\11\uffff\2\107",
+            "\1\110\3\uffff\1\107\1\111\3\uffff\2\107\11\uffff\2\107",
+            "\1\110\3\uffff\1\107\1\111\3\uffff\2\107\11\uffff\2\107",
+            "\1\110\3\uffff\1\107\1\111\3\uffff\2\107\11\uffff\2\107",
+            "\1\110\3\uffff\1\107\1\111\3\uffff\2\107\11\uffff\2\107",
             "\1\uffff",
-            "\147\101\1\102\1\103\15\101",
-            "\1\104",
-            "\1\105\3\uffff\1\106\1\107\3\uffff\2\106\11\uffff\2\106\1\110",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
             "",
             "",
             "\1\33\3\uffff\1\35\20\uffff\1\34",
             "\1\35\20\uffff\1\34",
-            "\1\117\1\116\3\uffff\1\114\2\uffff\1\113\5\uffff\1\120\1\121"+
-            "\1\122\1\123\1\124\1\125\2\uffff\1\115",
+            "\1\116\1\115\3\uffff\1\125\2\uffff\1\113\5\uffff\1\117\1\120"+
+            "\1\121\1\122\1\123\1\124\2\uffff\1\114",
             "\1\uffff",
             "\1\127\6\uffff\1\131\3\uffff\1\130",
             "\1\132",
-            "\147\133\1\134\1\135\15\133",
-            "\1\136",
-            "\1\140\3\uffff\1\141\1\142\3\uffff\2\141\11\uffff\2\141\1\137",
-            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
-            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
-            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
-            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
-            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
-            "\1\143\3\uffff\1\141\1\144\3\uffff\2\141\11\uffff\2\141",
             "\1\uffff",
+            "\150\134\1\135\1\136\15\134",
+            "\1\137",
+            "\1\140\3\uffff\1\141\1\142\3\uffff\2\141\11\uffff\2\141\1\143",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
             "",
             "\1\150\1\147\3\uffff\1\157\1\163\1\32\3\uffff\1\162\1\161\1"+
             "\160\1\151\1\152\1\153\1\154\1\155\1\156\2\uffff\1\146",
-            "",
-            "\147\101\1\102\1\103\15\101",
+            "\150\100\1\101\1\102\15\100",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18274,6 +18082,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18290,6 +18099,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18300,7 +18110,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18347,180 +18156,180 @@
             this.transition = DFA47_transition;
         }
         public String getDescription() {
-            return "513:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "514: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 LA47_3 = input.LA(1);
+                        int LA47_31 = input.LA(1);
 
                          
-                        int index47_3 = input.index();
+                        int index47_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (true) ) {s = 62;}
 
                          
-                        input.seek(index47_3);
+                        input.seek(index47_31);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA47_32 = input.LA(1);
+                        int LA47_25 = input.LA(1);
 
                          
-                        int index47_32 = input.index();
+                        int index47_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 44;}
 
                          
-                        input.seek(index47_32);
+                        input.seek(index47_25);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA47_25 = input.LA(1);
+                        int LA47_49 = input.LA(1);
 
                          
-                        int index47_25 = input.index();
+                        int index47_49 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 44;}
+                        else if ( (true) ) {s = 86;}
 
                          
-                        input.seek(index47_25);
+                        input.seek(index47_49);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA47_34 = input.LA(1);
+                        int LA47_43 = input.LA(1);
 
                          
-                        int index47_34 = input.index();
+                        int index47_43 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 64;}
+                        else if ( (true) ) {s = 74;}
 
                          
-                        input.seek(index47_34);
+                        input.seek(index47_43);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA47_61 = input.LA(1);
+                        int LA47_26 = input.LA(1);
 
                          
-                        int index47_61 = input.index();
+                        int index47_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 101;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index47_61);
+                        input.seek(index47_26);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA47_31 = input.LA(1);
+                        int LA47_32 = input.LA(1);
 
                          
-                        int index47_31 = input.index();
+                        int index47_32 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 62;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index47_31);
+                        input.seek(index47_32);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA47_49 = input.LA(1);
+                        int LA47_3 = input.LA(1);
 
                          
-                        int index47_49 = input.index();
+                        int index47_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 86;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index47_49);
+                        input.seek(index47_3);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA47_26 = input.LA(1);
+                        int LA47_4 = input.LA(1);
 
                          
-                        int index47_26 = input.index();
+                        int index47_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 11;}
 
                          
-                        input.seek(index47_26);
+                        input.seek(index47_4);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA47_6 = input.LA(1);
+                        int LA47_2 = input.LA(1);
 
                          
-                        int index47_6 = input.index();
+                        int index47_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (((synpred6()&&(validateIdentifierKey("forall")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||synpred6()||(synpred6()&&(validateIdentifierKey("eval"))))) ) {s = 7;}
+                        if ( (LA47_2==COLON) ) {s = 5;}
 
-                        else if ( (true) ) {s = 14;}
+                        else if ( (LA47_2==LEFT_PAREN) ) {s = 6;}
 
+                        else if ( (LA47_2==DOT) ) {s = 7;}
+
+                        else if ( (LA47_2==LEFT_SQUARE) ) {s = 8;}
+
+                        else if ( (LA47_2==ID) && (((synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))))) {s = 9;}
+
                          
-                        input.seek(index47_6);
+                        input.seek(index47_2);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA47_2 = input.LA(1);
+                        int LA47_52 = input.LA(1);
 
                          
-                        int index47_2 = input.index();
+                        int index47_52 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA47_2==COLON) ) {s = 5;}
+                        if ( (synpred6()) ) {s = 9;}
 
-                        else if ( (LA47_2==LEFT_PAREN) ) {s = 6;}
+                        else if ( (true) ) {s = 91;}
 
-                        else if ( (LA47_2==ID) && (((synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))))) {s = 7;}
-
-                        else if ( (LA47_2==DOT) ) {s = 8;}
-
-                        else if ( (LA47_2==LEFT_SQUARE) ) {s = 9;}
-
                          
-                        input.seek(index47_2);
+                        input.seek(index47_52);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA47_4 = input.LA(1);
+                        int LA47_6 = input.LA(1);
 
                          
-                        int index47_4 = input.index();
+                        int index47_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (((synpred6()&&(validateIdentifierKey("exists")))||(synpred6()&&(validateIdentifierKey("not")))||(synpred6()&&(validateIdentifierKey("eval")))||(synpred6()&&(validateIdentifierKey("forall")))||synpred6())) ) {s = 9;}
 
-                        else if ( (true) ) {s = 11;}
+                        else if ( (true) ) {s = 14;}
 
                          
-                        input.seek(index47_4);
+                        input.seek(index47_6);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -18532,27 +18341,27 @@
         }
     }
     static final String DFA48_eotS =
-        "\164\uffff";
+        "\165\uffff";
     static final String DFA48_eofS =
-        "\164\uffff";
+        "\165\uffff";
     static final String DFA48_minS =
-        "\3\125\2\0\1\125\1\0\1\uffff\1\125\1\154\2\uffff\1\126\1\125\1\uffff"+
-        "\1\126\1\132\1\125\1\154\1\125\1\126\1\125\1\126\1\132\1\125\2\0"+
-        "\1\125\1\154\2\125\2\0\1\125\1\0\1\4\10\125\2\uffff\1\126\1\132"+
-        "\1\125\1\0\2\125\1\0\1\4\10\125\1\uffff\1\125\1\uffff\1\4\24\0\1"+
-        "\uffff\4\0\1\uffff\30\0";
+        "\3\126\2\0\1\126\1\0\1\uffff\1\126\1\155\2\uffff\1\127\1\126\1\uffff"+
+        "\1\127\1\133\1\126\1\155\1\126\1\127\1\126\1\127\1\133\1\126\2\0"+
+        "\1\126\1\155\2\126\2\0\1\126\1\4\10\126\1\0\2\uffff\1\127\1\133"+
+        "\1\126\1\0\2\126\1\4\10\126\1\0\2\uffff\1\126\1\4\11\0\1\uffff\13"+
+        "\0\1\uffff\16\0\1\uffff\16\0";
     static final String DFA48_maxS =
-        "\2\132\1\153\2\0\1\132\1\0\1\uffff\1\125\1\154\2\uffff\1\153\1\125"+
-        "\1\uffff\2\153\1\125\1\154\1\134\1\153\1\134\3\153\2\0\1\125\1\154"+
-        "\1\134\1\153\2\0\1\125\1\0\1\171\1\125\1\153\6\152\2\uffff\3\153"+
-        "\1\0\1\140\1\125\1\0\1\171\1\125\1\153\6\152\1\uffff\1\153\1\uffff"+
-        "\1\171\24\0\1\uffff\4\0\1\uffff\30\0";
+        "\2\133\1\154\2\0\1\133\1\0\1\uffff\1\126\1\155\2\uffff\1\154\1\126"+
+        "\1\uffff\2\154\1\126\1\155\1\135\1\154\1\135\3\154\2\0\1\126\1\155"+
+        "\1\135\1\154\2\0\1\126\1\172\1\126\1\154\6\153\1\0\2\uffff\3\154"+
+        "\1\0\1\141\1\126\1\172\1\126\1\154\6\153\1\0\2\uffff\1\154\1\172"+
+        "\11\0\1\uffff\13\0\1\uffff\16\0\1\uffff\16\0";
     static final String DFA48_acceptS =
-        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\1\3\1"+
-        "\uffff\1\3\25\uffff\1\3\4\uffff\1\3\30\uffff";
+        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\35\uffff\2\3\20\uffff\2\3\13"+
+        "\uffff\1\3\13\uffff\1\3\16\uffff\1\3\16\uffff";
     static final String DFA48_specialS =
-        "\2\uffff\1\12\1\7\1\1\1\uffff\1\2\22\uffff\1\5\1\0\4\uffff\1\3\1"+
-        "\4\1\uffff\1\10\16\uffff\1\6\2\uffff\1\11\77\uffff}>";
+        "\2\uffff\1\10\1\3\1\1\1\uffff\1\7\22\uffff\1\2\1\6\4\uffff\1\4\1"+
+        "\11\12\uffff\1\12\5\uffff\1\5\13\uffff\1\0\67\uffff}>";
     static final String[] DFA48_transitionS = {
             "\1\2\4\uffff\1\1",
             "\1\4\4\uffff\1\3",
@@ -18578,39 +18387,38 @@
             "\1\36\4\uffff\1\37\1\uffff\1\40",
             "\1\21\3\uffff\1\23\20\uffff\1\22",
             "\1\23\20\uffff\1\22",
-            "\1\45\1\44\3\uffff\1\42\2\uffff\1\41\5\uffff\1\46\1\47\1\50"+
-            "\1\51\1\52\1\53\2\uffff\1\43",
+            "\1\44\1\43\3\uffff\1\53\2\uffff\1\41\5\uffff\1\45\1\46\1\47"+
+            "\1\50\1\51\1\52\2\uffff\1\42",
             "\1\uffff",
             "\1\uffff",
             "\1\56",
             "\1\57",
             "\1\60\4\uffff\1\61\1\uffff\1\62",
-            "\1\67\1\66\3\uffff\1\64\2\uffff\1\63\5\uffff\1\70\1\71\1\72"+
-            "\1\73\1\74\1\75\2\uffff\1\65",
+            "\1\66\1\65\3\uffff\1\75\2\uffff\1\63\5\uffff\1\67\1\70\1\71"+
+            "\1\72\1\73\1\74\2\uffff\1\64",
             "\1\uffff",
             "\1\uffff",
-            "\1\77",
-            "\1\uffff",
-            "\147\101\1\102\1\103\15\101",
+            "\1\100",
+            "\150\101\1\102\1\103\15\101",
             "\1\104",
-            "\1\105\3\uffff\1\106\1\107\3\uffff\2\106\11\uffff\2\106\1\110",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
-            "\1\111\3\uffff\1\106\1\112\3\uffff\2\106\11\uffff\2\106",
+            "\1\105\3\uffff\1\107\1\110\3\uffff\2\107\11\uffff\2\107\1\106",
+            "\1\111\3\uffff\1\107\1\112\3\uffff\2\107\11\uffff\2\107",
+            "\1\111\3\uffff\1\107\1\112\3\uffff\2\107\11\uffff\2\107",
+            "\1\111\3\uffff\1\107\1\112\3\uffff\2\107\11\uffff\2\107",
+            "\1\111\3\uffff\1\107\1\112\3\uffff\2\107\11\uffff\2\107",
+            "\1\111\3\uffff\1\107\1\112\3\uffff\2\107\11\uffff\2\107",
+            "\1\111\3\uffff\1\107\1\112\3\uffff\2\107\11\uffff\2\107",
+            "\1\uffff",
             "",
             "",
             "\1\33\3\uffff\1\35\20\uffff\1\34",
             "\1\35\20\uffff\1\34",
-            "\1\117\1\116\3\uffff\1\114\2\uffff\1\113\5\uffff\1\120\1\121"+
+            "\1\117\1\116\3\uffff\1\126\2\uffff\1\114\5\uffff\1\120\1\121"+
             "\1\122\1\123\1\124\1\125\2\uffff\1\115",
             "\1\uffff",
-            "\1\127\6\uffff\1\131\3\uffff\1\130",
-            "\1\132",
-            "\1\uffff",
-            "\147\134\1\135\1\136\15\134",
+            "\1\130\6\uffff\1\132\3\uffff\1\131",
+            "\1\133",
+            "\150\134\1\135\1\136\15\134",
             "\1\137",
             "\1\140\3\uffff\1\141\1\142\3\uffff\2\141\11\uffff\2\141\1\143",
             "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
@@ -18619,11 +18427,12 @@
             "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
             "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
             "\1\144\3\uffff\1\141\1\145\3\uffff\2\141\11\uffff\2\141",
+            "\1\uffff",
             "",
-            "\1\150\1\147\3\uffff\1\157\1\163\1\32\3\uffff\1\162\1\161\1"+
-            "\160\1\151\1\152\1\153\1\154\1\155\1\156\2\uffff\1\146",
             "",
-            "\147\101\1\102\1\103\15\101",
+            "\1\151\1\150\3\uffff\1\160\1\164\1\32\3\uffff\1\163\1\162\1"+
+            "\161\1\152\1\153\1\154\1\155\1\156\1\157\2\uffff\1\147",
+            "\150\101\1\102\1\103\15\101",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18633,6 +18442,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18649,7 +18459,6 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18660,6 +18469,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18706,24 +18516,24 @@
             this.transition = DFA48_transition;
         }
         public String getDescription() {
-            return "521:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "522: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 LA48_26 = input.LA(1);
+                        int LA48_61 = input.LA(1);
 
                          
-                        int index48_26 = input.index();
+                        int index48_61 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 102;}
 
                          
-                        input.seek(index48_26);
+                        input.seek(index48_61);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
@@ -18742,144 +18552,144 @@
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA48_6 = input.LA(1);
+                        int LA48_25 = input.LA(1);
 
                          
-                        int index48_6 = input.index();
+                        int index48_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((synpred7()||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("eval")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("forall"))))) ) {s = 7;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 14;}
+                        else if ( (true) ) {s = 44;}
 
                          
-                        input.seek(index48_6);
+                        input.seek(index48_25);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA48_31 = input.LA(1);
+                        int LA48_3 = input.LA(1);
 
                          
-                        int index48_31 = input.index();
+                        int index48_3 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 62;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index48_31);
+                        input.seek(index48_3);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA48_32 = input.LA(1);
+                        int LA48_31 = input.LA(1);
 
                          
-                        int index48_32 = input.index();
+                        int index48_31 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 62;}
 
                          
-                        input.seek(index48_32);
+                        input.seek(index48_31);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA48_25 = input.LA(1);
+                        int LA48_49 = input.LA(1);
 
                          
-                        int index48_25 = input.index();
+                        int index48_49 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 44;}
+                        else if ( (true) ) {s = 87;}
 
                          
-                        input.seek(index48_25);
+                        input.seek(index48_49);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA48_49 = input.LA(1);
+                        int LA48_26 = input.LA(1);
 
                          
-                        int index48_49 = input.index();
+                        int index48_26 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 86;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index48_49);
+                        input.seek(index48_26);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA48_3 = input.LA(1);
+                        int LA48_6 = input.LA(1);
 
                          
-                        int index48_3 = input.index();
+                        int index48_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (((synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("forall")))||synpred7()||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("eval"))))) ) {s = 7;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (true) ) {s = 14;}
 
                          
-                        input.seek(index48_3);
+                        input.seek(index48_6);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA48_34 = input.LA(1);
+                        int LA48_2 = input.LA(1);
 
                          
-                        int index48_34 = input.index();
+                        int index48_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (LA48_2==COLON) ) {s = 5;}
 
-                        else if ( (true) ) {s = 64;}
+                        else if ( (LA48_2==LEFT_PAREN) ) {s = 6;}
 
+                        else if ( (LA48_2==ID) && (((synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))))) {s = 7;}
+
+                        else if ( (LA48_2==DOT) ) {s = 8;}
+
+                        else if ( (LA48_2==LEFT_SQUARE) ) {s = 9;}
+
                          
-                        input.seek(index48_34);
+                        input.seek(index48_2);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA48_52 = input.LA(1);
+                        int LA48_32 = input.LA(1);
 
                          
-                        int index48_52 = input.index();
+                        int index48_32 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (true) ) {s = 91;}
+                        else if ( (true) ) {s = 63;}
 
                          
-                        input.seek(index48_52);
+                        input.seek(index48_32);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA48_2 = input.LA(1);
+                        int LA48_43 = input.LA(1);
 
                          
-                        int index48_2 = input.index();
+                        int index48_43 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA48_2==COLON) ) {s = 5;}
+                        if ( (synpred7()) ) {s = 7;}
 
-                        else if ( (LA48_2==LEFT_PAREN) ) {s = 6;}
+                        else if ( (true) ) {s = 75;}
 
-                        else if ( (LA48_2==ID) && (((synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("exists")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))||(synpred7()&&(validateIdentifierKey("not")))))) {s = 7;}
-
-                        else if ( (LA48_2==DOT) ) {s = 8;}
-
-                        else if ( (LA48_2==LEFT_SQUARE) ) {s = 9;}
-
                          
-                        input.seek(index48_2);
+                        input.seek(index48_43);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -18895,18 +18705,18 @@
     static final String DFA53_eofS =
         "\13\uffff";
     static final String DFA53_minS =
-        "\1\125\1\132\2\4\1\0\1\125\1\0\4\uffff";
+        "\1\126\1\133\2\4\1\0\1\126\1\0\4\uffff";
     static final String DFA53_maxS =
-        "\1\125\1\132\2\171\1\0\1\134\1\0\4\uffff";
+        "\1\126\1\133\2\172\1\0\1\135\1\0\4\uffff";
     static final String DFA53_acceptS =
         "\7\uffff\1\1\1\2\1\1\1\2";
     static final String DFA53_specialS =
-        "\4\uffff\1\2\1\1\1\0\4\uffff}>";
+        "\4\uffff\1\2\1\0\1\1\4\uffff}>";
     static final String[] DFA53_transitionS = {
             "\1\1",
             "\1\2",
-            "\126\3\1\4\1\3\1\5\35\3",
-            "\126\3\1\6\1\3\1\5\35\3",
+            "\127\3\1\4\1\3\1\5\35\3",
+            "\127\3\1\6\1\3\1\5\35\3",
             "\1\uffff",
             "\1\11\5\uffff\1\11\1\12",
             "\1\uffff",
@@ -18946,39 +18756,39 @@
             this.transition = DFA53_transition;
         }
         public String getDescription() {
-            return "555:3: ( accumulate_init_clause | accumulate_id_clause )";
+            return "556:3: ( accumulate_init_clause | accumulate_id_clause )";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA53_6 = input.LA(1);
+                        int LA53_5 = input.LA(1);
 
                          
-                        int index53_6 = input.index();
+                        int index53_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey("init"))) ) {s = 9;}
+                        if ( (LA53_5==ID||LA53_5==COMMA) && ((validateIdentifierKey("init")))) {s = 9;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (LA53_5==RIGHT_PAREN) ) {s = 10;}
 
                          
-                        input.seek(index53_6);
+                        input.seek(index53_5);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA53_5 = input.LA(1);
+                        int LA53_6 = input.LA(1);
 
                          
-                        int index53_5 = input.index();
+                        int index53_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA53_5==ID||LA53_5==COMMA) && ((validateIdentifierKey("init")))) {s = 9;}
+                        if ( ((validateIdentifierKey("init"))) ) {s = 9;}
 
-                        else if ( (LA53_5==RIGHT_PAREN) ) {s = 10;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index53_5);
+                        input.seek(index53_6);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
@@ -19009,18 +18819,18 @@
     static final String DFA57_eofS =
         "\13\uffff";
     static final String DFA57_minS =
-        "\1\125\1\132\2\4\1\0\1\125\1\0\4\uffff";
+        "\1\126\1\133\2\4\1\0\1\126\1\0\4\uffff";
     static final String DFA57_maxS =
-        "\1\125\1\132\2\171\1\0\1\134\1\0\4\uffff";
+        "\1\126\1\133\2\172\1\0\1\135\1\0\4\uffff";
     static final String DFA57_acceptS =
         "\7\uffff\1\1\2\2\1\1";
     static final String DFA57_specialS =
-        "\1\0\1\4\1\6\1\2\1\5\1\1\1\3\4\uffff}>";
+        "\1\5\1\6\1\2\1\3\1\1\1\4\1\0\4\uffff}>";
     static final String[] DFA57_transitionS = {
             "\1\1",
             "\1\2",
-            "\126\3\1\4\1\3\1\5\35\3",
-            "\126\3\1\6\1\3\1\5\35\3",
+            "\127\3\1\4\1\3\1\5\35\3",
+            "\127\3\1\6\1\3\1\5\35\3",
             "\1\uffff",
             "\1\12\5\uffff\1\12\1\11",
             "\1\uffff",
@@ -19060,57 +18870,12 @@
             this.transition = DFA57_transition;
         }
         public String getDescription() {
-            return "566:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
+            return "567:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA57_0 = input.LA(1);
-
-                         
-                        int index57_0 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA57_0==ID) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 1;}
-
-                         
-                        input.seek(index57_0);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA57_5 = input.LA(1);
-
-                         
-                        int index57_5 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA57_5==RIGHT_PAREN) && ((validateIdentifierKey("result")))) {s = 9;}
-
-                        else if ( (LA57_5==ID||LA57_5==COMMA) && ((validateIdentifierKey("reverse")))) {s = 10;}
-
-                         
-                        input.seek(index57_5);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA57_3 = input.LA(1);
-
-                         
-                        int index57_3 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA57_3==RIGHT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 5;}
-
-                        else if ( ((LA57_3>=VT_COMPILATION_UNIT && LA57_3<=STRING)||LA57_3==COMMA||(LA57_3>=COLON && LA57_3<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 3;}
-
-                        else if ( (LA57_3==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 6;}
-
-                         
-                        input.seek(index57_3);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
                         int LA57_6 = input.LA(1);
 
                          
@@ -19125,20 +18890,7 @@
                         input.seek(index57_6);
                         if ( s>=0 ) return s;
                         break;
-                    case 4 : 
-                        int LA57_1 = input.LA(1);
-
-                         
-                        int index57_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA57_1==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 2;}
-
-                         
-                        input.seek(index57_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
+                    case 1 : 
                         int LA57_4 = input.LA(1);
 
                          
@@ -19153,7 +18905,7 @@
                         input.seek(index57_4);
                         if ( s>=0 ) return s;
                         break;
-                    case 6 : 
+                    case 2 : 
                         int LA57_2 = input.LA(1);
 
                          
@@ -19170,779 +18922,103 @@
                         input.seek(index57_2);
                         if ( s>=0 ) return s;
                         break;
-            }
-            if (backtracking>0) {failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 57, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA59_eotS =
-        "\30\uffff";
-    static final String DFA59_eofS =
-        "\30\uffff";
-    static final String DFA59_minS =
-        "\1\124\1\4\1\uffff\1\4\1\uffff\1\0\1\uffff\1\4\2\0\3\4\1\0\1\4\1"+
-        "\uffff\3\4\3\0\1\4\1\0";
-    static final String DFA59_maxS =
-        "\1\155\1\171\1\uffff\1\171\1\uffff\1\0\1\uffff\1\171\2\0\3\171\1"+
-        "\0\1\171\1\uffff\3\171\3\0\1\171\1\0";
-    static final String DFA59_acceptS =
-        "\2\uffff\1\2\1\uffff\1\1\1\uffff\1\1\10\uffff\1\1\10\uffff";
-    static final String DFA59_specialS =
-        "\1\uffff\1\13\1\uffff\1\5\1\uffff\1\21\1\uffff\1\14\1\11\1\15\1"+
-        "\10\1\3\1\4\1\20\1\1\1\uffff\1\6\1\7\1\2\1\17\1\16\1\12\1\0\1\uffff}>";
-    static final String[] DFA59_transitionS = {
-            "\3\2\1\uffff\1\2\1\uffff\1\1\2\2\3\uffff\2\2\13\uffff\1\2",
-            "\121\4\1\3\4\4\1\5\1\4\1\6\35\4",
-            "",
-            "\121\4\1\11\1\12\3\4\1\10\1\4\1\6\1\7\15\4\1\13\16\4",
-            "",
-            "\1\uffff",
-            "",
-            "\121\4\1\14\4\4\1\15\1\4\1\6\35\4",
-            "\1\uffff",
-            "\1\uffff",
-            "\121\4\1\16\4\4\1\17\1\4\1\6\35\4",
-            "\126\4\1\17\1\4\1\6\17\4\1\20\15\4",
-            "\122\4\1\21\3\4\1\23\1\4\1\6\16\4\1\22\16\4",
-            "\1\uffff",
-            "\122\4\1\12\3\4\1\24\1\4\1\6\16\4\1\13\16\4",
-            "",
-            "\126\4\1\25\1\4\1\6\16\4\1\13\16\4",
-            "\121\4\1\26\4\4\1\17\1\4\1\6\35\4",
-            "\126\4\1\17\1\4\1\6\17\4\1\27\15\4",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\122\4\1\21\3\4\1\23\1\4\1\6\16\4\1\22\16\4",
-            "\1\uffff"
-    };
-
-    static final short[] DFA59_eot = DFA.unpackEncodedString(DFA59_eotS);
-    static final short[] DFA59_eof = DFA.unpackEncodedString(DFA59_eofS);
-    static final char[] DFA59_min = DFA.unpackEncodedStringToUnsignedChars(DFA59_minS);
-    static final char[] DFA59_max = DFA.unpackEncodedStringToUnsignedChars(DFA59_maxS);
-    static final short[] DFA59_accept = DFA.unpackEncodedString(DFA59_acceptS);
-    static final short[] DFA59_special = DFA.unpackEncodedString(DFA59_specialS);
-    static final short[][] DFA59_transition;
-
-    static {
-        int numStates = DFA59_transitionS.length;
-        DFA59_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA59_transition[i] = DFA.unpackEncodedString(DFA59_transitionS[i]);
-        }
-    }
-
-    class DFA59 extends DFA {
-
-        public DFA59(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 59;
-            this.eot = DFA59_eot;
-            this.eof = DFA59_eof;
-            this.min = DFA59_min;
-            this.max = DFA59_max;
-            this.accept = DFA59_accept;
-            this.special = DFA59_special;
-            this.transition = DFA59_transition;
-        }
-        public String getDescription() {
-            return "594:3: ( ( LEFT_PAREN )=>args= paren_chunk )?";
-        }
-        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
-        	int _s = s;
-            switch ( s ) {
-                    case 0 : 
-                        int LA59_22 = input.LA(1);
-
-                         
-                        int index59_22 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA59_22==LEFT_SQUARE) ) {s = 18;}
-
-                        else if ( (LA59_22==LEFT_PAREN) ) {s = 19;}
-
-                        else if ( (LA59_22==DOT) ) {s = 17;}
-
-                        else if ( (LA59_22==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA59_22>=VT_COMPILATION_UNIT && LA59_22<=ID)||(LA59_22>=DOT_STAR && LA59_22<=STRING)||LA59_22==COMMA||(LA59_22>=COLON && LA59_22<=NULL)||(LA59_22>=RIGHT_SQUARE && LA59_22<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
-
-                         
-                        input.seek(index59_22);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA59_14 = input.LA(1);
-
-                         
-                        int index59_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA59_14==LEFT_SQUARE) ) {s = 11;}
-
-                        else if ( (LA59_14==LEFT_PAREN) ) {s = 20;}
-
-                        else if ( (LA59_14==DOT) ) {s = 10;}
-
-                        else if ( (LA59_14==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA59_14>=VT_COMPILATION_UNIT && LA59_14<=ID)||(LA59_14>=DOT_STAR && LA59_14<=STRING)||LA59_14==COMMA||(LA59_14>=COLON && LA59_14<=NULL)||(LA59_14>=RIGHT_SQUARE && LA59_14<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
-
-                         
-                        input.seek(index59_14);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA59_18 = input.LA(1);
-
-                         
-                        int index59_18 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA59_18==RIGHT_SQUARE) ) {s = 23;}
-
-                        else if ( (LA59_18==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA59_18>=VT_COMPILATION_UNIT && LA59_18<=STRING)||LA59_18==COMMA||(LA59_18>=COLON && LA59_18<=LEFT_SQUARE)||(LA59_18>=THEN && LA59_18<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
-
-                        else if ( (LA59_18==LEFT_PAREN) && (synpred8())) {s = 15;}
-
-                         
-                        input.seek(index59_18);
-                        if ( s>=0 ) return s;
-                        break;
                     case 3 : 
-                        int LA59_11 = input.LA(1);
+                        int LA57_3 = input.LA(1);
 
                          
-                        int index59_11 = input.index();
+                        int index57_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA59_11==RIGHT_SQUARE) ) {s = 16;}
+                        if ( (LA57_3==RIGHT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 5;}
 
-                        else if ( (LA59_11==RIGHT_PAREN) && (synpred8())) {s = 6;}
+                        else if ( ((LA57_3>=VT_COMPILATION_UNIT && LA57_3<=STRING)||LA57_3==COMMA||(LA57_3>=COLON && LA57_3<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 3;}
 
-                        else if ( ((LA59_11>=VT_COMPILATION_UNIT && LA59_11<=STRING)||LA59_11==COMMA||(LA59_11>=COLON && LA59_11<=LEFT_SQUARE)||(LA59_11>=THEN && LA59_11<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
+                        else if ( (LA57_3==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 6;}
 
-                        else if ( (LA59_11==LEFT_PAREN) && (synpred8())) {s = 15;}
-
                          
-                        input.seek(index59_11);
+                        input.seek(index57_3);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA59_12 = input.LA(1);
+                        int LA57_5 = input.LA(1);
 
                          
-                        int index59_12 = input.index();
+                        int index57_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA59_12==DOT) ) {s = 17;}
+                        if ( (LA57_5==RIGHT_PAREN) && ((validateIdentifierKey("result")))) {s = 9;}
 
-                        else if ( (LA59_12==LEFT_SQUARE) ) {s = 18;}
+                        else if ( (LA57_5==ID||LA57_5==COMMA) && ((validateIdentifierKey("reverse")))) {s = 10;}
 
-                        else if ( (LA59_12==LEFT_PAREN) ) {s = 19;}
-
-                        else if ( (LA59_12==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA59_12>=VT_COMPILATION_UNIT && LA59_12<=ID)||(LA59_12>=DOT_STAR && LA59_12<=STRING)||LA59_12==COMMA||(LA59_12>=COLON && LA59_12<=NULL)||(LA59_12>=RIGHT_SQUARE && LA59_12<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
-
                          
-                        input.seek(index59_12);
+                        input.seek(index57_5);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA59_3 = input.LA(1);
+                        int LA57_0 = input.LA(1);
 
                          
-                        int index59_3 = input.index();
+                        int index57_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA59_3==COLON) ) {s = 7;}
+                        if ( (LA57_0==ID) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 1;}
 
-                        else if ( (LA59_3==LEFT_PAREN) ) {s = 8;}
-
-                        else if ( (LA59_3==ID) ) {s = 9;}
-
-                        else if ( (LA59_3==DOT) ) {s = 10;}
-
-                        else if ( (LA59_3==LEFT_SQUARE) ) {s = 11;}
-
-                        else if ( (LA59_3==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA59_3>=VT_COMPILATION_UNIT && LA59_3<=SEMICOLON)||(LA59_3>=DOT_STAR && LA59_3<=STRING)||LA59_3==COMMA||(LA59_3>=BOOL && LA59_3<=NULL)||(LA59_3>=RIGHT_SQUARE && LA59_3<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
-
                          
-                        input.seek(index59_3);
+                        input.seek(index57_0);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA59_16 = input.LA(1);
+                        int LA57_1 = input.LA(1);
 
                          
-                        int index59_16 = input.index();
+                        int index57_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA59_16==LEFT_PAREN) ) {s = 21;}
+                        if ( (LA57_1==LEFT_PAREN) && (((validateIdentifierKey("reverse"))||(validateIdentifierKey("result"))))) {s = 2;}
 
-                        else if ( (LA59_16==LEFT_SQUARE) ) {s = 11;}
-
-                        else if ( (LA59_16==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA59_16>=VT_COMPILATION_UNIT && LA59_16<=STRING)||LA59_16==COMMA||(LA59_16>=COLON && LA59_16<=NULL)||(LA59_16>=RIGHT_SQUARE && LA59_16<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
-
                          
-                        input.seek(index59_16);
+                        input.seek(index57_1);
                         if ( s>=0 ) return s;
                         break;
-                    case 7 : 
-                        int LA59_17 = input.LA(1);
-
-                         
-                        int index59_17 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA59_17==ID) ) {s = 22;}
-
-                        else if ( (LA59_17==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA59_17>=VT_COMPILATION_UNIT && LA59_17<=SEMICOLON)||(LA59_17>=DOT && LA59_17<=STRING)||LA59_17==COMMA||(LA59_17>=COLON && LA59_17<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
-
-                        else if ( (LA59_17==LEFT_PAREN) && (synpred8())) {s = 15;}
-
-                         
-                        input.seek(index59_17);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 8 : 
-                        int LA59_10 = input.LA(1);
-
-                         
-                        int index59_10 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA59_10==ID) ) {s = 14;}
-
-                        else if ( (LA59_10==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA59_10>=VT_COMPILATION_UNIT && LA59_10<=SEMICOLON)||(LA59_10>=DOT && LA59_10<=STRING)||LA59_10==COMMA||(LA59_10>=COLON && LA59_10<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
-
-                        else if ( (LA59_10==LEFT_PAREN) && (synpred8())) {s = 15;}
-
-                         
-                        input.seek(index59_10);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 9 : 
-                        int LA59_8 = input.LA(1);
-
-                         
-                        int index59_8 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 6;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index59_8);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 10 : 
-                        int LA59_21 = input.LA(1);
-
-                         
-                        int index59_21 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 15;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index59_21);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 11 : 
-                        int LA59_1 = input.LA(1);
-
-                         
-                        int index59_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA59_1==ID) ) {s = 3;}
-
-                        else if ( ((LA59_1>=VT_COMPILATION_UNIT && LA59_1<=SEMICOLON)||(LA59_1>=DOT && LA59_1<=STRING)||LA59_1==COMMA||(LA59_1>=COLON && LA59_1<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
-
-                        else if ( (LA59_1==LEFT_PAREN) ) {s = 5;}
-
-                        else if ( (LA59_1==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                         
-                        input.seek(index59_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 12 : 
-                        int LA59_7 = input.LA(1);
-
-                         
-                        int index59_7 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA59_7==ID) ) {s = 12;}
-
-                        else if ( (LA59_7==LEFT_PAREN) ) {s = 13;}
-
-                        else if ( (LA59_7==RIGHT_PAREN) && (synpred8())) {s = 6;}
-
-                        else if ( ((LA59_7>=VT_COMPILATION_UNIT && LA59_7<=SEMICOLON)||(LA59_7>=DOT && LA59_7<=STRING)||LA59_7==COMMA||(LA59_7>=COLON && LA59_7<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 4;}
-
-                         
-                        input.seek(index59_7);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 13 : 
-                        int LA59_9 = input.LA(1);
-
-                         
-                        int index59_9 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 6;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index59_9);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 14 : 
-                        int LA59_20 = input.LA(1);
-
-                         
-                        int index59_20 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 15;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index59_20);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 15 : 
-                        int LA59_19 = input.LA(1);
-
-                         
-                        int index59_19 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 15;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index59_19);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 16 : 
-                        int LA59_13 = input.LA(1);
-
-                         
-                        int index59_13 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 15;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index59_13);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 17 : 
-                        int LA59_5 = input.LA(1);
-
-                         
-                        int index59_5 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred8()) ) {s = 6;}
-
-                        else if ( (true) ) {s = 2;}
-
-                         
-                        input.seek(index59_5);
-                        if ( s>=0 ) return s;
-                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 59, _s, input);
+                new NoViableAltException(getDescription(), 57, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA61_eotS =
-        "\26\uffff";
-    static final String DFA61_eofS =
-        "\26\uffff";
-    static final String DFA61_minS =
-        "\1\124\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 DFA61_maxS =
-        "\1\155\1\uffff\1\171\1\uffff\1\171\1\0\2\uffff\1\171\2\0\3\171\1"+
-        "\0\1\171\1\uffff\1\171\4\0";
-    static final String DFA61_acceptS =
-        "\1\uffff\1\1\1\uffff\1\3\2\uffff\2\2\10\uffff\1\2\5\uffff";
-    static final String DFA61_specialS =
-        "\1\1\1\uffff\1\12\1\uffff\1\4\1\5\2\uffff\1\13\1\2\1\3\1\10\1\6"+
-        "\1\11\1\0\1\7\1\uffff\1\14\4\uffff}>";
-    static final String[] DFA61_transitionS = {
-            "\3\3\1\uffff\1\3\1\uffff\1\2\2\3\3\uffff\2\3\11\uffff\1\1\1"+
-            "\uffff\1\3",
-            "",
-            "\121\6\1\4\4\6\1\5\1\6\1\7\35\6",
-            "",
-            "\121\6\1\12\1\13\3\6\1\11\1\6\1\7\1\10\15\6\1\14\16\6",
-            "\1\uffff",
-            "",
-            "",
-            "\121\6\1\15\4\6\1\16\1\6\1\7\35\6",
-            "\1\uffff",
-            "\1\uffff",
-            "\121\6\1\17\4\6\1\20\1\6\1\7\35\6",
-            "\126\6\1\20\1\6\1\7\17\6\1\21\15\6",
-            "\122\6\1\22\3\6\1\24\1\6\1\7\16\6\1\23\16\6",
-            "\1\uffff",
-            "\122\6\1\13\3\6\1\25\1\6\1\7\16\6\1\14\16\6",
-            "",
-            "\126\6\1\25\1\6\1\7\16\6\1\14\16\6",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff"
-    };
-
-    static final short[] DFA61_eot = DFA.unpackEncodedString(DFA61_eotS);
-    static final short[] DFA61_eof = DFA.unpackEncodedString(DFA61_eofS);
-    static final char[] DFA61_min = DFA.unpackEncodedStringToUnsignedChars(DFA61_minS);
-    static final char[] DFA61_max = DFA.unpackEncodedStringToUnsignedChars(DFA61_maxS);
-    static final short[] DFA61_accept = DFA.unpackEncodedString(DFA61_acceptS);
-    static final short[] DFA61_special = DFA.unpackEncodedString(DFA61_specialS);
-    static final short[][] DFA61_transition;
-
-    static {
-        int numStates = DFA61_transitionS.length;
-        DFA61_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA61_transition[i] = DFA.unpackEncodedString(DFA61_transitionS[i]);
-        }
-    }
-
-    class DFA61 extends DFA {
-
-        public DFA61(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 61;
-            this.eot = DFA61_eot;
-            this.eof = DFA61_eof;
-            this.min = DFA61_min;
-            this.max = DFA61_max;
-            this.accept = DFA61_accept;
-            this.special = DFA61_special;
-            this.transition = DFA61_transition;
-        }
-        public String getDescription() {
-            return "602: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 LA61_14 = input.LA(1);
-
-                         
-                        int index61_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 16;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index61_14);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA61_0 = input.LA(1);
-
-                         
-                        int index61_0 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA61_0==LEFT_SQUARE) && (synpred9())) {s = 1;}
-
-                        else if ( (LA61_0==LEFT_PAREN) ) {s = 2;}
-
-                        else if ( ((LA61_0>=SEMICOLON && LA61_0<=DOT)||LA61_0==END||(LA61_0>=COMMA && LA61_0<=RIGHT_PAREN)||(LA61_0>=DOUBLE_PIPE && LA61_0<=DOUBLE_AMPER)||LA61_0==THEN) ) {s = 3;}
-
-                         
-                        input.seek(index61_0);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA61_9 = input.LA(1);
-
-                         
-                        int index61_9 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 7;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index61_9);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA61_10 = input.LA(1);
-
-                         
-                        int index61_10 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 7;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index61_10);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA61_4 = input.LA(1);
-
-                         
-                        int index61_4 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA61_4==COLON) ) {s = 8;}
-
-                        else if ( (LA61_4==LEFT_PAREN) ) {s = 9;}
-
-                        else if ( (LA61_4==ID) ) {s = 10;}
-
-                        else if ( (LA61_4==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                        else if ( (LA61_4==DOT) ) {s = 11;}
-
-                        else if ( (LA61_4==LEFT_SQUARE) ) {s = 12;}
-
-                        else if ( ((LA61_4>=VT_COMPILATION_UNIT && LA61_4<=SEMICOLON)||(LA61_4>=DOT_STAR && LA61_4<=STRING)||LA61_4==COMMA||(LA61_4>=BOOL && LA61_4<=NULL)||(LA61_4>=RIGHT_SQUARE && LA61_4<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                         
-                        input.seek(index61_4);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
-                        int LA61_5 = input.LA(1);
-
-                         
-                        int index61_5 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred10()) ) {s = 7;}
-
-                        else if ( (true) ) {s = 3;}
-
-                         
-                        input.seek(index61_5);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 6 : 
-                        int LA61_12 = input.LA(1);
-
-                         
-                        int index61_12 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA61_12==RIGHT_SQUARE) ) {s = 17;}
-
-                        else if ( (LA61_12==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                        else if ( ((LA61_12>=VT_COMPILATION_UNIT && LA61_12<=STRING)||LA61_12==COMMA||(LA61_12>=COLON && LA61_12<=LEFT_SQUARE)||(LA61_12>=THEN && LA61_12<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                        else if ( (LA61_12==LEFT_PAREN) && (synpred10())) {s = 16;}
-
-                         
-                        input.seek(index61_12);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 7 : 
-                        int LA61_15 = input.LA(1);
-
-                         
-                        int index61_15 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA61_15==LEFT_SQUARE) ) {s = 12;}
-
-                        else if ( (LA61_15==LEFT_PAREN) ) {s = 21;}
-
-                        else if ( (LA61_15==DOT) ) {s = 11;}
-
-                        else if ( (LA61_15==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                        else if ( ((LA61_15>=VT_COMPILATION_UNIT && LA61_15<=ID)||(LA61_15>=DOT_STAR && LA61_15<=STRING)||LA61_15==COMMA||(LA61_15>=COLON && LA61_15<=NULL)||(LA61_15>=RIGHT_SQUARE && LA61_15<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                         
-                        input.seek(index61_15);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 8 : 
-                        int LA61_11 = input.LA(1);
-
-                         
-                        int index61_11 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA61_11==ID) ) {s = 15;}
-
-                        else if ( (LA61_11==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                        else if ( ((LA61_11>=VT_COMPILATION_UNIT && LA61_11<=SEMICOLON)||(LA61_11>=DOT && LA61_11<=STRING)||LA61_11==COMMA||(LA61_11>=COLON && LA61_11<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                        else if ( (LA61_11==LEFT_PAREN) && (synpred10())) {s = 16;}
-
-                         
-                        input.seek(index61_11);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 9 : 
-                        int LA61_13 = input.LA(1);
-
-                         
-                        int index61_13 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA61_13==DOT) ) {s = 18;}
-
-                        else if ( (LA61_13==LEFT_SQUARE) ) {s = 19;}
-
-                        else if ( (LA61_13==LEFT_PAREN) ) {s = 20;}
-
-                        else if ( (LA61_13==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                        else if ( ((LA61_13>=VT_COMPILATION_UNIT && LA61_13<=ID)||(LA61_13>=DOT_STAR && LA61_13<=STRING)||LA61_13==COMMA||(LA61_13>=COLON && LA61_13<=NULL)||(LA61_13>=RIGHT_SQUARE && LA61_13<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                         
-                        input.seek(index61_13);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 10 : 
-                        int LA61_2 = input.LA(1);
-
-                         
-                        int index61_2 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA61_2==ID) ) {s = 4;}
-
-                        else if ( (LA61_2==LEFT_PAREN) ) {s = 5;}
-
-                        else if ( ((LA61_2>=VT_COMPILATION_UNIT && LA61_2<=SEMICOLON)||(LA61_2>=DOT && LA61_2<=STRING)||LA61_2==COMMA||(LA61_2>=COLON && LA61_2<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                        else if ( (LA61_2==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                         
-                        input.seek(index61_2);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 11 : 
-                        int LA61_8 = input.LA(1);
-
-                         
-                        int index61_8 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA61_8==ID) ) {s = 13;}
-
-                        else if ( (LA61_8==LEFT_PAREN) ) {s = 14;}
-
-                        else if ( (LA61_8==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                        else if ( ((LA61_8>=VT_COMPILATION_UNIT && LA61_8<=SEMICOLON)||(LA61_8>=DOT && LA61_8<=STRING)||LA61_8==COMMA||(LA61_8>=COLON && LA61_8<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                         
-                        input.seek(index61_8);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 12 : 
-                        int LA61_17 = input.LA(1);
-
-                         
-                        int index61_17 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA61_17==LEFT_PAREN) ) {s = 21;}
-
-                        else if ( (LA61_17==LEFT_SQUARE) ) {s = 12;}
-
-                        else if ( (LA61_17==RIGHT_PAREN) && (synpred10())) {s = 7;}
-
-                        else if ( ((LA61_17>=VT_COMPILATION_UNIT && LA61_17<=STRING)||LA61_17==COMMA||(LA61_17>=COLON && LA61_17<=NULL)||(LA61_17>=RIGHT_SQUARE && LA61_17<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
-
-                         
-                        input.seek(index61_17);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (backtracking>0) {failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 61, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
     static final String DFA74_eotS =
         "\30\uffff";
     static final String DFA74_eofS =
         "\30\uffff";
     static final String DFA74_minS =
-        "\1\133\1\uffff\2\125\1\0\1\uffff\1\0\1\125\2\4\2\0\2\4\12\0";
+        "\1\134\1\uffff\2\126\1\uffff\1\0\1\126\1\0\1\4\1\0\1\4\1\0\2\4\12"+
+        "\0";
     static final String DFA74_maxS =
-        "\1\141\1\uffff\1\150\1\153\1\0\1\uffff\1\0\1\153\2\171\2\0\2\171"+
-        "\12\0";
+        "\1\142\1\uffff\1\151\1\154\1\uffff\1\0\1\154\1\0\1\172\1\0\1\172"+
+        "\1\0\2\172\12\0";
     static final String DFA74_acceptS =
-        "\1\uffff\1\2\3\uffff\1\1\22\uffff";
+        "\1\uffff\1\2\2\uffff\1\1\23\uffff";
     static final String DFA74_specialS =
-        "\4\uffff\1\1\1\uffff\1\0\3\uffff\1\2\1\3\14\uffff}>";
+        "\5\uffff\1\3\1\uffff\1\1\1\uffff\1\2\1\uffff\1\0\14\uffff}>";
     static final String[] DFA74_transitionS = {
             "\2\1\3\uffff\1\2\1\1",
             "",
-            "\1\3\4\uffff\1\4\10\uffff\6\5",
-            "\1\7\1\1\2\uffff\1\5\1\6\2\uffff\1\1\2\5\3\uffff\6\1\2\5\1\10",
-            "\1\uffff",
+            "\1\3\4\uffff\1\5\10\uffff\6\4",
+            "\1\6\1\1\2\uffff\1\4\1\7\2\uffff\1\1\2\4\3\uffff\6\1\2\4\1\10",
             "",
             "\1\uffff",
-            "\1\12\1\5\2\uffff\1\13\1\14\2\5\1\uffff\2\13\2\5\7\uffff\2\13"+
-            "\1\11",
-            "\147\15\1\16\1\17\15\15",
-            "\147\20\1\21\1\22\15\20",
+            "\1\11\1\4\2\uffff\1\13\1\12\2\4\1\uffff\2\13\2\4\7\uffff\2\13"+
+            "\1\14",
             "\1\uffff",
+            "\150\15\1\16\1\17\15\15",
             "\1\uffff",
-            "\121\26\1\23\3\26\1\24\1\25\1\26\1\27\1\26\2\24\11\26\2\24\17"+
-            "\26",
-            "\147\15\1\16\1\17\15\15",
+            "\122\23\1\20\3\23\1\21\1\22\1\23\1\24\1\23\2\21\11\23\2\21\17"+
+            "\23",
             "\1\uffff",
+            "\150\25\1\26\1\27\15\25",
+            "\150\15\1\16\1\17\15\15",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -19951,6 +19027,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
             "\1\uffff"
     };
 
@@ -19984,69 +19061,69 @@
             this.transition = DFA74_transition;
         }
         public String getDescription() {
-            return "()* loopback of 673:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*";
+            return "()* loopback of 674:25: ( options {backtrack=true; } : DOUBLE_PIPE and_restr_connective )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA74_6 = input.LA(1);
+                        int LA74_11 = input.LA(1);
 
                          
-                        int index74_6 = input.index();
+                        int index74_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 5;}
+                        if ( (synpred11()) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index74_6);
+                        input.seek(index74_11);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA74_4 = input.LA(1);
+                        int LA74_7 = input.LA(1);
 
                          
-                        int index74_4 = input.index();
+                        int index74_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 5;}
+                        if ( (synpred11()) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index74_4);
+                        input.seek(index74_7);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA74_10 = input.LA(1);
+                        int LA74_9 = input.LA(1);
 
                          
-                        int index74_10 = input.index();
+                        int index74_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 5;}
+                        if ( (synpred11()) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index74_10);
+                        input.seek(index74_9);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA74_11 = input.LA(1);
+                        int LA74_5 = input.LA(1);
 
                          
-                        int index74_11 = input.index();
+                        int index74_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 5;}
+                        if ( (synpred11()) ) {s = 4;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index74_11);
+                        input.seek(index74_5);
                         if ( s>=0 ) return s;
                         break;
             }
@@ -20058,19 +19135,18 @@
         }
     }
     static final String DFA75_eotS =
-        "\62\uffff";
+        "\61\uffff";
     static final String DFA75_eofS =
-        "\1\1\5\uffff\1\4\53\uffff";
+        "\1\1\5\uffff\1\4\52\uffff";
     static final String DFA75_minS =
-        "\1\133\1\uffff\2\125\1\uffff\2\125\2\4\1\125\3\0\3\4\2\0\3\4\35"+
-        "\0";
+        "\1\134\1\uffff\2\126\1\uffff\2\126\2\4\1\126\3\0\5\4\37\0";
     static final String DFA75_maxS =
-        "\1\141\1\uffff\1\150\1\153\1\uffff\1\150\1\153\2\171\1\153\3\0\3"+
-        "\171\2\0\3\171\35\0";
+        "\1\142\1\uffff\1\151\1\154\1\uffff\1\151\1\154\2\172\1\154\3\0\5"+
+        "\172\37\0";
     static final String DFA75_acceptS =
-        "\1\uffff\1\2\2\uffff\1\1\55\uffff";
+        "\1\uffff\1\2\2\uffff\1\1\54\uffff";
     static final String DFA75_specialS =
-        "\12\uffff\1\3\1\4\1\1\3\uffff\1\2\1\0\40\uffff}>";
+        "\12\uffff\1\0\1\1\1\2\44\uffff}>";
     static final String[] DFA75_transitionS = {
             "\2\1\3\uffff\1\1\1\2",
             "",
@@ -20080,25 +19156,22 @@
             "\1\11\4\uffff\1\12\10\uffff\6\4",
             "\1\13\1\4\2\uffff\1\14\1\15\2\4\1\uffff\2\14\2\4\7\uffff\2\14"+
             "\1\16",
-            "\121\31\1\17\3\31\1\22\1\20\1\31\1\21\1\31\2\22\3\31\1\23\1"+
-            "\24\1\25\1\26\1\27\1\30\2\22\17\31",
-            "\147\32\1\33\1\34\15\32",
-            "\1\35\1\1\2\uffff\1\4\1\36\2\uffff\1\1\2\4\3\uffff\6\1\2\4\1"+
-            "\37",
+            "\122\31\1\17\3\31\1\27\1\26\1\31\1\30\1\31\2\27\3\31\1\20\1"+
+            "\21\1\22\1\23\1\24\1\25\2\27\17\31",
+            "\150\32\1\33\1\34\15\32",
+            "\1\37\1\1\2\uffff\1\4\1\35\2\uffff\1\1\2\4\3\uffff\6\1\2\4\1"+
+            "\36",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\121\43\1\40\3\43\1\41\1\42\1\43\1\44\1\43\2\41\11\43\2\41\17"+
-            "\43",
-            "\147\45\1\46\1\47\15\45",
-            "\121\31\1\51\1\55\2\31\1\53\1\52\1\56\1\50\1\31\2\53\11\31\2"+
-            "\53\1\54\16\31",
-            "\1\uffff",
-            "\1\uffff",
-            "\126\31\1\57\1\56\1\50\35\31",
-            "\121\31\1\60\3\31\1\53\1\61\1\31\1\21\1\31\2\53\11\31\2\53\17"+
+            "\122\44\1\40\3\44\1\43\1\41\1\44\1\42\1\44\2\43\11\44\2\43\17"+
+            "\44",
+            "\150\45\1\46\1\47\15\45",
+            "\122\31\1\54\1\51\2\31\1\55\1\56\1\52\1\53\1\31\2\55\11\31\2"+
+            "\55\1\50\16\31",
+            "\122\31\1\57\3\31\1\55\1\60\1\31\1\30\1\31\2\55\11\31\2\55\17"+
             "\31",
-            "\121\31\1\60\3\31\1\53\1\61\1\31\1\21\1\31\2\53\11\31\2\53\17"+
+            "\122\31\1\57\3\31\1\55\1\60\1\31\1\30\1\31\2\55\11\31\2\55\17"+
             "\31",
             "\1\uffff",
             "\1\uffff",
@@ -20128,6 +19201,8 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             "\1\uffff"
     };
 
@@ -20161,16 +19236,16 @@
             this.transition = DFA75_transition;
         }
         public String getDescription() {
-            return "()* loopback of 677:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*";
+            return "()* loopback of 678:26: ( options {backtrack=true; } : DOUBLE_AMPER constraint_expression )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA75_17 = input.LA(1);
+                        int LA75_10 = input.LA(1);
 
                          
-                        int index75_17 = input.index();
+                        int index75_10 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred12()) ) {s = 4;}
@@ -20178,14 +19253,14 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index75_17);
+                        input.seek(index75_10);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA75_12 = input.LA(1);
+                        int LA75_11 = input.LA(1);
 
                          
-                        int index75_12 = input.index();
+                        int index75_11 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred12()) ) {s = 4;}
@@ -20193,14 +19268,14 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index75_12);
+                        input.seek(index75_11);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA75_16 = input.LA(1);
+                        int LA75_12 = input.LA(1);
 
                          
-                        int index75_16 = input.index();
+                        int index75_12 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred12()) ) {s = 4;}
@@ -20208,39 +19283,9 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index75_16);
+                        input.seek(index75_12);
                         if ( s>=0 ) return s;
                         break;
-                    case 3 : 
-                        int LA75_10 = input.LA(1);
-
-                         
-                        int index75_10 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred12()) ) {s = 4;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index75_10);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA75_11 = input.LA(1);
-
-                         
-                        int index75_11 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred12()) ) {s = 4;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index75_11);
-                        if ( s>=0 ) return s;
-                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
@@ -20251,411 +19296,415 @@
     }
  
 
-    public static final BitSet FOLLOW_package_statement_in_compilation_unit396 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_statement_in_compilation_unit401 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_EOF_in_compilation_unit406 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_package_key_in_package_statement446 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_package_id_in_package_statement448 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_package_statement450 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_package_id472 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
-    public static final BitSet FOLLOW_DOT_in_package_id476 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_package_id478 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
-    public static final BitSet FOLLOW_rule_attribute_in_statement503 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_import_statement_in_statement510 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_statement_in_statement516 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_in_statement522 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_in_statement528 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_template_in_statement533 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_in_statement538 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_query_in_statement543 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_key_in_import_statement554 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_import_name_in_import_statement556 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_import_statement558 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_key_in_function_import_statement582 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_function_key_in_function_import_statement584 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_import_name_in_function_import_statement586 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_function_import_statement588 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_name613 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
-    public static final BitSet FOLLOW_DOT_in_import_name617 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_import_name619 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
-    public static final BitSet FOLLOW_DOT_STAR_in_import_name624 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_key_in_global650 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_data_type_in_global652 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_global_id_in_global654 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_global656 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_global_id682 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_key_in_function700 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_data_type_in_function702 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_function_id_in_function705 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_parameters_in_function707 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
-    public static final BitSet FOLLOW_curly_chunk_in_function709 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_function_id739 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_query_key_in_query757 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
-    public static final BitSet FOLLOW_query_id_in_query759 = new BitSet(new long[]{0x0000000000000000L,0x0000000005200000L});
-    public static final BitSet FOLLOW_parameters_in_query761 = new BitSet(new long[]{0x0000000000000000L,0x0000000005200000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_query764 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
-    public static final BitSet FOLLOW_END_in_query766 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_query768 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_query_id800 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_query_id813 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_parameters829 = new BitSet(new long[]{0x0000000000000000L,0x0000000010200000L});
-    public static final BitSet FOLLOW_param_definition_in_parameters836 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
-    public static final BitSet FOLLOW_COMMA_in_parameters839 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_param_definition_in_parameters841 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_parameters850 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_data_type_in_param_definition874 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_argument_in_param_definition877 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_argument888 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
-    public static final BitSet FOLLOW_dimension_definition_in_argument890 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
-    public static final BitSet FOLLOW_template_key_in_template903 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
-    public static final BitSet FOLLOW_template_id_in_template905 = new BitSet(new long[]{0x0000000000000000L,0x0000000000300000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template907 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_template_slot_in_template912 = new BitSet(new long[]{0x0000000000000000L,0x0000000001200000L});
-    public static final BitSet FOLLOW_END_in_template917 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template919 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_template_id949 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_template_id962 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_data_type_in_template_slot979 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_slot_id_in_template_slot981 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template_slot983 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_slot_id1008 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_key_in_rule1026 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
-    public static final BitSet FOLLOW_rule_id_in_rule1028 = new BitSet(new long[]{0x0000000000000000L,0x0000200000200000L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule1030 = new BitSet(new long[]{0x0000000000000000L,0x0000200000200000L});
-    public static final BitSet FOLLOW_when_part_in_rule1033 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_in_rule1036 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_when_key_in_when_part1065 = new BitSet(new long[]{0x0000000000000002L,0x0000000024200000L});
-    public static final BitSet FOLLOW_COLON_in_when_part1067 = new BitSet(new long[]{0x0000000000000002L,0x0000000004200000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1070 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_id1091 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_rule_id1104 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1122 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_COLON_in_rule_attributes1124 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1129 = new BitSet(new long[]{0x0000000000000002L,0x0000000008200000L});
-    public static final BitSet FOLLOW_COMMA_in_rule_attributes1133 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1138 = new BitSet(new long[]{0x0000000000000002L,0x0000000008200000L});
-    public static final BitSet FOLLOW_salience_in_rule_attribute1166 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_in_rule_attribute1172 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1179 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_in_rule_attribute1186 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_in_rule_attribute1193 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1199 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_in_rule_attribute1205 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_in_rule_attribute1211 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_in_rule_attribute1217 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1223 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1229 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_in_rule_attribute1234 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_key_in_date_effective1246 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_STRING_in_date_effective1249 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_key_in_date_expires1260 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_STRING_in_date_expires1263 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_key_in_enabled1277 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
-    public static final BitSet FOLLOW_BOOL_in_enabled1280 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_salience_key_in_salience1292 = new BitSet(new long[]{0x0000000000000000L,0x0000000084000000L});
-    public static final BitSet FOLLOW_INT_in_salience1299 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_salience1308 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_key_in_no_loop1324 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
-    public static final BitSet FOLLOW_BOOL_in_no_loop1327 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1339 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
-    public static final BitSet FOLLOW_BOOL_in_auto_focus1342 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_key_in_activation_group1356 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_STRING_in_activation_group1359 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1370 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_STRING_in_ruleflow_group1373 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1384 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_STRING_in_agenda_group1387 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_key_in_duration1398 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_INT_in_duration1401 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_key_in_dialect1415 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_STRING_in_dialect1418 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active1436 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
-    public static final BitSet FOLLOW_BOOL_in_lock_on_active1439 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1451 = new BitSet(new long[]{0x0000000000000002L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs1472 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or1493 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or1497 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1499 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or1502 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1523 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or1545 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or1552 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1557 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and1595 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and1599 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1601 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and1604 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1625 = new BitSet(new long[]{0x0000000000000002L,0x0000000200200000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and1647 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and1654 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1659 = new BitSet(new long[]{0x0000000000000002L,0x0000000200200000L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary1697 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary1703 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary1709 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary1715 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary1721 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary1724 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary1726 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_pattern_source_in_lhs_unary1732 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary1746 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_exists_key_in_lhs_exist1760 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1784 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist1791 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1793 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist1795 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist1808 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_not_key_in_lhs_not1854 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not1871 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not1878 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not1880 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not1882 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not1890 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_eval_key_in_lhs_eval1929 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval1933 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forall_key_in_lhs_forall1957 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall1959 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall1961 = new BitSet(new long[]{0x0000000000000000L,0x0000000010200000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall1964 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source1996 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_from_key_in_pattern_source2005 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2021 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_statement_in_pattern_source2037 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2054 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_from_source_in_pattern_source2070 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement2098 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2102 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2104 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2106 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2114 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2120 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2128 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause2157 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2162 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2164 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause2168 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2172 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2174 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause2180 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2184 = new BitSet(new long[]{0x0000000000000000L,0x0000000008200000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2186 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause2192 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2196 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_id_clause2245 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause2249 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_key_in_collect_statement2271 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2275 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_pattern_source_in_collect_statement2277 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2279 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement2301 = new BitSet(new long[]{0x0000000000000000L,0x0000000002200000L});
-    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement2303 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entrypoint_id2326 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_entrypoint_id2339 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_source2355 = new BitSet(new long[]{0x0000000000000002L,0x0000000004400000L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source2368 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
-    public static final BitSet FOLLOW_expression_chain_in_from_source2375 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOT_in_expression_chain2407 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_expression_chain2409 = new BitSet(new long[]{0x0000000000000002L,0x0000080004400000L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain2429 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2451 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain2462 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2495 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_pattern2508 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_fact_binding2528 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding2534 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding2541 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding2543 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding2545 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression2584 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
-    public static final BitSet FOLLOW_or_key_in_fact_binding_expression2596 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2602 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression2607 = new BitSet(new long[]{0x0000000000000002L,0x0000000100200000L});
-    public static final BitSet FOLLOW_data_type_in_fact2636 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2638 = new BitSet(new long[]{0x0000000000000000L,0x0000000014200000L});
-    public static final BitSet FOLLOW_constraints_in_fact2640 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact2643 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints2668 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
-    public static final BitSet FOLLOW_COMMA_in_constraints2672 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_constraint_in_constraints2675 = new BitSet(new long[]{0x0000000000000002L,0x0000000008000000L});
-    public static final BitSet FOLLOW_or_constr_in_constraint2689 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr2700 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr2704 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr2707 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr2722 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr2726 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr2729 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_eval_key_in_unary_constr2750 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_unary_constr2752 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_field_constraint_in_unary_constr2765 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr2770 = new BitSet(new long[]{0x0000000000000000L,0x0000000004200000L});
-    public static final BitSet FOLLOW_or_constr_in_unary_constr2772 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr2774 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_field_constraint2794 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint2796 = new BitSet(new long[]{0x0000000000000002L,0x000001FC04200000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2800 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ARROW_in_field_constraint2806 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_field_constraint2808 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint2862 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2864 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_label2888 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_COLON_in_label2890 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2906 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective2918 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2921 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2936 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective2948 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2951 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression2973 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression2978 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression2983 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression2985 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression2987 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EQUAL_in_simple_operator3005 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_GREATER_in_simple_operator3011 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator3017 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_LESS_in_simple_operator3023 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator3029 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator3035 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_not_key_in_simple_operator3041 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator3044 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3047 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator3050 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator3053 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3056 = new BitSet(new long[]{0x0000000000000000L,0x00000E00C6200000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator3059 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator3066 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_excludes_key_in_simple_operator3072 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator3078 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3084 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator3090 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3096 = new BitSet(new long[]{0x0000000000000000L,0x00000E00C6200000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator3099 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_expression_value_in_simple_operator3104 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator3119 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_not_key_in_compound_operator3124 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator3126 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3131 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3134 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator3138 = new BitSet(new long[]{0x0000000000000000L,0x00000600C6200000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3141 = new BitSet(new long[]{0x0000000000000000L,0x0000000018000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3146 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_expression_value3157 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value3162 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_value3168 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit400 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit405 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_EOF_in_compilation_unit410 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_package_key_in_package_statement450 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_package_id_in_package_statement452 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_package_statement454 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_id476 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_DOT_in_package_id480 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_package_id482 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_rule_attribute_in_statement507 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_import_statement_in_statement514 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_statement520 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_statement526 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_statement532 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_in_statement537 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_in_statement542 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_in_statement547 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_import_statement558 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_import_name_in_import_statement560 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_import_statement562 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_function_import_statement586 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_function_key_in_function_import_statement588 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement590 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_function_import_statement592 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_name617 = new BitSet(new long[]{0x0000000000000002L,0x0000000001800000L});
+    public static final BitSet FOLLOW_DOT_in_import_name621 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_import_name623 = new BitSet(new long[]{0x0000000000000002L,0x0000000001800000L});
+    public static final BitSet FOLLOW_DOT_STAR_in_import_name628 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_key_in_global654 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_data_type_in_global656 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_global_id_in_global658 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_global660 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_id686 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_key_in_function704 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_data_type_in_function706 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_function_id_in_function709 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_parameters_in_function711 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
+    public static final BitSet FOLLOW_curly_chunk_in_function713 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_id743 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_key_in_query761 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
+    public static final BitSet FOLLOW_query_id_in_query763 = new BitSet(new long[]{0x0000000000000000L,0x000000000A400000L});
+    public static final BitSet FOLLOW_parameters_in_query765 = new BitSet(new long[]{0x0000000000000000L,0x000000000A400000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_query768 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
+    public static final BitSet FOLLOW_END_in_query770 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_query772 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_id804 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_query_id817 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_parameters833 = new BitSet(new long[]{0x0000000000000000L,0x0000000020400000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters840 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
+    public static final BitSet FOLLOW_COMMA_in_parameters843 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters845 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_parameters854 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_param_definition878 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_argument_in_param_definition881 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument892 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_argument894 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
+    public static final BitSet FOLLOW_template_key_in_template907 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
+    public static final BitSet FOLLOW_template_id_in_template909 = new BitSet(new long[]{0x0000000000000000L,0x0000000000600000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template911 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_template_slot_in_template916 = new BitSet(new long[]{0x0000000000000000L,0x0000000002400000L});
+    public static final BitSet FOLLOW_END_in_template921 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template923 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_id953 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_template_id966 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_template_slot983 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_slot_id_in_template_slot985 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template_slot987 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_slot_id1012 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_key_in_rule1030 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
+    public static final BitSet FOLLOW_rule_id_in_rule1032 = new BitSet(new long[]{0x0000000000000000L,0x0000400000400000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule1034 = new BitSet(new long[]{0x0000000000000000L,0x0000400000400000L});
+    public static final BitSet FOLLOW_when_part_in_rule1037 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_in_rule1040 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_when_key_in_when_part1069 = new BitSet(new long[]{0x0000000000000002L,0x0000000048400000L});
+    public static final BitSet FOLLOW_COLON_in_when_part1071 = new BitSet(new long[]{0x0000000000000002L,0x0000000008400000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1074 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_id1095 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_rule_id1108 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1126 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COLON_in_rule_attributes1128 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1133 = new BitSet(new long[]{0x0000000000000002L,0x0000000010400000L});
+    public static final BitSet FOLLOW_COMMA_in_rule_attributes1137 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1142 = new BitSet(new long[]{0x0000000000000002L,0x0000000010400000L});
+    public static final BitSet FOLLOW_salience_in_rule_attribute1170 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_in_rule_attribute1176 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1183 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_in_rule_attribute1190 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_in_rule_attribute1197 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1203 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_in_rule_attribute1209 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_in_rule_attribute1215 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_in_rule_attribute1221 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1227 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1233 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_in_rule_attribute1238 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_key_in_date_effective1250 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_date_effective1253 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_key_in_date_expires1264 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_date_expires1267 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_key_in_enabled1281 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_BOOL_in_enabled1284 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_salience_key_in_salience1296 = new BitSet(new long[]{0x0000000000000000L,0x0000000108000000L});
+    public static final BitSet FOLLOW_INT_in_salience1303 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_salience1312 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_key_in_no_loop1328 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
+    public static final BitSet FOLLOW_BOOL_in_no_loop1331 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1343 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
+    public static final BitSet FOLLOW_BOOL_in_auto_focus1346 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_key_in_activation_group1360 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_activation_group1363 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1374 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_ruleflow_group1377 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1388 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_agenda_group1391 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_key_in_duration1402 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
+    public static final BitSet FOLLOW_INT_in_duration1405 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_key_in_dialect1419 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
+    public static final BitSet FOLLOW_STRING_in_dialect1422 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active1440 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
+    public static final BitSet FOLLOW_BOOL_in_lock_on_active1443 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1455 = new BitSet(new long[]{0x0000000000000002L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs1476 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or1497 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1501 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1503 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or1506 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1527 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1549 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or1556 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1561 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and1599 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1603 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1605 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and1608 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1629 = new BitSet(new long[]{0x0000000000000002L,0x0000000400400000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1651 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and1658 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1663 = new BitSet(new long[]{0x0000000000000002L,0x0000000400400000L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary1701 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary1707 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary1713 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary1719 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary1725 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary1728 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary1730 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_pattern_source_in_lhs_unary1736 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary1750 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_exists_key_in_lhs_exist1764 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1788 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist1795 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1797 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist1799 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist1812 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_key_in_lhs_not1858 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not1875 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not1882 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not1884 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not1886 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not1894 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_eval_key_in_lhs_eval1933 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval1937 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forall_key_in_lhs_forall1961 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall1963 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall1965 = new BitSet(new long[]{0x0000000000000000L,0x0000000020400000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall1968 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2000 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
+    public static final BitSet FOLLOW_from_key_in_pattern_source2009 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2025 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_statement_in_pattern_source2041 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2058 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_source_in_pattern_source2074 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement2102 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2106 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2108 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2110 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2118 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2124 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2132 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause2161 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2166 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2168 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause2172 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2176 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2178 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause2184 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2188 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2190 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause2196 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2200 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause2249 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause2253 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_key_in_collect_statement2275 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2279 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_pattern_source_in_collect_statement2281 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2283 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement2305 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
+    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement2307 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entrypoint_id2330 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_entrypoint_id2343 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source2359 = new BitSet(new long[]{0x0000000000000002L,0x0000000008800000L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source2372 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source2379 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOT_in_expression_chain2411 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_expression_chain2413 = new BitSet(new long[]{0x0000000000000002L,0x0000100008800000L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain2433 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2455 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain2466 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2499 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_pattern2512 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_fact_binding2532 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding2538 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding2545 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding2547 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding2549 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression2588 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
+    public static final BitSet FOLLOW_or_key_in_fact_binding_expression2600 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2606 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression2611 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
+    public static final BitSet FOLLOW_pattern_type_in_fact2640 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2642 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
+    public static final BitSet FOLLOW_constraints_in_fact2644 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact2647 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints2672 = new BitSet(new long[]{0x0000000000000002L,0x0000000010000000L});
+    public static final BitSet FOLLOW_COMMA_in_constraints2676 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_constraint_in_constraints2679 = new BitSet(new long[]{0x0000000000000002L,0x0000000010000000L});
+    public static final BitSet FOLLOW_or_constr_in_constraint2693 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2704 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr2708 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr2711 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2726 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr2730 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr2733 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
+    public static final BitSet FOLLOW_eval_key_in_unary_constr2754 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_unary_constr2756 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr2769 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr2774 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr2776 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr2778 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_field_constraint2798 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint2800 = new BitSet(new long[]{0x0000000000000002L,0x000003F808400000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2804 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ARROW_in_field_constraint2810 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_field_constraint2812 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint2866 = new BitSet(new long[]{0x0000000000000000L,0x000003F008400000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2868 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_label2892 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COLON_in_label2894 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2910 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective2922 = new BitSet(new long[]{0x0000000000000000L,0x000003F008400000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective2925 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2940 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective2952 = new BitSet(new long[]{0x0000000000000000L,0x000003F008400000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective2955 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression2977 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression2982 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression2987 = new BitSet(new long[]{0x0000000000000000L,0x000003F008400000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression2989 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression2991 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EQUAL_in_simple_operator3009 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_GREATER_in_simple_operator3015 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator3021 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_LESS_in_simple_operator3027 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator3033 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator3039 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_not_key_in_simple_operator3045 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator3048 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3051 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator3054 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3057 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3060 = new BitSet(new long[]{0x0000000000000000L,0x00001C018C400000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3063 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator3070 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_excludes_key_in_simple_operator3076 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator3082 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3088 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3094 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3100 = new BitSet(new long[]{0x0000000000000000L,0x00001C018C400000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3103 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator3108 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3123 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_not_key_in_compound_operator3128 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3130 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3135 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3138 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator3142 = new BitSet(new long[]{0x0000000000000000L,0x00000C018C400000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3145 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3150 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_expression_value3161 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value3166 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_value3172 = 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_data_type3210 = new BitSet(new long[]{0x0000000000000002L,0x0000080000400000L});
-    public static final BitSet FOLLOW_DOT_in_data_type3214 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_data_type3216 = new BitSet(new long[]{0x0000000000000002L,0x0000080000400000L});
-    public static final BitSet FOLLOW_dimension_definition_in_data_type3221 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3247 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3249 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path3260 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
-    public static final BitSet FOLLOW_DOT_in_accessor_path3264 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path3266 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_accessor_element3290 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_accessor_element3292 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3321 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3340 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_rhs_chunk_data3344 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_END_in_rhs_chunk_data3350 = new BitSet(new long[]{0x0000000000000002L,0x0000000000100000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3352 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3369 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3388 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_curly_chunk_data3391 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3405 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3410 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3426 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3446 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_paren_chunk_data3449 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3463 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3468 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3485 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data3504 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_square_chunk_data3507 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data3521 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x03FFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data3526 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key3545 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_effective_key3547 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key3549 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key3575 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_expires_key3577 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key3579 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key3605 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3607 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key3609 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3611 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key3613 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key3639 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_MISC_in_no_loop_key3641 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key3643 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key3669 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_MISC_in_auto_focus_key3671 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key3673 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key3699 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_MISC_in_activation_group_key3701 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key3703 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key3729 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_MISC_in_agenda_group_key3731 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key3733 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3759 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key3761 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3763 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_duration_key3788 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_package_key3810 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_key3832 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dialect_key3854 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_salience_key3876 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enabled_key3898 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_attributes_key3920 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_when_key3942 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_key3964 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_template_key3986 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_query_key4008 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_declare_key4030 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_function_key4052 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_global_key4074 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_eval_key4096 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_contains_key4118 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_matches_key4140 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_excludes_key4162 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_soundslike_key4184 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_memberof_key4206 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_not_key4228 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_in_key4250 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_or_key4272 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_and_key4294 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_exists_key4316 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_forall_key4338 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_key4360 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key4383 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_MISC_in_entry_point_key4385 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key4387 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_key4412 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_init_key4434 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_action_key4456 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_reverse_key4478 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_result_key4500 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_collect_key4522 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred11487 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_or_key_in_synpred11489 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_or_key_in_synpred21536 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred21538 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred31589 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_and_key_in_synpred31591 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred41638 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred41640 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SEMICOLON_in_synpred51742 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred61774 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_or_key_in_synpred61777 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred61779 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred71861 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
-    public static final BitSet FOLLOW_or_key_in_synpred71864 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred71866 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred82362 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred92423 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred102445 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred112918 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_synpred112921 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred122948 = new BitSet(new long[]{0x0000000000000000L,0x000001F804200000L});
-    public static final BitSet FOLLOW_constraint_expression_in_synpred122951 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_pattern_type3214 = new BitSet(new long[]{0x0000000000000002L,0x0000100000800000L});
+    public static final BitSet FOLLOW_DOT_in_pattern_type3218 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_pattern_type3220 = new BitSet(new long[]{0x0000000000000002L,0x0000100000800000L});
+    public static final BitSet FOLLOW_dimension_definition_in_pattern_type3225 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
+    public static final BitSet FOLLOW_ID_in_data_type3251 = new BitSet(new long[]{0x0000000000000002L,0x0000100000800000L});
+    public static final BitSet FOLLOW_DOT_in_data_type3255 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_data_type3257 = new BitSet(new long[]{0x0000000000000002L,0x0000100000800000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type3262 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3288 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3290 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3301 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_DOT_in_accessor_path3305 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3307 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_ID_in_accessor_element3331 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_accessor_element3333 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3362 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3381 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_rhs_chunk_data3385 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_END_in_rhs_chunk_data3391 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3393 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3410 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3429 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_curly_chunk_data3432 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3446 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3451 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3467 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3487 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_paren_chunk_data3490 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3504 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3509 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3526 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data3545 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_set_in_square_chunk_data3548 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data3562 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x07FFFFFFFFFFFFFFL});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data3567 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key3586 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_effective_key3588 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key3590 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key3616 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_expires_key3618 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key3620 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3646 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3648 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3650 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3652 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key3654 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key3680 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
+    public static final BitSet FOLLOW_MISC_in_no_loop_key3682 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key3684 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key3710 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
+    public static final BitSet FOLLOW_MISC_in_auto_focus_key3712 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key3714 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key3740 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
+    public static final BitSet FOLLOW_MISC_in_activation_group_key3742 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key3744 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key3770 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
+    public static final BitSet FOLLOW_MISC_in_agenda_group_key3772 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key3774 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3800 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
+    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key3802 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3804 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_duration_key3829 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_key3851 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_key3873 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dialect_key3895 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_salience_key3917 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enabled_key3939 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_attributes_key3961 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_when_key3983 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_key4005 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_key4027 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_key4049 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_declare_key4071 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_key4093 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_key4115 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_eval_key4137 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_contains_key4159 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_matches_key4181 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_excludes_key4203 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_soundslike_key4225 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_memberof_key4247 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_not_key4269 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_in_key4291 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_or_key4313 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_and_key4335 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_exists_key4357 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_forall_key4379 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_key4401 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4424 = new BitSet(new long[]{0x0000000000000000L,0x0002000000000000L});
+    public static final BitSet FOLLOW_MISC_in_entry_point_key4426 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4428 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_key4453 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_init_key4475 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_action_key4497 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_reverse_key4519 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_result_key4541 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_collect_key4563 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred11491 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_or_key_in_synpred11493 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_or_key_in_synpred21540 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred21542 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred31593 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_and_key_in_synpred31595 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred41642 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred41644 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMICOLON_in_synpred51746 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred61778 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_or_key_in_synpred61781 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred61783 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred71865 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
+    public static final BitSet FOLLOW_or_key_in_synpred71868 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred71870 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred82366 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred92427 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred102449 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred112922 = new BitSet(new long[]{0x0000000000000000L,0x000003F008400000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_synpred112925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred122952 = new BitSet(new long[]{0x0000000000000000L,0x000003F008400000L});
+    public static final BitSet FOLLOW_constraint_expression_in_synpred122955 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java	2008-05-20 12:50:33 UTC (rev 20081)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java	2008-05-20 13:44:37 UTC (rev 20082)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g 2008-05-19 14:24:38
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g 2008-05-19 18:05:21
 
 	package org.drools.lang;
 
@@ -33,127 +33,128 @@
 
 public class DescrBuilderTree extends TreeParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_COMPILATION_UNIT", "VT_FUNCTION_IMPORT", "VT_FACT", "VT_CONSTRAINTS", "VT_LABEL", "VT_QUERY_ID", "VT_TEMPLATE_ID", "VT_RULE_ID", "VT_ENTRYPOINT_ID", "VT_SLOT_ID", "VT_SLOT", "VT_RULE_ATTRIBUTES", "VT_RHS_CHUNK", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VT_DATA_TYPE", "VT_PACKAGE_ID", "VT_IMPORT_ID", "VT_GLOBAL_ID", "VT_FUNCTION_ID", "VT_PARAM_LIST", "VK_DATE_EFFECTIVE", "VK_DATE_EXPIRES", "VK_LOCK_ON_ACTIVE", "VK_NO_LOOP", "VK_AUTO_FOCUS", "VK_ACTIVATION_GROUP", "VK_AGENDA_GROUP", "VK_RULEFLOW_GROUP", "VK_DURATION", "VK_DIALECT", "VK_SALIENCE", "VK_ENABLED", "VK_ATTRIBUTES", "VK_WHEN", "VK_RULE", "VK_IMPORT", "VK_P!
 ACKAGE", "VK_TEMPLATE", "VK_QUERY", "VK_DECLARE", "VK_FUNCTION", "VK_GLOBAL", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "COLON", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_COMPILATION_UNIT", "VT_FUNCTION_IMPORT", "VT_FACT", "VT_CONSTRAINTS", "VT_LABEL", "VT_QUERY_ID", "VT_TEMPLATE_ID", "VT_RULE_ID", "VT_ENTRYPOINT_ID", "VT_SLOT_ID", "VT_SLOT", "VT_RULE_ATTRIBUTES", "VT_RHS_CHUNK", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VT_DATA_TYPE", "VT_PATTERN_TYPE", "VT_PACKAGE_ID", "VT_IMPORT_ID", "VT_GLOBAL_ID", "VT_FUNCTION_ID", "VT_PARAM_LIST", "VK_DATE_EFFECTIVE", "VK_DATE_EXPIRES", "VK_LOCK_ON_ACTIVE", "VK_NO_LOOP", "VK_AUTO_FOCUS", "VK_ACTIVATION_GROUP", "VK_AGENDA_GROUP", "VK_RULEFLOW_GROUP", "VK_DURATION", "VK_DIALECT", "VK_SALIENCE", "VK_ENABLED", "VK_ATTRIBUTES", "VK_WHEN", "VK_RULE",!
  "VK_IMPORT", "VK_PACKAGE", "VK_TEMPLATE", "VK_QUERY", "VK_DECLARE", "VK_FUNCTION", "VK_GLOBAL", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "COLON", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
     };
-    public static final int COMMA=91;
+    public static final int COMMA=92;
+    public static final int VT_PATTERN_TYPE=37;
     public static final int VT_ACCUMULATE_ID_CLAUSE=26;
-    public static final int VK_FUNCTION=62;
-    public static final int VK_DIALECT=51;
-    public static final int END=88;
-    public static final int HexDigit=116;
-    public static final int VK_ATTRIBUTES=54;
+    public static final int VK_DIALECT=52;
+    public static final int VK_FUNCTION=63;
+    public static final int END=89;
+    public static final int HexDigit=117;
+    public static final int VK_ATTRIBUTES=55;
     public static final int VT_EXPRESSION_CHAIN=28;
-    public static final int VK_ACCUMULATE=78;
-    public static final int MISC=112;
+    public static final int VK_ACCUMULATE=79;
+    public static final int MISC=113;
     public static final int VT_AND_PREFIX=21;
-    public static final int VK_QUERY=60;
-    public static final int THEN=109;
-    public static final int VK_AUTO_FOCUS=46;
-    public static final int DOT=86;
-    public static final int VK_IMPORT=57;
+    public static final int VK_QUERY=61;
+    public static final int THEN=110;
+    public static final int VK_AUTO_FOCUS=47;
+    public static final int DOT=87;
+    public static final int VK_IMPORT=58;
     public static final int VT_SLOT=14;
-    public static final int VT_PACKAGE_ID=37;
-    public static final int LEFT_SQUARE=107;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=119;
+    public static final int VT_PACKAGE_ID=38;
+    public static final int LEFT_SQUARE=108;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=120;
     public static final int VT_DATA_TYPE=36;
-    public static final int VK_MATCHES=66;
+    public static final int VK_MATCHES=67;
     public static final int VT_FACT=6;
-    public static final int LEFT_CURLY=110;
-    public static final int LEFT_PAREN=90;
-    public static final int DOUBLE_AMPER=97;
+    public static final int LEFT_CURLY=111;
+    public static final int LEFT_PAREN=91;
+    public static final int DOUBLE_AMPER=98;
     public static final int VT_QUERY_ID=9;
     public static final int VT_ACCESSOR_PATH=34;
     public static final int VT_LABEL=8;
     public static final int VT_ENTRYPOINT_ID=12;
-    public static final int VK_SOUNDSLIKE=68;
-    public static final int VK_SALIENCE=52;
+    public static final int VK_SOUNDSLIKE=69;
+    public static final int VK_SALIENCE=53;
     public static final int VT_FIELD=33;
-    public static final int WS=114;
-    public static final int STRING=89;
-    public static final int VK_AND=74;
+    public static final int WS=115;
+    public static final int STRING=90;
+    public static final int VK_AND=75;
     public static final int VT_ACCESSOR_ELEMENT=35;
-    public static final int VK_REVERSE=81;
-    public static final int VK_GLOBAL=63;
+    public static final int VK_GLOBAL=64;
     public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
-    public static final int VK_DURATION=50;
+    public static final int VK_REVERSE=82;
+    public static final int VK_DURATION=51;
     public static final int VT_SQUARE_CHUNK=18;
-    public static final int VK_FORALL=76;
+    public static final int VK_FORALL=77;
     public static final int VT_COMPILATION_UNIT=4;
     public static final int VT_PAREN_CHUNK=19;
-    public static final int VK_ENABLED=53;
-    public static final int VK_RESULT=82;
-    public static final int UnicodeEscape=117;
-    public static final int VK_PACKAGE=58;
+    public static final int VK_ENABLED=54;
+    public static final int VK_RESULT=83;
+    public static final int UnicodeEscape=118;
+    public static final int VK_PACKAGE=59;
     public static final int VT_RULE_ID=11;
-    public static final int EQUAL=99;
-    public static final int VK_NO_LOOP=45;
-    public static final int SEMICOLON=84;
-    public static final int VK_TEMPLATE=59;
+    public static final int EQUAL=100;
+    public static final int VK_NO_LOOP=46;
+    public static final int SEMICOLON=85;
+    public static final int VK_TEMPLATE=60;
     public static final int VT_AND_IMPLICIT=20;
-    public static final int NULL=106;
-    public static final int COLON=93;
-    public static final int MULTI_LINE_COMMENT=121;
+    public static final int NULL=107;
+    public static final int COLON=94;
+    public static final int MULTI_LINE_COMMENT=122;
     public static final int VT_RULE_ATTRIBUTES=15;
-    public static final int RIGHT_SQUARE=108;
-    public static final int VK_AGENDA_GROUP=48;
+    public static final int RIGHT_SQUARE=109;
+    public static final int VK_AGENDA_GROUP=49;
     public static final int VT_FACT_OR=31;
-    public static final int VK_NOT=71;
-    public static final int VK_DATE_EXPIRES=43;
-    public static final int ARROW=98;
-    public static final int FLOAT=105;
+    public static final int VK_NOT=72;
+    public static final int VK_DATE_EXPIRES=44;
+    public static final int ARROW=99;
+    public static final int FLOAT=106;
     public static final int VT_SLOT_ID=13;
     public static final int VT_CURLY_CHUNK=17;
     public static final int VT_OR_PREFIX=22;
-    public static final int DOUBLE_PIPE=96;
-    public static final int LESS=102;
+    public static final int DOUBLE_PIPE=97;
+    public static final int LESS=103;
     public static final int VT_PATTERN=29;
-    public static final int VK_DATE_EFFECTIVE=42;
-    public static final int EscapeSequence=115;
-    public static final int VK_EXISTS=75;
-    public static final int INT=95;
+    public static final int VK_DATE_EFFECTIVE=43;
+    public static final int EscapeSequence=116;
+    public static final int VK_EXISTS=76;
+    public static final int INT=96;
     public static final int VT_BIND_FIELD=32;
-    public static final int VK_RULE=56;
-    public static final int VK_EVAL=64;
-    public static final int VK_COLLECT=83;
-    public static final int GREATER=100;
+    public static final int VK_RULE=57;
+    public static final int VK_EVAL=65;
+    public static final int VK_COLLECT=84;
+    public static final int GREATER=101;
     public static final int VT_FACT_BINDING=30;
-    public static final int ID=85;
-    public static final int NOT_EQUAL=104;
-    public static final int RIGHT_CURLY=111;
-    public static final int VK_ENTRY_POINT=70;
-    public static final int BOOL=94;
-    public static final int VT_PARAM_LIST=41;
+    public static final int ID=86;
+    public static final int NOT_EQUAL=105;
+    public static final int RIGHT_CURLY=112;
+    public static final int VK_ENTRY_POINT=71;
     public static final int VT_AND_INFIX=23;
+    public static final int BOOL=95;
+    public static final int VT_PARAM_LIST=42;
     public static final int VT_FROM_SOURCE=27;
-    public static final int VK_CONTAINS=65;
-    public static final int VK_LOCK_ON_ACTIVE=44;
+    public static final int VK_CONTAINS=66;
+    public static final int VK_LOCK_ON_ACTIVE=45;
     public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VK_IN=72;
+    public static final int VK_IN=73;
     public static final int VT_RHS_CHUNK=16;
-    public static final int VK_MEMBEROF=69;
-    public static final int GREATER_EQUAL=101;
+    public static final int VK_MEMBEROF=70;
+    public static final int GREATER_EQUAL=102;
     public static final int VT_OR_INFIX=24;
-    public static final int DOT_STAR=87;
-    public static final int VK_OR=73;
-    public static final int VT_GLOBAL_ID=39;
-    public static final int LESS_EQUAL=103;
-    public static final int VK_WHEN=55;
-    public static final int VK_RULEFLOW_GROUP=49;
-    public static final int VT_FUNCTION_ID=40;
+    public static final int DOT_STAR=88;
+    public static final int VK_OR=74;
+    public static final int VT_GLOBAL_ID=40;
+    public static final int LESS_EQUAL=104;
+    public static final int VK_WHEN=56;
+    public static final int VK_RULEFLOW_GROUP=50;
+    public static final int VT_FUNCTION_ID=41;
     public static final int EOF=-1;
     public static final int VT_CONSTRAINTS=7;
-    public static final int VT_IMPORT_ID=38;
-    public static final int EOL=113;
-    public static final int VK_INIT=79;
-    public static final int VK_ACTIVATION_GROUP=47;
-    public static final int OctalEscape=118;
-    public static final int VK_ACTION=80;
-    public static final int VK_FROM=77;
-    public static final int VK_EXCLUDES=67;
-    public static final int RIGHT_PAREN=92;
+    public static final int VT_IMPORT_ID=39;
+    public static final int EOL=114;
+    public static final int VK_INIT=80;
+    public static final int VK_ACTIVATION_GROUP=48;
+    public static final int OctalEscape=119;
+    public static final int VK_ACTION=81;
+    public static final int VK_FROM=78;
+    public static final int VK_EXCLUDES=68;
+    public static final int RIGHT_PAREN=93;
     public static final int VT_TEMPLATE_ID=10;
-    public static final int VK_DECLARE=61;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=120;
+    public static final int VK_DECLARE=62;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=121;
 
         public DescrBuilderTree(TreeNodeStream input) {
             super(input);
@@ -2807,7 +2808,7 @@
     };
 
     // $ANTLR start fact_expression
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:275:1: fact_expression returns [BaseDescr descr] : ( ^( VT_FACT dt= data_type (fe= fact_expression )* ) | ^( VT_FACT_BINDING label= VT_LABEL fact= fact_expression ) | ^(start= VT_FACT_OR left= fact_expression right= fact_expression ) | ^( VT_FIELD field= field_element (fe= fact_expression )? ) | ^( VT_BIND_FIELD label= VT_LABEL fe= fact_expression ) | ^( VK_EVAL pc= VT_PAREN_CHUNK ) | ^(op= EQUAL fe= fact_expression ) | ^(op= NOT_EQUAL fe= fact_expression ) | ^(op= GREATER fe= fact_expression ) | ^(op= GREATER_EQUAL fe= fact_expression ) | ^(op= LESS fe= fact_expression ) | ^(op= LESS_EQUAL fe= fact_expression ) | ^(op= VK_CONTAINS (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_EXCLUDES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MATCHES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_SOUNDSLIKE (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MEMBEROF (!
 not= VK_NOT )? fe= fact_expression ) | ^(op= ID (not= VK_NOT )? (param= VT_SQUARE_CHUNK )? fe= fact_expression ) | ^( VK_IN (not= VK_NOT )? (fe= fact_expression )+ ) | ^( DOUBLE_PIPE left= fact_expression right= fact_expression ) | ^( DOUBLE_AMPER left= fact_expression right= fact_expression ) | ^( VT_ACCESSOR_PATH (ae= accessor_element )+ ) | s= STRING | i= INT | f= FLOAT | b= BOOL | n= NULL | pc= VT_PAREN_CHUNK );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:275:1: fact_expression returns [BaseDescr descr] : ( ^( VT_FACT pt= pattern_type (fe= fact_expression )* ) | ^( VT_FACT_BINDING label= VT_LABEL fact= fact_expression ) | ^(start= VT_FACT_OR left= fact_expression right= fact_expression ) | ^( VT_FIELD field= field_element (fe= fact_expression )? ) | ^( VT_BIND_FIELD label= VT_LABEL fe= fact_expression ) | ^( VK_EVAL pc= VT_PAREN_CHUNK ) | ^(op= EQUAL fe= fact_expression ) | ^(op= NOT_EQUAL fe= fact_expression ) | ^(op= GREATER fe= fact_expression ) | ^(op= GREATER_EQUAL fe= fact_expression ) | ^(op= LESS fe= fact_expression ) | ^(op= LESS_EQUAL fe= fact_expression ) | ^(op= VK_CONTAINS (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_EXCLUDES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MATCHES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_SOUNDSLIKE (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MEMBERO!
 F (not= VK_NOT )? fe= fact_expression ) | ^(op= ID (not= VK_NOT )? (param= VT_SQUARE_CHUNK )? fe= fact_expression ) | ^( VK_IN (not= VK_NOT )? (fe= fact_expression )+ ) | ^( DOUBLE_PIPE left= fact_expression right= fact_expression ) | ^( DOUBLE_AMPER left= fact_expression right= fact_expression ) | ^( VT_ACCESSOR_PATH (ae= accessor_element )+ ) | s= STRING | i= INT | f= FLOAT | b= BOOL | n= NULL | pc= VT_PAREN_CHUNK );
     public final fact_expression_return fact_expression() throws RecognitionException {
         fact_expression_return retval = new fact_expression_return();
         retval.start = input.LT(1);
@@ -2823,7 +2824,7 @@
         DroolsTree f=null;
         DroolsTree b=null;
         DroolsTree n=null;
-        BaseDescr dt = null;
+        BaseDescr pt = null;
 
         fact_expression_return fe = null;
 
@@ -2842,7 +2843,7 @@
         	List<BaseDescr> exprList = new LinkedList<BaseDescr>();
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:278:3: ( ^( VT_FACT dt= data_type (fe= fact_expression )* ) | ^( VT_FACT_BINDING label= VT_LABEL fact= fact_expression ) | ^(start= VT_FACT_OR left= fact_expression right= fact_expression ) | ^( VT_FIELD field= field_element (fe= fact_expression )? ) | ^( VT_BIND_FIELD label= VT_LABEL fe= fact_expression ) | ^( VK_EVAL pc= VT_PAREN_CHUNK ) | ^(op= EQUAL fe= fact_expression ) | ^(op= NOT_EQUAL fe= fact_expression ) | ^(op= GREATER fe= fact_expression ) | ^(op= GREATER_EQUAL fe= fact_expression ) | ^(op= LESS fe= fact_expression ) | ^(op= LESS_EQUAL fe= fact_expression ) | ^(op= VK_CONTAINS (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_EXCLUDES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MATCHES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_SOUNDSLIKE (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MEMBEROF (not= VK_NOT )? fe= fact_expression )!
  | ^(op= ID (not= VK_NOT )? (param= VT_SQUARE_CHUNK )? fe= fact_expression ) | ^( VK_IN (not= VK_NOT )? (fe= fact_expression )+ ) | ^( DOUBLE_PIPE left= fact_expression right= fact_expression ) | ^( DOUBLE_AMPER left= fact_expression right= fact_expression ) | ^( VT_ACCESSOR_PATH (ae= accessor_element )+ ) | s= STRING | i= INT | f= FLOAT | b= BOOL | n= NULL | pc= VT_PAREN_CHUNK )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:278:3: ( ^( VT_FACT pt= pattern_type (fe= fact_expression )* ) | ^( VT_FACT_BINDING label= VT_LABEL fact= fact_expression ) | ^(start= VT_FACT_OR left= fact_expression right= fact_expression ) | ^( VT_FIELD field= field_element (fe= fact_expression )? ) | ^( VT_BIND_FIELD label= VT_LABEL fe= fact_expression ) | ^( VK_EVAL pc= VT_PAREN_CHUNK ) | ^(op= EQUAL fe= fact_expression ) | ^(op= NOT_EQUAL fe= fact_expression ) | ^(op= GREATER fe= fact_expression ) | ^(op= GREATER_EQUAL fe= fact_expression ) | ^(op= LESS fe= fact_expression ) | ^(op= LESS_EQUAL fe= fact_expression ) | ^(op= VK_CONTAINS (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_EXCLUDES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MATCHES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_SOUNDSLIKE (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MEMBEROF (not= VK_NOT )? fe= fact_expressio!
 n ) | ^(op= ID (not= VK_NOT )? (param= VT_SQUARE_CHUNK )? fe= fact_expression ) | ^( VK_IN (not= VK_NOT )? (fe= fact_expression )+ ) | ^( DOUBLE_PIPE left= fact_expression right= fact_expression ) | ^( DOUBLE_AMPER left= fact_expression right= fact_expression ) | ^( VT_ACCESSOR_PATH (ae= accessor_element )+ ) | s= STRING | i= INT | f= FLOAT | b= BOOL | n= NULL | pc= VT_PAREN_CHUNK )
             int alt47=28;
             switch ( input.LA(1) ) {
             case VT_FACT:
@@ -2987,23 +2988,23 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("275:1: fact_expression returns [BaseDescr descr] : ( ^( VT_FACT dt= data_type (fe= fact_expression )* ) | ^( VT_FACT_BINDING label= VT_LABEL fact= fact_expression ) | ^(start= VT_FACT_OR left= fact_expression right= fact_expression ) | ^( VT_FIELD field= field_element (fe= fact_expression )? ) | ^( VT_BIND_FIELD label= VT_LABEL fe= fact_expression ) | ^( VK_EVAL pc= VT_PAREN_CHUNK ) | ^(op= EQUAL fe= fact_expression ) | ^(op= NOT_EQUAL fe= fact_expression ) | ^(op= GREATER fe= fact_expression ) | ^(op= GREATER_EQUAL fe= fact_expression ) | ^(op= LESS fe= fact_expression ) | ^(op= LESS_EQUAL fe= fact_expression ) | ^(op= VK_CONTAINS (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_EXCLUDES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MATCHES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_SOUNDSLIKE (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MEMBEROF (not= VK_NOT )? fe= fact_expression ) | ^(op= ID (not= VK_NOT )? (par!
 am= VT_SQUARE_CHUNK )? fe= fact_expression ) | ^( VK_IN (not= VK_NOT )? (fe= fact_expression )+ ) | ^( DOUBLE_PIPE left= fact_expression right= fact_expression ) | ^( DOUBLE_AMPER left= fact_expression right= fact_expression ) | ^( VT_ACCESSOR_PATH (ae= accessor_element )+ ) | s= STRING | i= INT | f= FLOAT | b= BOOL | n= NULL | pc= VT_PAREN_CHUNK );", 47, 0, input);
+                    new NoViableAltException("275:1: fact_expression returns [BaseDescr descr] : ( ^( VT_FACT pt= pattern_type (fe= fact_expression )* ) | ^( VT_FACT_BINDING label= VT_LABEL fact= fact_expression ) | ^(start= VT_FACT_OR left= fact_expression right= fact_expression ) | ^( VT_FIELD field= field_element (fe= fact_expression )? ) | ^( VT_BIND_FIELD label= VT_LABEL fe= fact_expression ) | ^( VK_EVAL pc= VT_PAREN_CHUNK ) | ^(op= EQUAL fe= fact_expression ) | ^(op= NOT_EQUAL fe= fact_expression ) | ^(op= GREATER fe= fact_expression ) | ^(op= GREATER_EQUAL fe= fact_expression ) | ^(op= LESS fe= fact_expression ) | ^(op= LESS_EQUAL fe= fact_expression ) | ^(op= VK_CONTAINS (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_EXCLUDES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MATCHES (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_SOUNDSLIKE (not= VK_NOT )? fe= fact_expression ) | ^(op= VK_MEMBEROF (not= VK_NOT )? fe= fact_expression ) | ^(op= ID (not= VK_NOT )? (!
 param= VT_SQUARE_CHUNK )? fe= fact_expression ) | ^( VK_IN (not= VK_NOT )? (fe= fact_expression )+ ) | ^( DOUBLE_PIPE left= fact_expression right= fact_expression ) | ^( DOUBLE_AMPER left= fact_expression right= fact_expression ) | ^( VT_ACCESSOR_PATH (ae= accessor_element )+ ) | s= STRING | i= INT | f= FLOAT | b= BOOL | n= NULL | pc= VT_PAREN_CHUNK );", 47, 0, input);
 
                 throw nvae;
             }
 
             switch (alt47) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:278:5: ^( VT_FACT dt= data_type (fe= fact_expression )* )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:278:5: ^( VT_FACT pt= pattern_type (fe= fact_expression )* )
                     {
                     match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression1413); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_data_type_in_fact_expression1417);
-                    dt=data_type();
+                    pushFollow(FOLLOW_pattern_type_in_fact_expression1417);
+                    pt=pattern_type();
                     _fsp--;
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:278:28: (fe= fact_expression )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:278:31: (fe= fact_expression )*
                     loop35:
                     do {
                         int alt35=2;
@@ -3016,7 +3017,7 @@
 
                         switch (alt35) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:278:29: fe= fact_expression
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:278:32: fe= fact_expression
                     	    {
                     	    pushFollow(FOLLOW_fact_expression_in_fact_expression1422);
                     	    fe=fact_expression();
@@ -3034,7 +3035,7 @@
 
 
                     match(input, Token.UP, null); 
-                    	retval.descr = factory.createPattern(dt, exprList);	
+                    	retval.descr = factory.createPattern(pt, exprList);	
 
                     }
                     break;
@@ -3841,9 +3842,9 @@
     // $ANTLR end accessor_element
 
 
-    // $ANTLR start data_type
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:358:1: data_type returns [BaseDescr dataType] : ^( VT_DATA_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ) ;
-    public final BaseDescr data_type() throws RecognitionException {
+    // $ANTLR start pattern_type
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:358:1: pattern_type returns [BaseDescr dataType] : ^( VT_PATTERN_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ) ;
+    public final BaseDescr pattern_type() throws RecognitionException {
         BaseDescr dataType = null;
 
         DroolsTree idList=null;
@@ -3852,13 +3853,13 @@
         List list_rightList=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:2: ( ^( VT_DATA_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:4: ^( VT_DATA_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:2: ( ^( VT_PATTERN_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:4: ^( VT_PATTERN_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* )
             {
-            match(input,VT_DATA_TYPE,FOLLOW_VT_DATA_TYPE_in_data_type1968); 
+            match(input,VT_PATTERN_TYPE,FOLLOW_VT_PATTERN_TYPE_in_pattern_type1968); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:25: (idList+= ID )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:28: (idList+= ID )+
             int cnt50=0;
             loop50:
             do {
@@ -3872,10 +3873,10 @@
 
                 switch (alt50) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:25: idList+= ID
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:28: idList+= ID
             	    {
             	    idList=(DroolsTree)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_data_type1972); 
+            	    match(input,ID,FOLLOW_ID_in_pattern_type1972); 
             	    if (list_idList==null) list_idList=new ArrayList();
             	    list_idList.add(idList);
 
@@ -3892,7 +3893,7 @@
                 cnt50++;
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:31: ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:34: ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
             loop51:
             do {
                 int alt51=2;
@@ -3905,11 +3906,11 @@
 
                 switch (alt51) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:32: LEFT_SQUARE rightList+= RIGHT_SQUARE
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:35: LEFT_SQUARE rightList+= RIGHT_SQUARE
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_data_type1976); 
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_pattern_type1976); 
             	    rightList=(DroolsTree)input.LT(1);
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_data_type1980); 
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_pattern_type1980); 
             	    if (list_rightList==null) list_rightList=new ArrayList();
             	    list_rightList.add(rightList);
 
@@ -3937,18 +3938,117 @@
         }
         return dataType;
     }
+    // $ANTLR end pattern_type
+
+
+    // $ANTLR start data_type
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:363:1: data_type returns [BaseDescr dataType] : ^( VT_DATA_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ) ;
+    public final BaseDescr data_type() throws RecognitionException {
+        BaseDescr dataType = null;
+
+        DroolsTree idList=null;
+        DroolsTree rightList=null;
+        List list_idList=null;
+        List list_rightList=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:2: ( ^( VT_DATA_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:4: ^( VT_DATA_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* )
+            {
+            match(input,VT_DATA_TYPE,FOLLOW_VT_DATA_TYPE_in_data_type2002); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:25: (idList+= ID )+
+            int cnt52=0;
+            loop52:
+            do {
+                int alt52=2;
+                int LA52_0 = input.LA(1);
+
+                if ( (LA52_0==ID) ) {
+                    alt52=1;
+                }
+
+
+                switch (alt52) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:25: idList+= ID
+            	    {
+            	    idList=(DroolsTree)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_data_type2006); 
+            	    if (list_idList==null) list_idList=new ArrayList();
+            	    list_idList.add(idList);
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt52 >= 1 ) break loop52;
+                        EarlyExitException eee =
+                            new EarlyExitException(52, input);
+                        throw eee;
+                }
+                cnt52++;
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:31: ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
+            loop53:
+            do {
+                int alt53=2;
+                int LA53_0 = input.LA(1);
+
+                if ( (LA53_0==LEFT_SQUARE) ) {
+                    alt53=1;
+                }
+
+
+                switch (alt53) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:32: LEFT_SQUARE rightList+= RIGHT_SQUARE
+            	    {
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_data_type2010); 
+            	    rightList=(DroolsTree)input.LT(1);
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_data_type2014); 
+            	    if (list_rightList==null) list_rightList=new ArrayList();
+            	    list_rightList.add(rightList);
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop53;
+                }
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+            	dataType = factory.createDataType(list_idList, list_rightList);	
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return dataType;
+    }
     // $ANTLR end data_type
 
 
  
 
     public static final BitSet FOLLOW_VT_COMPILATION_UNIT_in_compilation_unit49 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_package_statement_in_compilation_unit51 = new BitSet(new long[]{0xDB3FFC0000000028L});
-    public static final BitSet FOLLOW_statement_in_compilation_unit53 = new BitSet(new long[]{0xDB3FFC0000000028L});
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit51 = new BitSet(new long[]{0xB67FF80000000028L,0x0000000000000001L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit53 = new BitSet(new long[]{0xB67FF80000000028L,0x0000000000000001L});
     public static final BitSet FOLLOW_VK_PACKAGE_in_package_statement71 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_package_id_in_package_statement75 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_PACKAGE_ID_in_package_id102 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_package_id106 = new BitSet(new long[]{0x0000000000000008L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_package_id106 = new BitSet(new long[]{0x0000000000000008L,0x0000000000400000L});
     public static final BitSet FOLLOW_rule_attribute_in_statement124 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_function_import_statement_in_statement134 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_import_statement_in_statement144 = new BitSet(new long[]{0x0000000000000002L});
@@ -3960,48 +4060,48 @@
     public static final BitSet FOLLOW_VK_IMPORT_in_import_statement216 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_import_name_in_import_statement220 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement242 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_FUNCTION_in_function_import_statement244 = new BitSet(new long[]{0x0000004000000000L});
+    public static final BitSet FOLLOW_VK_FUNCTION_in_function_import_statement244 = new BitSet(new long[]{0x0000008000000000L});
     public static final BitSet FOLLOW_import_name_in_function_import_statement248 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_IMPORT_ID_in_import_name267 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_import_name271 = new BitSet(new long[]{0x0000000000000008L,0x0000000000A00000L});
+    public static final BitSet FOLLOW_ID_in_import_name271 = new BitSet(new long[]{0x0000000000000008L,0x0000000001400000L});
     public static final BitSet FOLLOW_DOT_STAR_in_import_name276 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_GLOBAL_in_global299 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_data_type_in_global303 = new BitSet(new long[]{0x0000008000000000L});
+    public static final BitSet FOLLOW_data_type_in_global303 = new BitSet(new long[]{0x0000010000000000L});
     public static final BitSet FOLLOW_VT_GLOBAL_ID_in_global307 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_FUNCTION_in_function329 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_data_type_in_function333 = new BitSet(new long[]{0x0000010000000000L});
-    public static final BitSet FOLLOW_VT_FUNCTION_ID_in_function338 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_data_type_in_function333 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_VT_FUNCTION_ID_in_function338 = new BitSet(new long[]{0x0000040000000000L});
     public static final BitSet FOLLOW_parameters_in_function342 = new BitSet(new long[]{0x0000000000020000L});
     public static final BitSet FOLLOW_VT_CURLY_CHUNK_in_function346 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_TEMPLATE_in_template371 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_TEMPLATE_ID_in_template375 = new BitSet(new long[]{0x0000000000004000L});
-    public static final BitSet FOLLOW_template_slot_in_template384 = new BitSet(new long[]{0x0000000000004000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_template_slot_in_template384 = new BitSet(new long[]{0x0000000000004000L,0x0000000002000000L});
     public static final BitSet FOLLOW_END_in_template392 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_SLOT_in_template_slot412 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_data_type_in_template_slot416 = new BitSet(new long[]{0x0000000000002000L});
     public static final BitSet FOLLOW_VT_SLOT_ID_in_template_slot420 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_QUERY_in_query442 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_QUERY_ID_in_query446 = new BitSet(new long[]{0x0000020000100000L});
+    public static final BitSet FOLLOW_VT_QUERY_ID_in_query446 = new BitSet(new long[]{0x0000040000100000L});
     public static final BitSet FOLLOW_parameters_in_query450 = new BitSet(new long[]{0x0000000000100000L});
-    public static final BitSet FOLLOW_lhs_block_in_query455 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_lhs_block_in_query455 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
     public static final BitSet FOLLOW_END_in_query459 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_RULE_in_rule481 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_RULE_ID_in_rule485 = new BitSet(new long[]{0x0080000000018000L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule489 = new BitSet(new long[]{0x0080000000010000L});
+    public static final BitSet FOLLOW_VT_RULE_ID_in_rule485 = new BitSet(new long[]{0x0100000000018000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule489 = new BitSet(new long[]{0x0100000000010000L});
     public static final BitSet FOLLOW_when_part_in_rule494 = new BitSet(new long[]{0x0000000000010000L});
     public static final BitSet FOLLOW_VT_RHS_CHUNK_in_rule499 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_WHEN_in_when_part518 = new BitSet(new long[]{0x0000000000100000L});
     public static final BitSet FOLLOW_lhs_block_in_when_part522 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes544 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_ATTRIBUTES_in_rule_attributes546 = new BitSet(new long[]{0x003FFC0000000000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes552 = new BitSet(new long[]{0x003FFC0000000008L});
+    public static final BitSet FOLLOW_VK_ATTRIBUTES_in_rule_attributes546 = new BitSet(new long[]{0x007FF80000000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes552 = new BitSet(new long[]{0x007FF80000000008L});
     public static final BitSet FOLLOW_VT_PARAM_LIST_in_parameters576 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_param_definition_in_parameters581 = new BitSet(new long[]{0x0000001000000008L,0x0000000000200000L});
-    public static final BitSet FOLLOW_data_type_in_param_definition603 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters581 = new BitSet(new long[]{0x0000001000000008L,0x0000000000400000L});
+    public static final BitSet FOLLOW_data_type_in_param_definition603 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
     public static final BitSet FOLLOW_argument_in_param_definition608 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_argument628 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_argument631 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument635 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_ID_in_argument628 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_argument631 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument635 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
     public static final BitSet FOLLOW_VK_SALIENCE_in_rule_attribute659 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_INT_in_rule_attribute664 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_rule_attribute668 = new BitSet(new long[]{0x0000000000000008L});
@@ -4028,16 +4128,16 @@
     public static final BitSet FOLLOW_VK_DIALECT_in_rule_attribute825 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_STRING_in_rule_attribute829 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_AND_IMPLICIT_in_lhs_block854 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs_block859 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs_block859 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000007102L});
     public static final BitSet FOLLOW_VT_OR_PREFIX_in_lhs885 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs890 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs890 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000007102L});
     public static final BitSet FOLLOW_VT_OR_INFIX_in_lhs906 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs910 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs910 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000007102L});
     public static final BitSet FOLLOW_lhs_in_lhs914 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_AND_PREFIX_in_lhs926 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs931 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs931 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000007102L});
     public static final BitSet FOLLOW_VT_AND_INFIX_in_lhs947 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs951 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs951 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000007102L});
     public static final BitSet FOLLOW_lhs_in_lhs955 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_EXISTS_in_lhs967 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_lhs_in_lhs971 = new BitSet(new long[]{0x0000000000000008L});
@@ -4046,9 +4146,9 @@
     public static final BitSet FOLLOW_VK_EVAL_in_lhs999 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_lhs1003 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_FORALL_in_lhs1015 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs1020 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs1020 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000007102L});
     public static final BitSet FOLLOW_VK_FROM_in_lhs1034 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs1038 = new BitSet(new long[]{0x0000000008000000L,0x0000000000084040L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs1038 = new BitSet(new long[]{0x0000000008000000L,0x0000000000108080L});
     public static final BitSet FOLLOW_from_elements_in_lhs1042 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_lhs_pattern_in_lhs1053 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_VK_ACCUMULATE_in_from_elements1074 = new BitSet(new long[]{0x0000000000000004L});
@@ -4066,7 +4166,7 @@
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1200 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_ACTION_in_accumulate_init_clause1208 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1212 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause1221 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
+    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause1221 = new BitSet(new long[]{0x0000000000000000L,0x0000000000080000L});
     public static final BitSet FOLLOW_VK_RESULT_in_accumulate_init_clause1228 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1232 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause1255 = new BitSet(new long[]{0x0000000000000004L});
@@ -4086,19 +4186,19 @@
     public static final BitSet FOLLOW_VT_PATTERN_in_lhs_pattern1386 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_fact_expression_in_lhs_pattern1390 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FACT_in_fact_expression1413 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_data_type_in_fact_expression1417 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1422 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_pattern_type_in_fact_expression1417 = new BitSet(new long[]{0x00000007C0080048L,0x00000FF78440027EL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1422 = new BitSet(new long[]{0x00000007C0080048L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_VT_FACT_BINDING_in_fact_expression1436 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1440 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1440 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1444 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FACT_OR_in_fact_expression1456 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1460 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1460 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1464 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FIELD_in_fact_expression1475 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_field_element_in_fact_expression1479 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_field_element_in_fact_expression1479 = new BitSet(new long[]{0x00000007C0080048L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1483 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_BIND_FIELD_in_fact_expression1494 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1498 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1498 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1502 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_EVAL_in_fact_expression1513 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression1517 = new BitSet(new long[]{0x0000000000000008L});
@@ -4115,32 +4215,32 @@
     public static final BitSet FOLLOW_LESS_EQUAL_in_fact_expression1610 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1614 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_CONTAINS_in_fact_expression1626 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1630 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1630 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1635 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_EXCLUDES_in_fact_expression1647 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1651 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1651 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1656 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_MATCHES_in_fact_expression1668 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1672 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1672 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1677 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_SOUNDSLIKE_in_fact_expression1689 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1693 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1693 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1698 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_MEMBEROF_in_fact_expression1710 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1714 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1714 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1719 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_ID_in_fact_expression1731 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1735 = new BitSet(new long[]{0x00000007C00C0040L,0x000007FBC220013FL});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1740 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1735 = new BitSet(new long[]{0x00000007C00C0040L,0x00000FF78440027EL});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1740 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1745 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_IN_in_fact_expression1756 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1760 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1766 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1760 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1766 = new BitSet(new long[]{0x00000007C0080048L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_expression1781 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1785 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1785 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1789 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_DOUBLE_AMPER_in_fact_expression1799 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1803 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1803 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1807 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1818 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_accessor_element_in_fact_expression1823 = new BitSet(new long[]{0x0000000800000008L});
@@ -4155,9 +4255,13 @@
     public static final BitSet FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1939 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_ID_in_accessor_element1943 = new BitSet(new long[]{0x0000000000040008L});
     public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1947 = new BitSet(new long[]{0x0000000000040008L});
-    public static final BitSet FOLLOW_VT_DATA_TYPE_in_data_type1968 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_data_type1972 = new BitSet(new long[]{0x0000000000000008L,0x0000080000200000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_data_type1976 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_data_type1980 = new BitSet(new long[]{0x0000000000000008L,0x0000080000000000L});
+    public static final BitSet FOLLOW_VT_PATTERN_TYPE_in_pattern_type1968 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_pattern_type1972 = new BitSet(new long[]{0x0000000000000008L,0x0000100000400000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_pattern_type1976 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_pattern_type1980 = new BitSet(new long[]{0x0000000000000008L,0x0000100000000000L});
+    public static final BitSet FOLLOW_VT_DATA_TYPE_in_data_type2002 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_data_type2006 = new BitSet(new long[]{0x0000000000000008L,0x0000100000400000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_data_type2010 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_data_type2014 = new BitSet(new long[]{0x0000000000000008L,0x0000100000000000L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DRL.g
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2008-05-20 12:50:33 UTC (rev 20081)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2008-05-20 13:44:37 UTC (rev 20082)
@@ -47,6 +47,7 @@
 	VT_ACCESSOR_ELEMENT;
 	
 	VT_DATA_TYPE;
+	VT_PATTERN_TYPE;
 	VT_PACKAGE_ID;
 	VT_IMPORT_ID;
 	VT_GLOBAL_ID;
@@ -629,8 +630,8 @@
 	;
 
 fact
-	:	data_type LEFT_PAREN constraints? RIGHT_PAREN
-	->	^(VT_FACT data_type constraints? RIGHT_PAREN)
+	:	pattern_type LEFT_PAREN constraints? RIGHT_PAREN
+	->	^(VT_FACT pattern_type constraints? RIGHT_PAREN)
 	;
 
 constraints
@@ -721,6 +722,11 @@
 	|	NULL
 	;
 
+pattern_type
+	:	ID ( DOT ID )* dimension_definition*
+		-> ^(VT_PATTERN_TYPE ID+ dimension_definition*)
+	;
+
 data_type
 	:	ID ( DOT ID )* dimension_definition*
 		-> ^(VT_DATA_TYPE ID+ dimension_definition*)

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g	2008-05-20 12:50:33 UTC (rev 20081)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g	2008-05-20 13:44:37 UTC (rev 20082)
@@ -275,8 +275,8 @@
 fact_expression returns [BaseDescr descr]
 @init{
 	List<BaseDescr> exprList = new LinkedList<BaseDescr>();
-}	:	^(VT_FACT dt=data_type (fe=fact_expression {exprList.add($fe.descr);})*)
-	{	$descr = factory.createPattern($dt.dataType, exprList);	}
+}	:	^(VT_FACT pt=pattern_type (fe=fact_expression {exprList.add($fe.descr);})*)
+	{	$descr = factory.createPattern($pt.dataType, exprList);	}
 	|	^(VT_FACT_BINDING label=VT_LABEL fact=fact_expression)
 	{	$descr = factory.setupPatternBiding($label, $fact.descr);	}
 	|	^(start=VT_FACT_OR left=fact_expression right=fact_expression)
@@ -355,6 +355,11 @@
 	{	$element = factory.createAccessorElement($id, $sc);	}
 	;
 
+pattern_type returns [BaseDescr dataType]
+	:	^(VT_PATTERN_TYPE idList+=ID+ (LEFT_SQUARE rightList+=RIGHT_SQUARE)*)
+	{	$dataType = factory.createDataType($idList, $rightList);	}
+	;
+
 data_type returns [BaseDescr dataType]
 	:	^(VT_DATA_TYPE idList+=ID+ (LEFT_SQUARE rightList+=RIGHT_SQUARE)*)
 	{	$dataType = factory.createDataType($idList, $rightList);	}

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g	2008-05-20 12:50:33 UTC (rev 20081)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g	2008-05-20 13:44:37 UTC (rev 20082)
@@ -153,7 +153,7 @@
 	:	^(DOUBLE_PIPE fact_expression fact_expression)
 	|	^(DOUBLE_AMPER fact_expression fact_expression)
 	|	^(VT_FACT_BINDING VT_LABEL fact_expression)
-	|	^(VT_FACT data_type fact_expression*)
+	|	^(VT_FACT pattern_type fact_expression*)
 	|	^(VT_FACT_OR fact_expression fact_expression)
 	|	^(VK_EVAL VT_PAREN_CHUNK)
 	|	^(VK_IN VK_NOT? fact_expression+)
@@ -180,6 +180,10 @@
 	|	VT_PAREN_CHUNK
 	;
 
+pattern_type
+	:	^(VT_PATTERN_TYPE ID+ dimension_definition*)
+	;
+
 data_type
 	:	^(VT_DATA_TYPE ID+ dimension_definition*)
 	;

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/TestDRL.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/TestDRL.java	2008-05-20 12:50:33 UTC (rev 20081)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/TestDRL.java	2008-05-20 13:44:37 UTC (rev 20082)
@@ -77,7 +77,7 @@
 		// test input: "package test.templates\n\ntemplate Cheese\n\tString \tname\n\tInteger age\nend\n\ntemplate \"Wine\"\n\tString \t\tname\n\tString \t\tyear\n\tString[] \taccolades\nend\n\n\nrule \"a rule\"\n  when\n\tCheese(name == \"Stilton\", age==2001)\n\tWine(name == \"Grange\", age == \"1978\", accolades contains \"world champion\")\n  then\n  \tbaz();\nend"
 		Object retval = execParser("compilation_unit", "package test.templates\n\ntemplate Cheese\n\tString \tname\n\tInteger age\nend\n\ntemplate \"Wine\"\n\tString \t\tname\n\tString \t\tyear\n\tString[] \taccolades\nend\n\n\nrule \"a rule\"\n  when\n\tCheese(name == \"Stilton\", age==2001)\n\tWine(name == \"Grange\", age == \"1978\", accolades contains \"world champion\")\n  then\n  \tbaz();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID test templates)) (template Cheese (VT_SLOT (VT_DATA_TYPE String) name) (VT_SLOT (VT_DATA_TYPE Integer) age) end) (template \"Wine\" (VT_SLOT (VT_DATA_TYPE String) name) (VT_SLOT (VT_DATA_TYPE String) year) (VT_SLOT (VT_DATA_TYPE String [ ]) accolades) end) (rule \"a rule\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Stilton\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 2001)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Wine) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Grange\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== \"1978\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT accolades)) (contains \"world champion\"))))) then\n  \tbaz();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID test templates)) (template Cheese (VT_SLOT (VT_DATA_TYPE String) name) (VT_SLOT (VT_DATA_TYPE Integer) age) end) (template \"Wine\" (VT_SLOT (VT_DATA_TYPE String) name) (VT_SLOT (VT_DATA_TYPE String) year) (VT_SLOT (VT_DATA_TYPE String [ ]) accolades) end) (rule \"a rule\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Stilton\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 2001)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Wine) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Grange\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== \"1978\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT accolades)) (contains \"world champion\"))))) then\n  \tbaz();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -86,7 +86,7 @@
 		// test input: "package foo\n\nrule rule_one \n  when\n  \tFoo()\n  then\n  \t if (speed > speedLimit ? true : false;)\n     pullEmOver();\nend"
 		Object retval = execParser("compilation_unit", "package foo\n\nrule rule_one \n  when\n  \tFoo()\n  then\n  \t if (speed > speedLimit ? true : false;)\n     pullEmOver();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (rule rule_one when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo)))) then\n  \t if (speed > speedLimit ? true : false;)\n     pullEmOver();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (rule rule_one when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo)))) then\n  \t if (speed > speedLimit ? true : false;)\n     pullEmOver();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -95,7 +95,7 @@
 		// test input: "package foo\n\nfunction String[] yourFunction(String args[]) {\n     baz();\n}\n\nrule \"new rule\"\n\n\twhen\n\t\tSomething()\n\tthen\n\t\tyourFunction(new String[3] {\"a\",\"b\",\"c\"});\n\t\t\nend"
 		Object retval = execParser("compilation_unit", "package foo\n\nfunction String[] yourFunction(String args[]) {\n     baz();\n}\n\nrule \"new rule\"\n\n\twhen\n\t\tSomething()\n\tthen\n\t\tyourFunction(new String[3] {\"a\",\"b\",\"c\"});\n\t\t\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (function (VT_DATA_TYPE String [ ]) yourFunction (VT_PARAM_LIST (VT_DATA_TYPE String) args [ ]) {\n     baz();\n}) (rule \"new rule\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Something)))) then\n\t\tyourFunction(new String[3] {\"a\",\"b\",\"c\"});\n\t\t\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (function (VT_DATA_TYPE String [ ]) yourFunction (VT_PARAM_LIST (VT_DATA_TYPE String) args [ ]) {\n     baz();\n}) (rule \"new rule\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Something)))) then\n\t\tyourFunction(new String[3] {\"a\",\"b\",\"c\"});\n\t\t\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -122,7 +122,7 @@
 		// test input: "\nrule rule1 \n  no-loop false\n  when\n  \tnot Cheese(type == \"stilton\")\n  then\n\tfunky();\nend"
 		Object retval = execParser("compilation_unit", "\nrule rule1 \n  no-loop false\n  when\n  \tnot Cheese(type == \"stilton\")\n  then\n\tfunky();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (no-loop false)) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n\tfunky();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (no-loop false)) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n\tfunky();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -131,7 +131,7 @@
 		// test input: "\nrule rule1 \n  auto-focus true\n  when\n  \tnot Cheese(type == \"stilton\")\n  then\n\tfunky();\nend"
 		Object retval = execParser("compilation_unit", "\nrule rule1 \n  auto-focus true\n  when\n  \tnot Cheese(type == \"stilton\")\n  then\n\tfunky();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (auto-focus true)) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n\tfunky();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (auto-focus true)) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n\tfunky();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -140,7 +140,7 @@
 		// test input: "\nrule rule1 \n  ruleflow-group \"a group\"\n  when\n  \tnot Cheese(type == \"stilton\")\n  then\n\tfunky();\nend"
 		Object retval = execParser("compilation_unit", "\nrule rule1 \n  ruleflow-group \"a group\"\n  when\n  \tnot Cheese(type == \"stilton\")\n  then\n\tfunky();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (ruleflow-group \"a group\")) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n\tfunky();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (ruleflow-group \"a group\")) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n\tfunky();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -158,7 +158,7 @@
 		// test input: "#check that it can handle true/false literals, and \n#negative numbers\nrule simple_rule \n  when\n\tFoo(bar == false)\n\tFoo(boo > -42)\n\tFoo(boo > -42.42)\n  then\n\tcons();\nend"
 		Object retval = execParser("compilation_unit", "#check that it can handle true/false literals, and \n#negative numbers\nrule simple_rule \n  when\n\tFoo(bar == false)\n\tFoo(boo > -42)\n\tFoo(boo > -42.42)\n  then\n\tcons();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== false)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42.42))))) then\n\tcons();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== false)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42.42))))) then\n\tcons();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -167,7 +167,7 @@
 		// test input: "package org.drools.test;\n \nimport org.drools.Cheese;\n \nrule \"simple rule\"\n    when\n        Cheese( )\n    then\nend "
 		Object retval = execParser("compilation_unit", "package org.drools.test;\n \nimport org.drools.Cheese;\n \nrule \"simple rule\"\n    when\n        Cheese( )\n    then\nend ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (rule \"simple rule\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese)))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (rule \"simple rule\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese)))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -176,7 +176,7 @@
 		// test input: "\nrule blah\n\n when \n\n\tCol1() from something.doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )\n\tCol2()\n then\n\tpartay();\nend\t"
 		Object retval = execParser("compilation_unit", "\nrule blah\n\n when \n\n\tCol1() from something.doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )\n\tCol2()\n then\n\tpartay();\nend\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2)))) then\n\tpartay();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2)))) then\n\tpartay();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -185,7 +185,7 @@
 		// test input: "\nrule blah\n\n when \n\n\tCol1() from doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )\n\tCol2()\n then\n\tpartay();\nend\t"
 		Object retval = execParser("compilation_unit", "\nrule blah\n\n when \n\n\tCol1() from doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )\n\tCol2()\n then\n\tpartay();\nend\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE doIt ( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] ))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2)))) then\n\tpartay();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE doIt ( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] ))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2)))) then\n\tpartay();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -194,7 +194,7 @@
 		// test input: "\nrule blah\n\n when \n\n\tCol1() from something.doIt\n\tCol2()\n then\n\tpartay();\nend\t"
 		Object retval = execParser("compilation_unit", "\nrule blah\n\n when \n\n\tCol1() from something.doIt\n\tCol2()\n then\n\tpartay();\nend\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2)))) then\n\tpartay();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2)))) then\n\tpartay();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -203,7 +203,7 @@
 		// test input: "\nrule blah\n\n when \n\n\tCol1() from something.doIt[\"key\"]\n\tCol2()\n then\n\tpartay();\nend\t"
 		Object retval = execParser("compilation_unit", "\nrule blah\n\n when \n\n\tCol1() from something.doIt[\"key\"]\n\tCol2()\n then\n\tpartay();\nend\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt [\"key\"]))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2)))) then\n\tpartay();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt [\"key\"]))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2)))) then\n\tpartay();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -212,7 +212,7 @@
 		// test input: "rule blah\n when \n\tCol1() from doIt1( foo,bar,42,\"hello\",{ a => \"b\"}, [a, \"b\", 42] )\n\t            .doIt2(bar, [a, \"b\", 42]).field[\"key\"]\n\tCol2()\n then\n\tpartay();\nend\t"
 		Object retval = execParser("compilation_unit", "rule blah\n when \n\tCol1() from doIt1( foo,bar,42,\"hello\",{ a => \"b\"}, [a, \"b\", 42] )\n\t            .doIt2(bar, [a, \"b\", 42]).field[\"key\"]\n\tCol2()\n then\n\tpartay();\nend\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE doIt1 ( foo,bar,42,\"hello\",{ a => \"b\"}, [a, \"b\", 42] ) (. doIt2 (bar, [a, \"b\", 42]) (. field [\"key\"])))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2)))) then\n\tpartay();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE doIt1 ( foo,bar,42,\"hello\",{ a => \"b\"}, [a, \"b\", 42] ) (. doIt2 (bar, [a, \"b\", 42]) (. field [\"key\"])))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2)))) then\n\tpartay();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -221,7 +221,7 @@
 		// test input: "\nrule simple_rule \n  when\n    foo3 : Bar(a==3)\n    foo4 : Bar(a4:a==4)\n    Baz()\n  then\n  if ( a == b ) {\n    assert( foo3 );\n  } else {\n    retract( foo4 );\n  } \n  System.out.println( a4 );\nend"
 		Object retval = execParser("compilation_unit", "\nrule simple_rule \n  when\n    foo3 : Bar(a==3)\n    foo4 : Bar(a4:a==4)\n    Baz()\n  then\n  if ( a == b ) {\n    assert( foo3 );\n  } else {\n    retract( foo4 );\n  } \n  System.out.println( a4 );\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) then\n  if ( a == b ) {\n    assert( foo3 );\n  } else {\n    retract( foo4 );\n  } \n  System.out.println( a4 );\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) then\n  if ( a == b ) {\n    assert( foo3 );\n  } else {\n    retract( foo4 );\n  } \n  System.out.println( a4 );\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -230,7 +230,7 @@
 		// test input: "#this is for showing off all the new multi restriction stuff\n\n\n\n\nrule simple_rule \n  when\n  \tPerson(age > 30 && < 40)\n  \tVehicle(type == \"sedan\" || == \"wagon\", age < 3)\n  then\n\tconsequence();\nend"
 		Object retval = execParser("compilation_unit", "#this is for showing off all the new multi restriction stuff\n\n\n\n\nrule simple_rule \n  when\n  \tPerson(age > 30 && < 40)\n  \tVehicle(type == \"sedan\" || == \"wagon\", age < 3)\n  then\n\tconsequence();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (|| (== \"sedan\") (== \"wagon\"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then\n\tconsequence();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (|| (== \"sedan\") (== \"wagon\"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then\n\tconsequence();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -239,7 +239,7 @@
 		// test input: "package la\n\n\nrule simple_rule \n  when\n  \tBaz()\n  then\n  \t//woot\n  \tfirst\n  \t\n  \t#\n  \t\n  \t/* lala\n  \t\n  \t*/\n  \tsecond  \nend"
 		Object retval = execParser("compilation_unit", "package la\n\n\nrule simple_rule \n  when\n  \tBaz()\n  then\n  \t//woot\n  \tfirst\n  \t\n  \t#\n  \t\n  \t/* lala\n  \t\n  \t*/\n  \tsecond  \nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID la)) (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) then\n  \t//woot\n  \tfirst\n  \t\n  \t//\n  \t\n  \t/* lala\n  \t\n  \t*/\n  \tsecond  \nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID la)) (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) then\n  \t//woot\n  \tfirst\n  \t\n  \t//\n  \t\n  \t/* lala\n  \t\n  \t*/\n  \tsecond  \nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -248,7 +248,7 @@
 		// test input: "\nrule simple_rule \n  when\n    foo3 : Bar(a==3) ; foo4 : Bar(a4:a==4) ; Baz()\n  then\n  if ( a == b ) {\n    assert( foo3 );\n  } else {\n    retract( foo4 );\n  } \n  System.out.println( a4 );\nend"
 		Object retval = execParser("compilation_unit", "\nrule simple_rule \n  when\n    foo3 : Bar(a==3) ; foo4 : Bar(a4:a==4) ; Baz()\n  then\n  if ( a == b ) {\n    assert( foo3 );\n  } else {\n    retract( foo4 );\n  } \n  System.out.println( a4 );\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) then\n  if ( a == b ) {\n    assert( foo3 );\n  } else {\n    retract( foo4 );\n  } \n  System.out.println( a4 );\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) then\n  if ( a == b ) {\n    assert( foo3 );\n  } else {\n    retract( foo4 );\n  } \n  System.out.println( a4 );\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -257,7 +257,7 @@
 		// test input: "\nrule simple_rule \n  when\n  \tnot Cheese(type == \"stilton\")\n  then\n\tfunky();\nend"
 		Object retval = execParser("compilation_unit", "\nrule simple_rule \n  when\n  \tnot Cheese(type == \"stilton\")\n  then\n\tfunky();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n\tfunky();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n\tfunky();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -266,7 +266,7 @@
 		// test input: "package HR1\n\nimport function abd.def.x\nimport function qed.wah.*\n\nrule simple_rule \n  when  \t\t  \t\n  \tnot ( Cheese(type == \"stilton\") )\n  \texists ( Foo() )\n  then\n\tfunky();\nend"
 		Object retval = execParser("compilation_unit", "package HR1\n\nimport function abd.def.x\nimport function qed.wah.*\n\nrule simple_rule \n  when  \t\t  \t\n  \tnot ( Cheese(type == \"stilton\") )\n  \texists ( Foo() )\n  then\n\tfunky();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID HR1)) (import function (VT_IMPORT_ID abd def x)) (import function (VT_IMPORT_ID qed wah .*)) (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (exists (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))))) then\n\tfunky();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID HR1)) (import function (VT_IMPORT_ID abd def x)) (import function (VT_IMPORT_ID qed wah .*)) (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (exists (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))))) then\n\tfunky();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -275,7 +275,7 @@
 		// test input: "package HR1\n\nrule simple_rule \n  when  \t\t  \t\n  \tnot ( Cheese(type == \"stilton\") )\n  \texists ( Foo() )\n  then\n\tfunky();\nend"
 		Object retval = execParser("compilation_unit", "package HR1\n\nrule simple_rule \n  when  \t\t  \t\n  \tnot ( Cheese(type == \"stilton\") )\n  \texists ( Foo() )\n  then\n\tfunky();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID HR1)) (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (exists (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))))) then\n\tfunky();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID HR1)) (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (exists (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))))) then\n\tfunky();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -293,7 +293,7 @@
 		// test input: "\n\nquery \"simple_query\" \n    foo3 : Bar(a==3)\n    foo4 : Bar(a4:a==4)\n    Baz()\n\t\nend"
 		Object retval = execParser("compilation_unit", "\n\nquery \"simple_query\" \n    foo3 : Bar(a==3)\n    foo4 : Bar(a4:a==4)\n    Baz()\n\t\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (query \"simple_query\" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) end))";
+		Object expecting = "(VT_COMPILATION_UNIT (query \"simple_query\" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) end))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -302,7 +302,7 @@
 		// test input: "\npackage foo\n\nrule bar\n\twhen\n\t\tBaz()\n\tthen\n\t\tBoo()\nend\n\nquery \"simple_query\" \n    foo3 : Bar(a==3)\n    foo4 : Bar(a4:a==4)\n    Baz()\n\t\nend\n\nrule bar2\n\twhen\n\t\tBaz()\n\tthen\n\t\tBoo()\nend\n\nquery \"simple_query2\" \n    foo3 : Bar(a==3)\n    foo4 : Bar(a4:a==4)\n    Baz()\n\t\nend\n\t"
 		Object retval = execParser("compilation_unit", "\npackage foo\n\nrule bar\n\twhen\n\t\tBaz()\n\tthen\n\t\tBoo()\nend\n\nquery \"simple_query\" \n    foo3 : Bar(a==3)\n    foo4 : Bar(a4:a==4)\n    Baz()\n\t\nend\n\nrule bar2\n\twhen\n\t\tBaz()\n\tthen\n\t\tBoo()\nend\n\nquery \"simple_query2\" \n    foo3 : Bar(a==3)\n    foo4 : Bar(a4:a==4)\n    Baz()\n\t\nend\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (rule bar when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) then\n\t\tBoo()\nend) (query \"simple_query\" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) end) (rule bar2 when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) then\n\t\tBoo()\nend) (query \"simple_query2\" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) end)!
 )";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (rule bar when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) then\n\t\tBoo()\nend) (query \"simple_query\" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) end) (rule bar2 when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) then\n\t\tBoo()\nend) (query \"simple_query2\" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_P!
 ATTERN_TYPE Baz)))) end))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -311,7 +311,7 @@
 		// test input: "package org.drools.test;\n\nimport org.drools.integrationtests.Cheese;\n\nrule \"Like Stilton\"\n    when\n        Cheese( t:type == \"stilton\" )\n    then\n        System.out.println(\"I like \" + t);\nend    \n\nrule \"Like Cheddar\"\n    when\n        Cheese( t:type == \"cheddar\" )\n    then\n        System.out.println(\"I like \" + t );\nend    "
 		Object retval = execParser("compilation_unit", "package org.drools.test;\n\nimport org.drools.integrationtests.Cheese;\n\nrule \"Like Stilton\"\n    when\n        Cheese( t:type == \"stilton\" )\n    then\n        System.out.println(\"I like \" + t);\nend    \n\nrule \"Like Cheddar\"\n    when\n        Cheese( t:type == \"cheddar\" )\n    then\n        System.out.println(\"I like \" + t );\nend    ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools integrationtests Cheese)) (rule \"Like Stilton\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n        System.out.println(\"I like \" + t);\nend) (rule \"Like Cheddar\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"cheddar\")))))) then\n        System.out.println(\"I like \" + t );\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools integrationtests Cheese)) (rule \"Like Stilton\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n        System.out.println(\"I like \" + t);\nend) (rule \"Like Cheddar\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"cheddar\")))))) then\n        System.out.println(\"I like \" + t );\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -320,7 +320,7 @@
 		// test input: "package org.drools.test;\n\nimport org.drools.Cheese;\n\nrule \"like cheddar\"\n    when\n        Cheese( $type:type )\n    then\n        System.out.println(\"I like \" + $type);\nend    "
 		Object retval = execParser("compilation_unit", "package org.drools.test;\n\nimport org.drools.Cheese;\n\nrule \"like cheddar\"\n    when\n        Cheese( $type:type )\n    then\n        System.out.println(\"I like \" + $type);\nend    ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (rule \"like cheddar\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type))))))) then\n        System.out.println(\"I like \" + $type);\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (rule \"like cheddar\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type))))))) then\n        System.out.println(\"I like \" + $type);\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -329,7 +329,7 @@
 		// test input: "package org.drools.test;\n\nimport org.drools.Cheese;\nimport org.drools.Person;\n\nrule \"Who likes Stilton\"\n    when\n        Cheese($type : type == \"stilton\")\n        $person : Person($name : name == \"bob\", likes == $type)        \n    then\n        System.out.println( $name + \" likes \" + $type);\nend    "
 		Object retval = execParser("compilation_unit", "package org.drools.test;\n\nimport org.drools.Cheese;\nimport org.drools.Person;\n\nrule \"Who likes Stilton\"\n    when\n        Cheese($type : type == \"stilton\")\n        $person : Person($name : name == \"bob\", likes == $type)        \n    then\n        System.out.println( $name + \" likes \" + $type);\nend    ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (import (VT_IMPORT_ID org drools Person)) (rule \"Who likes Stilton\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $name (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"bob\"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $type)))))))) then\n        System.out.println( $name + \" likes \" + $type);\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (import (VT_IMPORT_ID org drools Person)) (rule \"Who likes Stilton\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $name (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"bob\"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $type)))))))) then\n        System.out.println( $name + \" likes \" + $type);\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -338,7 +338,7 @@
 		// test input: "\nimport org.drools.Person\n\nrule simple_rule \n  when\n\tPerson(name == \"mark\") or \n\t( Person(type == \"fan\") and Cheese(type == \"green\") )\n  then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend"
 		Object retval = execParser("compilation_unit", "\nimport org.drools.Person\n\nrule simple_rule \n  when\n\tPerson(name == \"mark\") or \n\t( Person(type == \"fan\") and Cheese(type == \"green\") )\n  then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"green\"))))))) then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"green\"))))))) then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -347,7 +347,7 @@
 		// test input: "\nimport org.drools.Person\n\nrule simple_rule \n  when\n    Person(name == \"mark\") && Cheese(type == \"stilton\")\n    Person(name == \"mark\") || Cheese(type == \"stilton\")\n  then\n\tSystem.out.println( \"Mark and Michael\" );\nend"
 		Object retval = execParser("compilation_unit", "\nimport org.drools.Person\n\nrule simple_rule \n  when\n    Person(name == \"mark\") && Cheese(type == \"stilton\")\n    Person(name == \"mark\") || Cheese(type == \"stilton\")\n  then\n\tSystem.out.println( \"Mark and Michael\" );\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (&& (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (|| (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n\tSystem.out.println( \"Mark and Michael\" );\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (&& (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (|| (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n\tSystem.out.println( \"Mark and Michael\" );\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -356,7 +356,7 @@
 		// test input: "\nimport org.drools.Person\n\nrule simple_rule \n  when\n\tfoo :  ( Person(name == \"mark\") or Person(type == \"fan\") ) \n\tCheese(type == \"green\")\n  then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend"
 		Object retval = execParser("compilation_unit", "\nimport org.drools.Person\n\nrule simple_rule \n  when\n\tfoo :  ( Person(name == \"mark\") or Person(type == \"fan\") ) \n\tCheese(type == \"green\")\n  then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"green\"))))) then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"green\"))))) then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -365,7 +365,7 @@
 		// test input: "\n\nrule simple_rule \n  when\n\tfoo : ( Person(name == \"mark\") \n\t\tor \n\t\tPerson(type == \"fan\") )\n  then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend"
 		Object retval = execParser("compilation_unit", "\n\nrule simple_rule \n  when\n\tfoo : ( Person(name == \"mark\") \n\t\tor \n\t\tPerson(type == \"fan\") )\n  then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\"))))))) then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\"))))))) then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -374,7 +374,7 @@
 		// test input: "rule simple_rule \n  when\n\tfoo : ( \n\t\tPerson(name == \"mark\") or Person(type == \"fan\") \n\t\t)\n  then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend"
 		Object retval = execParser("compilation_unit", "rule simple_rule \n  when\n\tfoo : ( \n\t\tPerson(name == \"mark\") or Person(type == \"fan\") \n\t\t)\n  then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\"))))))) then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\"))))))) then\n\tSystem.out.println( \"Mark and Michael\" + bar );\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -383,7 +383,7 @@
 		// test input: "\nrule simple_rule \n  when\n\t ( (not Foo(x==\"a\") or Foo(x==\"y\") ) and ( Shoes() or Butt() ) )\n  then\n\tgo wild\nend"
 		Object retval = execParser("compilation_unit", "\nrule simple_rule \n  when\n\t ( (not Foo(x==\"a\") or Foo(x==\"y\") ) and ( Shoes() or Butt() ) )\n  then\n\tgo wild\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (and (or (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== \"a\"))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== \"y\"))))) (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Shoes))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Butt)))))) then\n\tgo wild\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (and (or (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== \"a\"))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== \"y\"))))) (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Shoes))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Butt)))))) then\n\tgo wild\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -392,7 +392,7 @@
 		// test input: "\nrule simple_rule \n  when\n\teval(abc(\"foo\") + 5)\n\tFoo()\n\teval(qed())\n\tBar()\n  then\n\tKapow\n\tPoof\n\t\nend"
 		Object retval = execParser("compilation_unit", "\nrule simple_rule \n  when\n\teval(abc(\"foo\") + 5)\n\tFoo()\n\teval(qed())\n\tBar()\n  then\n\tKapow\n\tPoof\n\t\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (eval (abc(\"foo\") + 5)) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (eval (qed())) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar)))) then\n\tKapow\n\tPoof\n\t\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (eval (abc(\"foo\") + 5)) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (eval (qed())) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar)))) then\n\tKapow\n\tPoof\n\t\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -401,7 +401,7 @@
 		// test input: "\nrule simple_rule \n  when\n\tFoo()\n\tBar()\n\teval(abc(\"foo\"))\n  then\n\tKapow\n\t\nend"
 		Object retval = execParser("compilation_unit", "\nrule simple_rule \n  when\n\tFoo()\n\tBar()\n\teval(abc(\"foo\"))\n  then\n\tKapow\n\t\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar))) (eval (abc(\"foo\")))) then\n\tKapow\n\t\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar))) (eval (abc(\"foo\")))) then\n\tKapow\n\t\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -410,7 +410,7 @@
 		// test input: "\nrule simple_rule \n  when\n\tFoo(name== (a + b))\n  then\n\tKapow\n\t\nend"
 		Object retval = execParser("compilation_unit", "\nrule simple_rule \n  when\n\tFoo(name== (a + b))\n  then\n\tKapow\n\t\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== (a + b)))))) then\n\tKapow\n\t\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== (a + b)))))) then\n\tKapow\n\t\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -419,7 +419,7 @@
 		// test input: "\nrule simple_rule \n  when\n  \tPerson( $age2:age -> ($age2 == $age1+2 ) ) \n  then\n\tfoo bar\nend"
 		Object retval = execParser("compilation_unit", "\nrule simple_rule \n  when\n  \tPerson( $age2:age -> ($age2 == $age1+2 ) ) \n  then\n\tfoo bar\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age2 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)))) (-> ($age2 == $age1+2 ))))) then\n\tfoo bar\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age2 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)))) (-> ($age2 == $age1+2 ))))) then\n\tfoo bar\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -428,7 +428,7 @@
 		// test input: "package org.drools.test;\n\nimport org.drools.Cheese;\n\nglobal java.util.List list;\nglobal java.lang.Integer five;\n\nrule \"not rule test\"\n    when\n        $person : Person( $likes:like )\n        not Cheese( type == $likes )\n    then\n\t\tlist.add( $person );\nend    "
 		Object retval = execParser("compilation_unit", "package org.drools.test;\n\nimport org.drools.Cheese;\n\nglobal java.util.List list;\nglobal java.lang.Integer five;\n\nrule \"not rule test\"\n    when\n        $person : Person( $likes:like )\n        not Cheese( type == $likes )\n    then\n\t\tlist.add( $person );\nend    ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (global (VT_DATA_TYPE java util List) list) (global (VT_DATA_TYPE java lang Integer) five) (rule \"not rule test\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT like))))))) (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))) then\n\t\tlist.add( $person );\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (global (VT_DATA_TYPE java util List) list) (global (VT_DATA_TYPE java lang Integer) five) (rule \"not rule test\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT like))))))) (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))) then\n\t\tlist.add( $person );\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -437,7 +437,7 @@
 		// test input: "package org.drools.test;\n\nimport org.drools.Cheese;\n\nglobal java.lang.String foo\nglobal java.lang.Integer bar;\n\nrule baz\n    when\n        Cheese( )\n    then\n\nend    "
 		Object retval = execParser("compilation_unit", "package org.drools.test;\n\nimport org.drools.Cheese;\n\nglobal java.lang.String foo\nglobal java.lang.Integer bar;\n\nrule baz\n    when\n        Cheese( )\n    then\n\nend    ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (global (VT_DATA_TYPE java lang String) foo) (global (VT_DATA_TYPE java lang Integer) bar) (rule baz when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese)))) then\n\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (global (VT_DATA_TYPE java lang String) foo) (global (VT_DATA_TYPE java lang Integer) bar) (rule baz when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese)))) then\n\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -464,7 +464,7 @@
 		// test input: "\n\n\nrule simple_rule \n\t\t#attributes keywork (and colon) is totally optional\n\t\tsalience 42\n\t\tagenda-group \"my_group\"\n\t\tno-loop \n\t\tduration 42\n\t\tactivation-group \"my_activation_group\"\n\t\tlock-on-active true\n\twhen\n\t\tFoo()\n\tthen\n\t\tbar();\nend"
 		Object retval = execParser("compilation_unit", "\n\n\nrule simple_rule \n\t\t#attributes keywork (and colon) is totally optional\n\t\tsalience 42\n\t\tagenda-group \"my_group\"\n\t\tno-loop \n\t\tduration 42\n\t\tactivation-group \"my_activation_group\"\n\t\tlock-on-active true\n\twhen\n\t\tFoo()\n\tthen\n\t\tbar();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule (VT_RULE_ATTRIBUTES (salience 42) (agenda-group \"my_group\") no-loop (duration 42) (activation-group \"my_activation_group\") (lock-on-active true)) when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo)))) then\n\t\tbar();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule (VT_RULE_ATTRIBUTES (salience 42) (agenda-group \"my_group\") no-loop (duration 42) (activation-group \"my_activation_group\") (lock-on-active true)) when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo)))) then\n\t\tbar();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -473,7 +473,7 @@
 		// test input: "\n\n\nrule simple_rule \n\tattributes: \n\t\tsalience 42, agenda-group \"my_group\", no-loop,  lock-on-active, duration 42, activation-group \"my_activation_group\"\n\twhen\n\t\tFoo()\n\tthen\n\t\tbar();\nend"
 		Object retval = execParser("compilation_unit", "\n\n\nrule simple_rule \n\tattributes: \n\t\tsalience 42, agenda-group \"my_group\", no-loop,  lock-on-active, duration 42, activation-group \"my_activation_group\"\n\twhen\n\t\tFoo()\n\tthen\n\t\tbar();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule (VT_RULE_ATTRIBUTES attributes (salience 42) (agenda-group \"my_group\") no-loop lock-on-active (duration 42) (activation-group \"my_activation_group\")) when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo)))) then\n\t\tbar();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule (VT_RULE_ATTRIBUTES attributes (salience 42) (agenda-group \"my_group\") no-loop lock-on-active (duration 42) (activation-group \"my_activation_group\")) when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo)))) then\n\t\tbar();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -482,7 +482,7 @@
 		// test input: "\nrule simple_rule \n  when\n  \tFoo(bar == Foo.BAR)\n  then\nend"
 		Object retval = execParser("compilation_unit", "\nrule simple_rule \n  when\n  \tFoo(bar == Foo.BAR)\n  then\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT Foo) (VT_ACCESSOR_ELEMENT BAR))))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT Foo) (VT_ACCESSOR_ELEMENT BAR))))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -500,7 +500,7 @@
 		// test input: "\nrule \"another test\"\n    when\n        s : String()\n        eval(s.equals(\"foo\") && s.startsWith(\"f\"))\n        \n        \n    then\n        list.add( s );\nend "
 		Object retval = execParser("compilation_unit", "\nrule \"another test\"\n    when\n        s : String()\n        eval(s.equals(\"foo\") && s.startsWith(\"f\"))\n        \n        \n    then\n        list.add( s );\nend ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"another test\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING s (VT_FACT (VT_DATA_TYPE String)))) (eval (s.equals(\"foo\") && s.startsWith(\"f\")))) then\n        list.add( s );\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"another test\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING s (VT_FACT (VT_PATTERN_TYPE String)))) (eval (s.equals(\"foo\") && s.startsWith(\"f\")))) then\n        list.add( s );\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -509,7 +509,7 @@
 		// test input: "package nesting;\n\n\n\n\nrule \"test something\"\n\n\twhen\n\t\tp: Person( name soundslike \"Michael\" )\n\tthen\n\t\tp.name = \"goober\"\n\t\tSystem.out.println(p.name)\nend"
 		Object retval = execParser("compilation_unit", "package nesting;\n\n\n\n\nrule \"test something\"\n\n\twhen\n\t\tp: Person( name soundslike \"Michael\" )\n\tthen\n\t\tp.name = \"goober\"\n\t\tSystem.out.println(p.name)\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID nesting)) (rule \"test something\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING p (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (soundslike \"Michael\")))))) then\n\t\tp.name = \"goober\"\n\t\tSystem.out.println(p.name)\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID nesting)) (rule \"test something\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING p (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (soundslike \"Michael\")))))) then\n\t\tp.name = \"goober\"\n\t\tSystem.out.println(p.name)\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -545,7 +545,7 @@
 		// test input: "\nrule simple_rule \n  when\n\tFoo()\n\tBar()\n\teval(\n\t\n\t\n\t\n\t       abc(\n\t       \n\t       \"foo\") + \n\t       5\n\t       \n\t       \n\t       \n\t        \n\t       )\n  then\n\tKapow\n\tPoof\n\t\nend"
 		Object retval = execParser("compilation_unit", "\nrule simple_rule \n  when\n\tFoo()\n\tBar()\n\teval(\n\t\n\t\n\t\n\t       abc(\n\t       \n\t       \"foo\") + \n\t       5\n\t       \n\t       \n\t       \n\t        \n\t       )\n  then\n\tKapow\n\tPoof\n\t\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar))) (eval (\n\t\n\t\n\t\n\t       abc(\n\t       \n\t       \"foo\") + \n\t       5\n\t       \n\t       \n\t       \n\t        \n\t       ))) then\n\tKapow\n\tPoof\n\t\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar))) (eval (\n\t\n\t\n\t\n\t       abc(\n\t       \n\t       \"foo\") + \n\t       5\n\t       \n\t       \n\t       \n\t        \n\t       ))) then\n\tKapow\n\tPoof\n\t\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -563,7 +563,7 @@
 		// test input: "\n\n\nrule simple_rule \n  when\n\tFoo(\n\t  bar == baz, la==laz\n\t  )\n  then\n\tKapow\n\tPoof\nend\n\t"
 		Object retval = execParser("compilation_unit", "\n\n\nrule simple_rule \n  when\n\tFoo(\n\t  bar == baz, la==laz\n\t  )\n  then\n\tKapow\n\tPoof\nend\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT baz)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT la)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT laz))))))) then\n\tKapow\n\tPoof\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT baz)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT la)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT laz))))))) then\n\tKapow\n\tPoof\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -572,7 +572,7 @@
 		// test input: "package org.drools.test;\n\nrule \"Who likes Stilton\"\n    when\n        com.cheeseco.Cheese($type : type == \"stilton\")\n    then\n        System.out.println( $name + \" likes \" + $type);\nend    "
 		Object retval = execParser("compilation_unit", "package org.drools.test;\n\nrule \"Who likes Stilton\"\n    when\n        com.cheeseco.Cheese($type : type == \"stilton\")\n    then\n        System.out.println( $name + \" likes \" + $type);\nend    ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (rule \"Who likes Stilton\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE com cheeseco Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n        System.out.println( $name + \" likes \" + $type);\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (rule \"Who likes Stilton\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE com cheeseco Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\")))))) then\n        System.out.println( $name + \" likes \" + $type);\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -581,7 +581,7 @@
 		// test input: "rule \"AccumulateParserTest\"\nwhen\n     Integer() from accumulate( Person( age > 21 ),\n                                init( int x = 0; ),\n                                action( x++; ),\n                                result( new Integer(x) ) );\nthen\nend"
 		Object retval = execParser("compilation_unit", "rule \"AccumulateParserTest\"\nwhen\n     Integer() from accumulate( Person( age > 21 ),\n                                init( int x = 0; ),\n                                action( x++; ),\n                                result( new Integer(x) ) );\nthen\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -590,7 +590,7 @@
 		// test input: "rule \"AccumulateParserTest\"\nwhen\n     $counter:Integer() from accumulate( $person : Person( age > 21 ),\n                                         init( int x = 0; ),\n                                         action( x++; ),\n                                         result( new Integer(x) ) );\nthen\nend"
 		Object retval = execParser("compilation_unit", "rule \"AccumulateParserTest\"\nwhen\n     $counter:Integer() from accumulate( $person : Person( age > 21 ),\n                                         init( int x = 0; ),\n                                         action( x++; ),\n                                         result( new Integer(x) ) );\nthen\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_DATA_TYPE Integer)))) (accumulate (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_PATTERN_TYPE Integer)))) (accumulate (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -599,7 +599,7 @@
 		// test input: "rule \"CollectParserTest\"\nwhen\n     $personList : ArrayList() from collect( Person( age > 21 ) );\nthen\nend"
 		Object retval = execParser("compilation_unit", "rule \"CollectParserTest\"\nwhen\n     $personList : ArrayList() from collect( Person( age > 21 ) );\nthen\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"CollectParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (collect (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"CollectParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (collect (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -608,7 +608,7 @@
 		// test input: "rule \"test_Quotes\"\n   when\n      InitialFact()\n   then\n      String s = \"\\\"\\n\\t\\\\\";\nend "
 		Object retval = execParser("compilation_unit", "rule \"test_Quotes\"\n   when\n      InitialFact()\n   then\n      String s = \"\\\"\\n\\t\\\\\";\nend ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"test_Quotes\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE InitialFact)))) then\n      String s = \"\\\"\\n\\t\\\\\";\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"test_Quotes\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE InitialFact)))) then\n      String s = \"\\\"\\n\\t\\\\\";\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -617,7 +617,7 @@
 		// test input: "rule \"test nested CEs\"\t\n\twhen\n\t    not ( State( $state : state ) and\n\t          not( Person( status == $state, $likes : likes ) and\n\t               Cheese( type == $likes ) ) )\n\t    Person( name == \"Bob\" )\n\t    ( Cheese( price == 10 ) or Cheese( type == \"brie\" ) )\n\tthen \n\t\tresults.add(\"OK\");\t\t\nend"
 		Object retval = execParser("compilation_unit", "rule \"test nested CEs\"\t\n\twhen\n\t    not ( State( $state : state ) and\n\t          not( Person( status == $state, $likes : likes ) and\n\t               Cheese( type == $likes ) ) )\n\t    Person( name == \"Bob\" )\n\t    ( Cheese( price == 10 ) or Cheese( type == \"brie\" ) )\n\tthen \n\t\tresults.add(\"OK\");\t\t\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"test nested CEs\" when (VT_AND_IMPLICIT (not (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE State) (VT_BIND_FIELD $state (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT state)))))) (not (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT status)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $state)))) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Bob\")))) (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"brie\")))))) then \n!
 \t\tresults.add(\"OK\");\t\t\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"test nested CEs\" when (VT_AND_IMPLICIT (not (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE State) (VT_BIND_FIELD $state (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT state)))))) (not (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT status)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $state)))) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Bob\")))) (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"br!
 ie\")))))) then \n\t\tresults.add(\"OK\");\t\t\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -626,7 +626,7 @@
 		// test input: "rule \"ForallParserTest\"\nwhen\n     forall( Person( age > 21, $likes : likes )\n             Cheese( type == $likes ) );\nthen\nend"
 		Object retval = execParser("compilation_unit", "rule \"ForallParserTest\"\nwhen\n     forall( Person( age > 21, $likes : likes )\n             Cheese( type == $likes ) );\nthen\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"ForallParserTest\" when (VT_AND_IMPLICIT (forall (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"ForallParserTest\" when (VT_AND_IMPLICIT (forall (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -635,7 +635,7 @@
 		// test input: "#testing 'in' operator\n\nrule simple_rule \n  when\n  \tPerson(age > 30 && < 40)\n  \tVehicle(type in ( \"sedan\", \"wagon\" ), age < 3)\n  then\n\tconsequence();\nend"
 		Object retval = execParser("compilation_unit", "#testing 'in' operator\n\nrule simple_rule \n  when\n  \tPerson(age > 30 && < 40)\n  \tVehicle(type in ( \"sedan\", \"wagon\" ), age < 3)\n  then\n\tconsequence();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in \"sedan\" \"wagon\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then\n\tconsequence();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in \"sedan\" \"wagon\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then\n\tconsequence();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -644,7 +644,7 @@
 		// test input: "#testing not 'in' operator\n\nrule simple_rule \n  when\n  \tPerson(age > 30 && < 40)\n  \tVehicle(type not in ( \"sedan\", \"wagon\" ), age < 3)\n  then\n\tconsequence();\nend"
 		Object retval = execParser("compilation_unit", "#testing not 'in' operator\n\nrule simple_rule \n  when\n  \tPerson(age > 30 && < 40)\n  \tVehicle(type not in ( \"sedan\", \"wagon\" ), age < 3)\n  then\n\tconsequence();\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in not \"sedan\" \"wagon\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then\n\tconsequence();\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in not \"sedan\" \"wagon\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then\n\tconsequence();\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -653,7 +653,7 @@
 		// test input: "package org.drools;\n\nglobal java.util.List list;\n\nrule \"rule1\"\nwhen\n    Pattern1();\n    Pattern2() from x.y.z;\nthen\n    System.out.println(\"Test\");\nend;\n\nquery \"query1\"\n\tPattern5();\n\tPattern6();\n\tPattern7();\nend;\n\nrule \"rule2\"\nwhen\n    Pattern3();\n    Pattern4() from collect( Pattern5() );\nthen\n    System.out.println(\"Test\");\nend;\n\n\t"
 		Object retval = execParser("compilation_unit", "package org.drools;\n\nglobal java.util.List list;\n\nrule \"rule1\"\nwhen\n    Pattern1();\n    Pattern2() from x.y.z;\nthen\n    System.out.println(\"Test\");\nend;\n\nquery \"query1\"\n\tPattern5();\n\tPattern6();\n\tPattern7();\nend;\n\nrule \"rule2\"\nwhen\n    Pattern3();\n    Pattern4() from collect( Pattern5() );\nthen\n    System.out.println(\"Test\");\nend;\n\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (global (VT_DATA_TYPE java util List) list) (rule \"rule1\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern1))) (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern2))) (VT_FROM_SOURCE x (. y (. z))))) then\n    System.out.println(\"Test\");\nend;) (query \"query1\" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern5))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern6))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern7)))) end) (rule \"rule2\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern3))) (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern4))) (collect (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern5)))))) then\n    System.out.println(\"Test\");\nend;))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (global (VT_DATA_TYPE java util List) list) (rule \"rule1\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern1))) (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern2))) (VT_FROM_SOURCE x (. y (. z))))) then\n    System.out.println(\"Test\");\nend;) (query \"query1\" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern5))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern6))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern7)))) end) (rule \"rule2\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern3))) (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern4))) (collect (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern5)))))) then\n    System.out.println(\"Test\");\nend;))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -671,7 +671,7 @@
 		// test input: "rule \"AccumulateReverseParserTest\"\nwhen\n     Integer() from accumulate( Person( age > 21 ),\n                                init( int x = 0; ),\n                                action( x++; ),\n                                reverse( x--; ),\n                                result( new Integer(x) ) );\nthen\nend"
 		Object retval = execParser("compilation_unit", "rule \"AccumulateReverseParserTest\"\nwhen\n     Integer() from accumulate( Person( age > 21 ),\n                                init( int x = 0; ),\n                                action( x++; ),\n                                reverse( x--; ),\n                                result( new Integer(x) ) );\nthen\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateReverseParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (reverse ( x--; )) (result ( new Integer(x) )))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateReverseParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (reverse ( x--; )) (result ( new Integer(x) )))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -680,7 +680,7 @@
 		// test input: "rule \"AccumulateReverseParserTest\"\nwhen\n     Number() from accumulate( Person( $age : age > 21 ),\n                               average( $age ) );\nthen\nend"
 		Object retval = execParser("compilation_unit", "rule \"AccumulateReverseParserTest\"\nwhen\n     Number() from accumulate( Person( $age : age > 21 ),\n                               average( $age ) );\nthen\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateReverseParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Number))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_ID_CLAUSE average ( $age ))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateReverseParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Number))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_ID_CLAUSE average ( $age ))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -689,7 +689,7 @@
 		// test input: "rule \"CollectParserTest\"\nwhen\n     #bellow statement makes no sense, but is useful to test parsing recursiveness\n     $personList : ArrayList() from collect( $p : Person( age > 21 || age < 10 ) from collect( People() from $town.getPeople() ) );\nthen\nend\n\n\t"
 		Object retval = execParser("compilation_unit", "rule \"CollectParserTest\"\nwhen\n     #bellow statement makes no sense, but is useful to test parsing recursiveness\n     $personList : ArrayList() from collect( $p : Person( age > 21 || age < 10 ) from collect( People() from $town.getPeople() ) );\nthen\nend\n\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"CollectParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (collect (from (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_DATA_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ())))))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"CollectParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (collect (from (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_PATTERN_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ())))))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -698,7 +698,7 @@
 		// test input: "rule \"AccumulateParserTest\"\nwhen\n     #bellow statement makes no sense, but is useful to test parsing recursiveness\n     $personList : ArrayList() from accumulate( Person( $age : age > 21 || < 10 ) from collect( People() from $town.getPeople() ),\n                                                max( $age ) );\nthen\nend\n\n\t"
 		Object retval = execParser("compilation_unit", "rule \"AccumulateParserTest\"\nwhen\n     #bellow statement makes no sense, but is useful to test parsing recursiveness\n     $personList : ArrayList() from accumulate( Person( $age : age > 21 || < 10 ) from collect( People() from $town.getPeople() ),\n                                                max( $age ) );\nthen\nend\n\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (accumulate (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (> 21) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))) (VT_ACCUMULATE_ID_CLAUSE max ( $age ))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (accumulate (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (> 21) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))) (VT_ACCUMULATE_ID_CLAUSE max ( $age ))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -707,7 +707,7 @@
 		// test input: "package org.drools;\n\nrule \"testing OR CE\"\nwhen\n    $p : Person( name == \"bob\" )\n    $c : Cheese( type == $p.likes ) || Cheese( price == 10 )\nthen\n    // do something\nend "
 		Object retval = execParser("compilation_unit", "package org.drools;\n\nrule \"testing OR CE\"\nwhen\n    $p : Person( name == \"bob\" )\n    $c : Cheese( type == $p.likes ) || Cheese( price == 10 )\nthen\n    // do something\nend ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (rule \"testing OR CE\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"bob\"))))) (|| (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $p) (VT_ACCESSOR_ELEMENT likes))))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))))) then\n    // do something\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (rule \"testing OR CE\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"bob\"))))) (|| (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $p) (VT_ACCESSOR_ELEMENT likes))))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))))) then\n    // do something\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -734,7 +734,7 @@
 		// test input: "rule \"AccumulateMultiPatternParserTest\"\nwhen\n     $counter:Integer() from accumulate( $person : Person( age > 21 ) and Cheese( type == $person.likes ),\n                                         init( int x = 0; ),\n                                         action( x++; ),\n                                         result( new Integer(x) ) );\nthen\nend"
 		Object retval = execParser("compilation_unit", "rule \"AccumulateMultiPatternParserTest\"\nwhen\n     $counter:Integer() from accumulate( $person : Person( age > 21 ) and Cheese( type == $person.likes ),\n                                         init( int x = 0; ),\n                                         action( x++; ),\n                                         result( new Integer(x) ) );\nthen\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateMultiPatternParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_DATA_TYPE Integer)))) (accumulate (and (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $person) (VT_ACCESSOR_ELEMENT likes))))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (rule \"AccumulateMultiPatternParserTest\" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_PATTERN_TYPE Integer)))) (accumulate (and (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $person) (VT_ACCESSOR_ELEMENT likes))))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -761,7 +761,7 @@
 		// test input: "package org.drools;\n\nrule \"test pluggable operators\"\nwhen\n    $a : EventA()\n    $b : EventB( this after[1,10] $a )\n    $c : EventC( this finishes $b )\n    $d : EventD( this not starts $a )\n    $e : EventE( this not before [1, 10] $b )\nthen\nend"
 		Object retval = execParser("compilation_unit", "package org.drools;\n\nrule \"test pluggable operators\"\nwhen\n    $a : EventA()\n    $b : EventB( this after[1,10] $a )\n    $c : EventC( this finishes $b )\n    $d : EventD( this not starts $a )\n    $e : EventE( this not before [1, 10] $b )\nthen\nend", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (rule \"test pluggable operators\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $a (VT_FACT (VT_DATA_TYPE EventA)))) (VT_PATTERN (VT_FACT_BINDING $b (VT_FACT (VT_DATA_TYPE EventB) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (after [1,10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_DATA_TYPE EventC) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (finishes (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))) (VT_PATTERN (VT_FACT_BINDING $d (VT_FACT (VT_DATA_TYPE EventD) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (starts not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $e (VT_FACT (VT_DATA_TYPE EventE) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (before not [1, 10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b)))))))) then\nend))";
+		Object expecting = "(VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (rule \"test pluggable operators\" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $a (VT_FACT (VT_PATTERN_TYPE EventA)))) (VT_PATTERN (VT_FACT_BINDING $b (VT_FACT (VT_PATTERN_TYPE EventB) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (after [1,10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_PATTERN_TYPE EventC) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (finishes (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))) (VT_PATTERN (VT_FACT_BINDING $d (VT_FACT (VT_PATTERN_TYPE EventD) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (starts not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $e (VT_FACT (VT_PATTERN_TYPE EventE) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (before not [1, 10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b)))))))) then\nend))";
 
 		assertEquals("testing rule "+"compilation_unit", expecting, actual);
 	}
@@ -770,7 +770,7 @@
 		// test input: "StockTick( symbol==\"ACME\") from entry-point StreamA"
 		Object retval = execParser("pattern_source", "StockTick( symbol==\"ACME\") from entry-point StreamA", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(from (VT_PATTERN (VT_FACT (VT_DATA_TYPE StockTick) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT symbol)) (== \"ACME\")))) (entry-point StreamA))";
+		Object expecting = "(from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE StockTick) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT symbol)) (== \"ACME\")))) (entry-point StreamA))";
 
 		assertEquals("testing rule "+"pattern_source", expecting, actual);
 	}
@@ -824,7 +824,7 @@
 		// test input: " $id : Something( duration == \"foo\") "
 		Object retval = execParser("normal_lhs_block", " $id : Something( duration == \"foo\") ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $id (VT_FACT (VT_DATA_TYPE Something) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT duration)) (== \"foo\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $id (VT_FACT (VT_PATTERN_TYPE Something) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT duration)) (== \"foo\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -842,7 +842,7 @@
 		// test input: "\n\tCheese(name == \"Stilton\", age==2001)\n\tWine(name == \"Grange\", age == \"1978\", accolades contains \"world champion\")\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tCheese(name == \"Stilton\", age==2001)\n\tWine(name == \"Grange\", age == \"1978\", accolades contains \"world champion\")\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Stilton\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 2001)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Wine) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Grange\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== \"1978\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT accolades)) (contains \"world champion\")))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Stilton\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 2001)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Wine) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Grange\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== \"1978\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT accolades)) (contains \"world champion\")))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -851,7 +851,7 @@
 		// test input: "Foo()"
 		Object retval = execParser("normal_lhs_block", "Foo()", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -860,7 +860,7 @@
 		// test input: "not Cheese(type == \"stilton\")"
 		Object retval = execParser("normal_lhs_block", "not Cheese(type == \"stilton\")", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -869,7 +869,7 @@
 		// test input: "\n\tPerson(age < 42, location==\"atlanta\") \n\tor\n\tPerson(name==\"bob\")\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tPerson(age < 42, location==\"atlanta\") \n\tor\n\tPerson(name==\"bob\")\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"atlanta\")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"bob\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"atlanta\")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"bob\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -878,7 +878,7 @@
 		// test input: "\n\tFoo(bar == false)\n\tFoo(boo > -42)\n\tFoo(boo > -42.42)\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tFoo(bar == false)\n\tFoo(boo > -42)\n\tFoo(boo > -42.42)\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== false)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42.42)))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== false)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42.42)))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -887,7 +887,7 @@
 		// test input: "Cheese( )"
 		Object retval = execParser("normal_lhs_block", "Cheese( )", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -896,7 +896,7 @@
 		// test input: "\n\tCol1() from something.doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )\n\tCol2()\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tCol1() from something.doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )\n\tCol2()\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -905,7 +905,7 @@
 		// test input: "\n\tCol1() from doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )\n\tCol2()\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tCol1() from doIt( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] )\n\tCol2()\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE doIt ( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] ))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE doIt ( foo,bar,42,\"hello\",{ a => \"b\", \"something\" => 42, \"a\" => foo, x => {x=>y}},\"end\", [a, \"b\", 42] ))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -914,7 +914,7 @@
 		// test input: "\n\tCol1() from something.doIt\n\tCol2()\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tCol1() from something.doIt\n\tCol2()\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -923,7 +923,7 @@
 		// test input: "\n\tCol1() from something.doIt[\"key\"]\n\tCol2()\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tCol1() from something.doIt[\"key\"]\n\tCol2()\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt [\"key\"]))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt [\"key\"]))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -932,7 +932,7 @@
 		// test input: "\n\tCol1() from doIt1( foo,bar,42,\"hello\",{ a => \"b\"}, [a, \"b\", 42] )\n\t            .doIt2(bar, [a, \"b\", 42]).field[\"key\"]\n\tCol2()\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tCol1() from doIt1( foo,bar,42,\"hello\",{ a => \"b\"}, [a, \"b\", 42] )\n\t            .doIt2(bar, [a, \"b\", 42]).field[\"key\"]\n\tCol2()\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE doIt1 ( foo,bar,42,\"hello\",{ a => \"b\"}, [a, \"b\", 42] ) (. doIt2 (bar, [a, \"b\", 42]) (. field [\"key\"])))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE doIt1 ( foo,bar,42,\"hello\",{ a => \"b\"}, [a, \"b\", 42] ) (. doIt2 (bar, [a, \"b\", 42]) (. field [\"key\"])))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -941,7 +941,7 @@
 		// test input: "\n\tfoo3 : Bar(a==3)\n    foo4 : Bar(a4:a==4)\n    Baz()\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tfoo3 : Bar(a==3)\n    foo4 : Bar(a4:a==4)\n    Baz()\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -950,7 +950,7 @@
 		// test input: "\n\tPerson(age > 30 && < 40)\n  \tVehicle(type == \"sedan\" || == \"wagon\", age < 3)\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tPerson(age > 30 && < 40)\n  \tVehicle(type == \"sedan\" || == \"wagon\", age < 3)\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (|| (== \"sedan\") (== \"wagon\"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (|| (== \"sedan\") (== \"wagon\"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -959,7 +959,7 @@
 		// test input: "    foo3 : Bar(a==3) ; foo4 : Bar(a4:a==4) ; Baz()"
 		Object retval = execParser("normal_lhs_block", "    foo3 : Bar(a==3) ; foo4 : Bar(a4:a==4) ; Baz()", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -968,7 +968,7 @@
 		// test input: "\n  \tnot ( Cheese(type == \"stilton\") )\n  \texists ( Foo() )\n  \t"
 		Object retval = execParser("normal_lhs_block", "\n  \tnot ( Cheese(type == \"stilton\") )\n  \texists ( Foo() )\n  \t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (exists (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo)))))";
+		Object expecting = "(VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (exists (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo)))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -977,7 +977,7 @@
 		// test input: "\n  \tnot ( Cheese(type == \"stilton\") )\n  \texists ( Foo() )\n\t"
 		Object retval = execParser("normal_lhs_block", "\n  \tnot ( Cheese(type == \"stilton\") )\n  \texists ( Foo() )\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (exists (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo)))))";
+		Object expecting = "(VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (exists (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo)))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -995,7 +995,7 @@
 		// test input: " Cheese( t:type == \"cheddar\" ) "
 		Object retval = execParser("normal_lhs_block", " Cheese( t:type == \"cheddar\" ) ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"cheddar\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"cheddar\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1004,7 +1004,7 @@
 		// test input: "Cheese( $type:type )"
 		Object retval = execParser("normal_lhs_block", "Cheese( $type:type )", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1013,7 +1013,7 @@
 		// test input: "\n        Cheese($type : type == \"stilton\")\n        $person : Person($name : name == \"bob\", likes == $type)        \n\t"
 		Object retval = execParser("normal_lhs_block", "\n        Cheese($type : type == \"stilton\")\n        $person : Person($name : name == \"bob\", likes == $type)        \n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $name (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"bob\"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $type))))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $name (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"bob\"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $type))))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1022,7 +1022,7 @@
 		// test input: "\n\tPerson(name == \"mark\") or \n\t( Person(type == \"fan\") and Cheese(type == \"green\") )\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tPerson(name == \"mark\") or \n\t( Person(type == \"fan\") and Cheese(type == \"green\") )\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"green\")))))))";
+		Object expecting = "(VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"green\")))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1031,7 +1031,7 @@
 		// test input: "\n\tPerson(name == \"mark\") && Cheese(type == \"stilton\")\n    Person(name == \"mark\") || Cheese(type == \"stilton\")\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tPerson(name == \"mark\") && Cheese(type == \"stilton\")\n    Person(name == \"mark\") || Cheese(type == \"stilton\")\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (&& (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (|| (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (&& (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))) (|| (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1040,7 +1040,7 @@
 		// test input: "\n\tfoo :  ( Person(name == \"mark\") or Person(type == \"fan\") ) \n\tCheese(type == \"green\")\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tfoo :  ( Person(name == \"mark\") or Person(type == \"fan\") ) \n\tCheese(type == \"green\")\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"green\")))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"green\")))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1049,7 +1049,7 @@
 		// test input: "\n\tfoo : ( Person(name == \"mark\") \n\t\tor \n\t\tPerson(type == \"fan\") )\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tfoo : ( Person(name == \"mark\") \n\t\tor \n\t\tPerson(type == \"fan\") )\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1058,7 +1058,7 @@
 		// test input: "\n\tfoo : ( \n\t\tPerson(name == \"mark\") or Person(type == \"fan\") \n\t\t)\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tfoo : ( \n\t\tPerson(name == \"mark\") or Person(type == \"fan\") \n\t\t)\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"mark\"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"fan\")))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1067,7 +1067,7 @@
 		// test input: "\n\t ( (not Foo(x==\"a\") or Foo(x==\"y\") ) and ( Shoes() or Butt() ) )\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\t ( (not Foo(x==\"a\") or Foo(x==\"y\") ) and ( Shoes() or Butt() ) )\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (and (or (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== \"a\"))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== \"y\"))))) (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Shoes))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Butt))))))";
+		Object expecting = "(VT_AND_IMPLICIT (and (or (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== \"a\"))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== \"y\"))))) (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Shoes))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Butt))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1076,7 +1076,7 @@
 		// test input: "\n\teval(abc(\"foo\") + 5)\n\tFoo()\n\teval(qed())\n\tBar()\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\teval(abc(\"foo\") + 5)\n\tFoo()\n\teval(qed())\n\tBar()\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (eval (abc(\"foo\") + 5)) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (eval (qed())) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar))))";
+		Object expecting = "(VT_AND_IMPLICIT (eval (abc(\"foo\") + 5)) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (eval (qed())) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1085,7 +1085,7 @@
 		// test input: "\n\tFoo()\n\tBar()\n\teval(abc(\"foo\"))\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tFoo()\n\tBar()\n\teval(abc(\"foo\"))\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar))) (eval (abc(\"foo\"))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar))) (eval (abc(\"foo\"))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1094,7 +1094,7 @@
 		// test input: "Foo(name== (a + b))"
 		Object retval = execParser("normal_lhs_block", "Foo(name== (a + b))", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== (a + b))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== (a + b))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1103,7 +1103,7 @@
 		// test input: "Person( $age2:age -> ($age2 == $age1+2 ) )"
 		Object retval = execParser("normal_lhs_block", "Person( $age2:age -> ($age2 == $age1+2 ) )", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age2 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)))) (-> ($age2 == $age1+2 )))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age2 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)))) (-> ($age2 == $age1+2 )))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1112,7 +1112,7 @@
 		// test input: "Foo(bar == Foo.BAR)"
 		Object retval = execParser("normal_lhs_block", "Foo(bar == Foo.BAR)", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT Foo) (VT_ACCESSOR_ELEMENT BAR)))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT Foo) (VT_ACCESSOR_ELEMENT BAR)))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1121,7 +1121,7 @@
 		// test input: "\n\tp: Person( name soundslike \"Michael\" )\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tp: Person( name soundslike \"Michael\" )\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING p (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (soundslike \"Michael\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING p (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (soundslike \"Michael\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1130,7 +1130,7 @@
 		// test input: "\n\tFoo()\n\tBar()\n\teval(\n\t\n\t\n\t\n\t       abc(\n\t       \n\t       \"foo\") + \n\t       5\n\t       \n\t       \n\t       \n\t        \n\t       )\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tFoo()\n\tBar()\n\teval(\n\t\n\t\n\t\n\t       abc(\n\t       \n\t       \"foo\") + \n\t       5\n\t       \n\t       \n\t       \n\t        \n\t       )\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar))) (eval (\n\t\n\t\n\t\n\t       abc(\n\t       \n\t       \"foo\") + \n\t       5\n\t       \n\t       \n\t       \n\t        \n\t       )))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar))) (eval (\n\t\n\t\n\t\n\t       abc(\n\t       \n\t       \"foo\") + \n\t       5\n\t       \n\t       \n\t       \n\t        \n\t       )))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1148,7 +1148,7 @@
 		// test input: "\n\tFoo(\n\t  bar == baz, la==laz\n\t  )\n\t "
 		Object retval = execParser("normal_lhs_block", "\n\tFoo(\n\t  bar == baz, la==laz\n\t  )\n\t ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT baz)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT la)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT laz)))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT baz)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT la)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT laz)))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1157,7 +1157,7 @@
 		// test input: "com.cheeseco.Cheese($type : type == \"stilton\")"
 		Object retval = execParser("normal_lhs_block", "com.cheeseco.Cheese($type : type == \"stilton\")", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE com cheeseco Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE com cheeseco Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"stilton\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1166,7 +1166,7 @@
 		// test input: "\n\t     Integer() from accumulate( Person( age > 21 ),\n                                init( int x = 0; ),\n                                action( x++; ),\n                                result( new Integer(x) ) );\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\t     Integer() from accumulate( Person( age > 21 ),\n                                init( int x = 0; ),\n                                action( x++; ),\n                                result( new Integer(x) ) );\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1175,7 +1175,7 @@
 		// test input: "\n     $counter:Integer() from accumulate( $person : Person( age > 21 ),\n                                         init( int x = 0; ),\n                                         action( x++; ),\n                                         result( new Integer(x) ) );\n\t"
 		Object retval = execParser("normal_lhs_block", "\n     $counter:Integer() from accumulate( $person : Person( age > 21 ),\n                                         init( int x = 0; ),\n                                         action( x++; ),\n                                         result( new Integer(x) ) );\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_DATA_TYPE Integer)))) (accumulate (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_PATTERN_TYPE Integer)))) (accumulate (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1184,7 +1184,7 @@
 		// test input: "$personList : ArrayList() from collect( Person( age > 21 ) );"
 		Object retval = execParser("normal_lhs_block", "$personList : ArrayList() from collect( Person( age > 21 ) );", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (collect (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (collect (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1193,7 +1193,7 @@
 		// test input: "\n\t\tnot ( State( $state : state ) and\n\t          not( Person( status == $state, $likes : likes ) and\n\t               Cheese( type == $likes ) ) )\n\t    Person( name == \"Bob\" )\n\t    ( Cheese( price == 10 ) or Cheese( type == \"brie\" ) )\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\t\tnot ( State( $state : state ) and\n\t          not( Person( status == $state, $likes : likes ) and\n\t               Cheese( type == $likes ) ) )\n\t    Person( name == \"Bob\" )\n\t    ( Cheese( price == 10 ) or Cheese( type == \"brie\" ) )\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (not (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE State) (VT_BIND_FIELD $state (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT state)))))) (not (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT status)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $state)))) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Bob\")))) (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"brie\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (not (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE State) (VT_BIND_FIELD $state (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT state)))))) (not (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT status)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $state)))) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"Bob\")))) (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== \"brie\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1202,7 +1202,7 @@
 		// test input: "\n     forall( Person( age > 21, $likes : likes )\n             Cheese( type == $likes ) );\n\t"
 		Object retval = execParser("normal_lhs_block", "\n     forall( Person( age > 21, $likes : likes )\n             Cheese( type == $likes ) );\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (forall (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes))))))))";
+		Object expecting = "(VT_AND_IMPLICIT (forall (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes))))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1211,7 +1211,7 @@
 		// test input: "\n     Country( $cities : city )\n     Person( city memberOf $cities )\n    "
 		Object retval = execParser("normal_lhs_block", "\n     Country( $cities : city )\n     Person( city memberOf $cities )\n    ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Country) (VT_BIND_FIELD $cities (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)) (memberOf (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $cities)))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Country) (VT_BIND_FIELD $cities (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)) (memberOf (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $cities)))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1220,7 +1220,7 @@
 		// test input: "\n     Country( $cities : city )\n     Person( city not memberOf $cities )\n    "
 		Object retval = execParser("normal_lhs_block", "\n     Country( $cities : city )\n     Person( city not memberOf $cities )\n    ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Country) (VT_BIND_FIELD $cities (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)) (memberOf not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $cities)))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Country) (VT_BIND_FIELD $cities (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)) (memberOf not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $cities)))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1229,7 +1229,7 @@
 		// test input: "\n  \tPerson(age > 30 && < 40)\n  \tVehicle(type in ( \"sedan\", \"wagon\" ), age < 3)\n\t"
 		Object retval = execParser("normal_lhs_block", "\n  \tPerson(age > 30 && < 40)\n  \tVehicle(type in ( \"sedan\", \"wagon\" ), age < 3)\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in \"sedan\" \"wagon\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in \"sedan\" \"wagon\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1238,7 +1238,7 @@
 		// test input: "\n  \tPerson(age > 30 && < 40)\n  \tVehicle(type not in ( \"sedan\", \"wagon\" ), age < 3)\n\t"
 		Object retval = execParser("normal_lhs_block", "\n  \tPerson(age > 30 && < 40)\n  \tVehicle(type not in ( \"sedan\", \"wagon\" ), age < 3)\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in not \"sedan\" \"wagon\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in not \"sedan\" \"wagon\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1247,7 +1247,7 @@
 		// test input: " Person( age < 42 && location==\"atlanta\") "
 		Object retval = execParser("normal_lhs_block", " Person( age < 42 && location==\"atlanta\") ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"atlanta\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"atlanta\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1256,7 +1256,7 @@
 		// test input: " Person( age < 42 || location==\"atlanta\") "
 		Object retval = execParser("normal_lhs_block", " Person( age < 42 || location==\"atlanta\") ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"atlanta\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"atlanta\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1265,7 +1265,7 @@
 		// test input: "Person( age < 42 && location==\"atlanta\" || age > 20 && location==\"Seatle\" || location == \"Chicago\")"
 		Object retval = execParser("normal_lhs_block", "Person( age < 42 && location==\"atlanta\" || age > 20 && location==\"Seatle\" || location == \"Chicago\")", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"atlanta\"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 20)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"Seatle\")))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"Chicago\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"atlanta\"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 20)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"Seatle\")))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"Chicago\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1274,7 +1274,7 @@
 		// test input: "Person( age < 42 && ( location==\"atlanta\" || age > 20 && location==\"Seatle\") || location == \"Chicago\")"
 		Object retval = execParser("normal_lhs_block", "Person( age < 42 && ( location==\"atlanta\" || age > 20 && location==\"Seatle\") || location == \"Chicago\")", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"atlanta\")) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 20)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"Seatle\"))))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"Chicago\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"atlanta\")) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 20)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"Seatle\"))))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== \"Chicago\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1283,7 +1283,7 @@
 		// test input: " Person( ( age == 70 && hair == \"black\" ) || ( age == 40 && hair == \"pink\" ) || ( age == 12 && ( hair == \"yellow\" || hair == \"blue\" ) ) ) "
 		Object retval = execParser("normal_lhs_block", " Person( ( age == 70 && hair == \"black\" ) || ( age == 40 && hair == \"pink\" ) || ( age == 12 && ( hair == \"yellow\" || hair == \"blue\" ) ) ) ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 70)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"black\"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 40)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"pink\")))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 12)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"yellow\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"blue\"))))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 70)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"black\"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 40)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"pink\")))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 12)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"yellow\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"blue\"))))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1292,7 +1292,7 @@
 		// test input: " Person( name matches \"mark\" || matches \"bob\" ) "
 		Object retval = execParser("normal_lhs_block", " Person( name matches \"mark\" || matches \"bob\" ) ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (|| (matches \"mark\") (matches \"bob\"))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (|| (matches \"mark\") (matches \"bob\"))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1301,7 +1301,7 @@
 		// test input: "\n\tCity( $city : city )\n\tCountry( cities not contains $city )\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tCity( $city : city )\n\tCountry( cities not contains $city )\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE City) (VT_BIND_FIELD $city (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Country) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT cities)) (contains not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $city)))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE City) (VT_BIND_FIELD $city (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Country) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT cities)) (contains not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $city)))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1310,7 +1310,7 @@
 		// test input: " Message( text not matches '[abc]*' ) "
 		Object retval = execParser("normal_lhs_block", " Message( text not matches '[abc]*' ) ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Message) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT text)) (matches not '[abc]*')))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Message) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT text)) (matches not '[abc]*')))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1319,7 +1319,7 @@
 		// test input: "Foo( bar > 1 || == 1 )"
 		Object retval = execParser("normal_lhs_block", "Foo( bar > 1 || == 1 )", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (|| (> 1) (== 1))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (|| (> 1) (== 1))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1328,7 +1328,7 @@
 		// test input: "\n\tPattern1();\n\tPattern2() from x.y.z;\n\tPattern5();\n\tPattern6();\n\tPattern7();\n\tPattern3();\n\tPattern4() from collect( Pattern5() );\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tPattern1();\n\tPattern2() from x.y.z;\n\tPattern5();\n\tPattern6();\n\tPattern7();\n\tPattern3();\n\tPattern4() from collect( Pattern5() );\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern1))) (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern2))) (VT_FROM_SOURCE x (. y (. z)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern5))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern6))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern7))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern3))) (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern4))) (collect (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern5))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern1))) (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern2))) (VT_FROM_SOURCE x (. y (. z)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern5))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern6))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern7))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern3))) (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern4))) (collect (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern5))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1346,7 +1346,7 @@
 		// test input: "\n\tInteger() from accumulate( Person( age > 21 ),\n\t                           init( int x = 0; ),\n\t                           action( x++; ),\n\t                           reverse( x--; ),\n\t                           result( new Integer(x) ) );\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\tInteger() from accumulate( Person( age > 21 ),\n\t                           init( int x = 0; ),\n\t                           action( x++; ),\n\t                           reverse( x--; ),\n\t                           result( new Integer(x) ) );\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (reverse ( x--; )) (result ( new Integer(x) ))))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (reverse ( x--; )) (result ( new Integer(x) ))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1355,7 +1355,7 @@
 		// test input: "\n     Number() from accumulate( Person( $age : age > 21 ),\n                               average( $age ) );\n\t"
 		Object retval = execParser("normal_lhs_block", "\n     Number() from accumulate( Person( $age : age > 21 ),\n                               average( $age ) );\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Number))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_ID_CLAUSE average ( $age )))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Number))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_ID_CLAUSE average ( $age )))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1364,7 +1364,7 @@
 		// test input: "\n     #bellow statement makes no sense, but is useful to test parsing recursiveness\n     $personList : ArrayList() from collect( $p : Person( age > 21 || age < 10 ) from collect( People() from $town.getPeople() ) );\n\t"
 		Object retval = execParser("normal_lhs_block", "\n     #bellow statement makes no sense, but is useful to test parsing recursiveness\n     $personList : ArrayList() from collect( $p : Person( age > 21 || age < 10 ) from collect( People() from $town.getPeople() ) );\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (collect (from (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_DATA_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (collect (from (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_PATTERN_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1373,7 +1373,7 @@
 		// test input: "\n     $personList : ArrayList() from accumulate( Person( $age : age > 21 || < 10 ) from collect( People() from $town.getPeople() ),\n                                                max( $age ) );\n\t"
 		Object retval = execParser("normal_lhs_block", "\n     $personList : ArrayList() from accumulate( Person( $age : age > 21 || < 10 ) from collect( People() from $town.getPeople() ),\n                                                max( $age ) );\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (accumulate (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (> 21) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))) (VT_ACCUMULATE_ID_CLAUSE max ( $age )))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (accumulate (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (> 21) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))) (VT_ACCUMULATE_ID_CLAUSE max ( $age )))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1382,7 +1382,7 @@
 		// test input: "\n    $p : Person( name == \"bob\" )\n    $c : Cheese( type == $p.likes ) || Cheese( price == 10 )\n    "
 		Object retval = execParser("normal_lhs_block", "\n    $p : Person( name == \"bob\" )\n    $c : Cheese( type == $p.likes ) || Cheese( price == 10 )\n    ", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"bob\"))))) (|| (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $p) (VT_ACCESSOR_ELEMENT likes))))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== \"bob\"))))) (|| (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $p) (VT_ACCESSOR_ELEMENT likes))))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1391,7 +1391,7 @@
 		// test input: "\n\t(or\n\tnot Person()\n\t\t(and Cheese()\n\t\t\tMeat()\n\t\t\tWine()))\n\t"
 		Object retval = execParser("normal_lhs_block", "\n\t(or\n\tnot Person()\n\t\t(and Cheese()\n\t\t\tMeat()\n\t\t\tWine()))\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (or (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person)))) (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Meat))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Wine))))))";
+		Object expecting = "(VT_AND_IMPLICIT (or (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person)))) (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Meat))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Wine))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1400,7 +1400,7 @@
 		// test input: "\n     $counter:Integer() from accumulate( $person : Person( age > 21 ) and Cheese( type == $person.likes ),\n                                         init( int x = 0; ),\n                                         action( x++; ),\n                                         result( new Integer(x) ) );\n\t"
 		Object retval = execParser("normal_lhs_block", "\n     $counter:Integer() from accumulate( $person : Person( age > 21 ) and Cheese( type == $person.likes ),\n                                         init( int x = 0; ),\n                                         action( x++; ),\n                                         result( new Integer(x) ) );\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_DATA_TYPE Integer)))) (accumulate (and (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $person) (VT_ACCESSOR_ELEMENT likes))))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_PATTERN_TYPE Integer)))) (accumulate (and (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $person) (VT_ACCESSOR_ELEMENT likes))))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1409,7 +1409,7 @@
 		// test input: "\n    $a : EventA()\n    $b : EventB( this after[1,10] $a )\n    $c : EventC( this finishes $b )\n    $d : EventD( this not starts $a )\n    $e : EventE( this not before [1, 10] $b )\n\t"
 		Object retval = execParser("normal_lhs_block", "\n    $a : EventA()\n    $b : EventB( this after[1,10] $a )\n    $c : EventC( this finishes $b )\n    $d : EventD( this not starts $a )\n    $e : EventE( this not before [1, 10] $b )\n\t", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $a (VT_FACT (VT_DATA_TYPE EventA)))) (VT_PATTERN (VT_FACT_BINDING $b (VT_FACT (VT_DATA_TYPE EventB) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (after [1,10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_DATA_TYPE EventC) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (finishes (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))) (VT_PATTERN (VT_FACT_BINDING $d (VT_FACT (VT_DATA_TYPE EventD) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (starts not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $e (VT_FACT (VT_DATA_TYPE EventE) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (before not [1, 10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $a (VT_FACT (VT_PATTERN_TYPE EventA)))) (VT_PATTERN (VT_FACT_BINDING $b (VT_FACT (VT_PATTERN_TYPE EventB) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (after [1,10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_PATTERN_TYPE EventC) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (finishes (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))) (VT_PATTERN (VT_FACT_BINDING $d (VT_FACT (VT_PATTERN_TYPE EventD) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (starts not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $e (VT_FACT (VT_PATTERN_TYPE EventE) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (before not [1, 10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1418,7 +1418,7 @@
 		// test input: "StockTick( symbol==\"ACME\") from entry-point StreamA"
 		Object retval = execParser("normal_lhs_block", "StockTick( symbol==\"ACME\") from entry-point StreamA", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE StockTick) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT symbol)) (== \"ACME\")))) (entry-point StreamA)))";
+		Object expecting = "(VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE StockTick) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT symbol)) (== \"ACME\")))) (entry-point StreamA)))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1427,7 +1427,7 @@
 		// test input: "Person( ( age ( > 60 && < 70 ) || ( > 50 && < 55 ) && hair == \"black\" ) || ( age == 40 && hair == \"pink\" ) || ( age == 12 && ( hair == \"yellow\" || hair == \"blue\" ) ))"
 		Object retval = execParser("normal_lhs_block", "Person( ( age ( > 60 && < 70 ) || ( > 50 && < 55 ) && hair == \"black\" ) || ( age == 40 && hair == \"pink\" ) || ( age == 12 && ( hair == \"yellow\" || hair == \"blue\" ) ))", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (&& (> 60) (< 70)) (&& (> 50) (< 55)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"black\"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 40)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"pink\")))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 12)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"yellow\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"blue\"))))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (&& (> 60) (< 70)) (&& (> 50) (< 55)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"black\"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 40)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"pink\")))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 12)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"yellow\")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== \"blue\"))))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}
@@ -1436,7 +1436,7 @@
 		// test input: "org   .   drools/*comment*/\t  .Message( text not matches $c#comment\n. property )\n"
 		Object retval = execParser("normal_lhs_block", "org   .   drools/*comment*/\t  .Message( text not matches $c#comment\n. property )\n", false);
 		Object actual = examineParserExecResult(10, retval);
-		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE org drools Message) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT text)) (matches not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $c) (VT_ACCESSOR_ELEMENT property)))))))";
+		Object expecting = "(VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE org drools Message) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT text)) (matches not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $c) (VT_ACCESSOR_ELEMENT property)))))))";
 
 		assertEquals("testing rule "+"normal_lhs_block", expecting, actual);
 	}

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java	2008-05-20 12:50:33 UTC (rev 20081)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java	2008-05-20 13:44:37 UTC (rev 20082)
@@ -1,140 +1,137 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g 2008-05-19 14:24:33
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g 2008-05-19 18:02:46
 
 	package org.drools.lang;
 
 
-import org.antlr.runtime.BitSet;
-import org.antlr.runtime.EarlyExitException;
-import org.antlr.runtime.MismatchedSetException;
-import org.antlr.runtime.NoViableAltException;
-import org.antlr.runtime.RecognitionException;
-import org.antlr.runtime.Token;
-import org.antlr.runtime.tree.TreeNodeStream;
-import org.antlr.runtime.tree.TreeParser;
+import org.antlr.runtime.*;
+import org.antlr.runtime.tree.*;import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
 
 public class Tree2TestDRL extends TreeParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_COMPILATION_UNIT", "VT_FUNCTION_IMPORT", "VT_FACT", "VT_CONSTRAINTS", "VT_LABEL", "VT_QUERY_ID", "VT_TEMPLATE_ID", "VT_RULE_ID", "VT_ENTRYPOINT_ID", "VT_SLOT_ID", "VT_SLOT", "VT_RULE_ATTRIBUTES", "VT_RHS_CHUNK", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VT_DATA_TYPE", "VT_PACKAGE_ID", "VT_IMPORT_ID", "VT_GLOBAL_ID", "VT_FUNCTION_ID", "VT_PARAM_LIST", "VK_DATE_EFFECTIVE", "VK_DATE_EXPIRES", "VK_LOCK_ON_ACTIVE", "VK_NO_LOOP", "VK_AUTO_FOCUS", "VK_ACTIVATION_GROUP", "VK_AGENDA_GROUP", "VK_RULEFLOW_GROUP", "VK_DURATION", "VK_DIALECT", "VK_SALIENCE", "VK_ENABLED", "VK_ATTRIBUTES", "VK_WHEN", "VK_RULE", "VK_IMPORT", "VK_P!
 ACKAGE", "VK_TEMPLATE", "VK_QUERY", "VK_DECLARE", "VK_FUNCTION", "VK_GLOBAL", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "COLON", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "VT_COMPILATION_UNIT", "VT_FUNCTION_IMPORT", "VT_FACT", "VT_CONSTRAINTS", "VT_LABEL", "VT_QUERY_ID", "VT_TEMPLATE_ID", "VT_RULE_ID", "VT_ENTRYPOINT_ID", "VT_SLOT_ID", "VT_SLOT", "VT_RULE_ATTRIBUTES", "VT_RHS_CHUNK", "VT_CURLY_CHUNK", "VT_SQUARE_CHUNK", "VT_PAREN_CHUNK", "VT_AND_IMPLICIT", "VT_AND_PREFIX", "VT_OR_PREFIX", "VT_AND_INFIX", "VT_OR_INFIX", "VT_ACCUMULATE_INIT_CLAUSE", "VT_ACCUMULATE_ID_CLAUSE", "VT_FROM_SOURCE", "VT_EXPRESSION_CHAIN", "VT_PATTERN", "VT_FACT_BINDING", "VT_FACT_OR", "VT_BIND_FIELD", "VT_FIELD", "VT_ACCESSOR_PATH", "VT_ACCESSOR_ELEMENT", "VT_DATA_TYPE", "VT_PATTERN_TYPE", "VT_PACKAGE_ID", "VT_IMPORT_ID", "VT_GLOBAL_ID", "VT_FUNCTION_ID", "VT_PARAM_LIST", "VK_DATE_EFFECTIVE", "VK_DATE_EXPIRES", "VK_LOCK_ON_ACTIVE", "VK_NO_LOOP", "VK_AUTO_FOCUS", "VK_ACTIVATION_GROUP", "VK_AGENDA_GROUP", "VK_RULEFLOW_GROUP", "VK_DURATION", "VK_DIALECT", "VK_SALIENCE", "VK_ENABLED", "VK_ATTRIBUTES", "VK_WHEN", "VK_RULE",!
  "VK_IMPORT", "VK_PACKAGE", "VK_TEMPLATE", "VK_QUERY", "VK_DECLARE", "VK_FUNCTION", "VK_GLOBAL", "VK_EVAL", "VK_CONTAINS", "VK_MATCHES", "VK_EXCLUDES", "VK_SOUNDSLIKE", "VK_MEMBEROF", "VK_ENTRY_POINT", "VK_NOT", "VK_IN", "VK_OR", "VK_AND", "VK_EXISTS", "VK_FORALL", "VK_FROM", "VK_ACCUMULATE", "VK_INIT", "VK_ACTION", "VK_REVERSE", "VK_RESULT", "VK_COLLECT", "SEMICOLON", "ID", "DOT", "DOT_STAR", "END", "STRING", "LEFT_PAREN", "COMMA", "RIGHT_PAREN", "COLON", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "FLOAT", "NULL", "LEFT_SQUARE", "RIGHT_SQUARE", "THEN", "LEFT_CURLY", "RIGHT_CURLY", "MISC", "EOL", "WS", "EscapeSequence", "HexDigit", "UnicodeEscape", "OctalEscape", "SH_STYLE_SINGLE_LINE_COMMENT", "C_STYLE_SINGLE_LINE_COMMENT", "MULTI_LINE_COMMENT"
     };
-    public static final int COMMA=91;
+    public static final int COMMA=92;
+    public static final int VT_PATTERN_TYPE=37;
     public static final int VT_ACCUMULATE_ID_CLAUSE=26;
-    public static final int VK_FUNCTION=62;
-    public static final int VK_DIALECT=51;
-    public static final int END=88;
-    public static final int HexDigit=116;
-    public static final int VK_ATTRIBUTES=54;
+    public static final int VK_DIALECT=52;
+    public static final int VK_FUNCTION=63;
+    public static final int END=89;
+    public static final int HexDigit=117;
+    public static final int VK_ATTRIBUTES=55;
     public static final int VT_EXPRESSION_CHAIN=28;
-    public static final int VK_ACCUMULATE=78;
-    public static final int MISC=112;
+    public static final int VK_ACCUMULATE=79;
+    public static final int MISC=113;
     public static final int VT_AND_PREFIX=21;
-    public static final int VK_QUERY=60;
-    public static final int THEN=109;
-    public static final int VK_AUTO_FOCUS=46;
-    public static final int DOT=86;
-    public static final int VK_IMPORT=57;
+    public static final int VK_QUERY=61;
+    public static final int THEN=110;
+    public static final int VK_AUTO_FOCUS=47;
+    public static final int DOT=87;
+    public static final int VK_IMPORT=58;
     public static final int VT_SLOT=14;
-    public static final int VT_PACKAGE_ID=37;
-    public static final int LEFT_SQUARE=107;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=119;
+    public static final int VT_PACKAGE_ID=38;
+    public static final int LEFT_SQUARE=108;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=120;
     public static final int VT_DATA_TYPE=36;
-    public static final int VK_MATCHES=66;
+    public static final int VK_MATCHES=67;
     public static final int VT_FACT=6;
-    public static final int LEFT_CURLY=110;
-    public static final int LEFT_PAREN=90;
-    public static final int DOUBLE_AMPER=97;
+    public static final int LEFT_CURLY=111;
+    public static final int LEFT_PAREN=91;
+    public static final int DOUBLE_AMPER=98;
     public static final int VT_QUERY_ID=9;
     public static final int VT_ACCESSOR_PATH=34;
     public static final int VT_LABEL=8;
     public static final int VT_ENTRYPOINT_ID=12;
-    public static final int VK_SOUNDSLIKE=68;
-    public static final int VK_SALIENCE=52;
+    public static final int VK_SOUNDSLIKE=69;
+    public static final int VK_SALIENCE=53;
     public static final int VT_FIELD=33;
-    public static final int WS=114;
-    public static final int STRING=89;
-    public static final int VK_AND=74;
+    public static final int WS=115;
+    public static final int STRING=90;
+    public static final int VK_AND=75;
     public static final int VT_ACCESSOR_ELEMENT=35;
-    public static final int VK_REVERSE=81;
-    public static final int VK_GLOBAL=63;
+    public static final int VK_GLOBAL=64;
     public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
-    public static final int VK_DURATION=50;
+    public static final int VK_REVERSE=82;
+    public static final int VK_DURATION=51;
     public static final int VT_SQUARE_CHUNK=18;
-    public static final int VK_FORALL=76;
+    public static final int VK_FORALL=77;
     public static final int VT_COMPILATION_UNIT=4;
     public static final int VT_PAREN_CHUNK=19;
-    public static final int VK_ENABLED=53;
-    public static final int VK_RESULT=82;
-    public static final int UnicodeEscape=117;
-    public static final int VK_PACKAGE=58;
+    public static final int VK_ENABLED=54;
+    public static final int VK_RESULT=83;
+    public static final int UnicodeEscape=118;
+    public static final int VK_PACKAGE=59;
     public static final int VT_RULE_ID=11;
-    public static final int EQUAL=99;
-    public static final int VK_NO_LOOP=45;
-    public static final int SEMICOLON=84;
-    public static final int VK_TEMPLATE=59;
+    public static final int EQUAL=100;
+    public static final int VK_NO_LOOP=46;
+    public static final int SEMICOLON=85;
+    public static final int VK_TEMPLATE=60;
     public static final int VT_AND_IMPLICIT=20;
-    public static final int NULL=106;
-    public static final int COLON=93;
-    public static final int MULTI_LINE_COMMENT=121;
+    public static final int NULL=107;
+    public static final int COLON=94;
+    public static final int MULTI_LINE_COMMENT=122;
     public static final int VT_RULE_ATTRIBUTES=15;
-    public static final int RIGHT_SQUARE=108;
-    public static final int VK_AGENDA_GROUP=48;
+    public static final int RIGHT_SQUARE=109;
+    public static final int VK_AGENDA_GROUP=49;
     public static final int VT_FACT_OR=31;
-    public static final int VK_NOT=71;
-    public static final int VK_DATE_EXPIRES=43;
-    public static final int ARROW=98;
-    public static final int FLOAT=105;
+    public static final int VK_NOT=72;
+    public static final int VK_DATE_EXPIRES=44;
+    public static final int ARROW=99;
+    public static final int FLOAT=106;
     public static final int VT_SLOT_ID=13;
     public static final int VT_CURLY_CHUNK=17;
     public static final int VT_OR_PREFIX=22;
-    public static final int DOUBLE_PIPE=96;
-    public static final int LESS=102;
+    public static final int DOUBLE_PIPE=97;
+    public static final int LESS=103;
     public static final int VT_PATTERN=29;
-    public static final int VK_DATE_EFFECTIVE=42;
-    public static final int EscapeSequence=115;
-    public static final int VK_EXISTS=75;
-    public static final int INT=95;
+    public static final int VK_DATE_EFFECTIVE=43;
+    public static final int EscapeSequence=116;
+    public static final int VK_EXISTS=76;
+    public static final int INT=96;
     public static final int VT_BIND_FIELD=32;
-    public static final int VK_RULE=56;
-    public static final int VK_EVAL=64;
-    public static final int VK_COLLECT=83;
-    public static final int GREATER=100;
+    public static final int VK_RULE=57;
+    public static final int VK_EVAL=65;
+    public static final int VK_COLLECT=84;
+    public static final int GREATER=101;
     public static final int VT_FACT_BINDING=30;
-    public static final int ID=85;
-    public static final int NOT_EQUAL=104;
-    public static final int RIGHT_CURLY=111;
-    public static final int VK_ENTRY_POINT=70;
-    public static final int BOOL=94;
-    public static final int VT_PARAM_LIST=41;
+    public static final int ID=86;
+    public static final int NOT_EQUAL=105;
+    public static final int RIGHT_CURLY=112;
+    public static final int VK_ENTRY_POINT=71;
     public static final int VT_AND_INFIX=23;
+    public static final int BOOL=95;
+    public static final int VT_PARAM_LIST=42;
     public static final int VT_FROM_SOURCE=27;
-    public static final int VK_CONTAINS=65;
-    public static final int VK_LOCK_ON_ACTIVE=44;
+    public static final int VK_CONTAINS=66;
+    public static final int VK_LOCK_ON_ACTIVE=45;
     public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VK_IN=72;
+    public static final int VK_IN=73;
     public static final int VT_RHS_CHUNK=16;
-    public static final int VK_MEMBEROF=69;
-    public static final int GREATER_EQUAL=101;
+    public static final int VK_MEMBEROF=70;
+    public static final int GREATER_EQUAL=102;
     public static final int VT_OR_INFIX=24;
-    public static final int DOT_STAR=87;
-    public static final int VK_OR=73;
-    public static final int VT_GLOBAL_ID=39;
-    public static final int LESS_EQUAL=103;
-    public static final int VK_WHEN=55;
-    public static final int VK_RULEFLOW_GROUP=49;
-    public static final int VT_FUNCTION_ID=40;
+    public static final int DOT_STAR=88;
+    public static final int VK_OR=74;
+    public static final int VT_GLOBAL_ID=40;
+    public static final int LESS_EQUAL=104;
+    public static final int VK_WHEN=56;
+    public static final int VK_RULEFLOW_GROUP=50;
+    public static final int VT_FUNCTION_ID=41;
     public static final int EOF=-1;
     public static final int VT_CONSTRAINTS=7;
-    public static final int VT_IMPORT_ID=38;
-    public static final int EOL=113;
-    public static final int VK_INIT=79;
-    public static final int VK_ACTIVATION_GROUP=47;
-    public static final int OctalEscape=118;
-    public static final int VK_ACTION=80;
-    public static final int VK_FROM=77;
-    public static final int VK_EXCLUDES=67;
-    public static final int RIGHT_PAREN=92;
+    public static final int VT_IMPORT_ID=39;
+    public static final int EOL=114;
+    public static final int VK_INIT=80;
+    public static final int VK_ACTIVATION_GROUP=48;
+    public static final int OctalEscape=119;
+    public static final int VK_ACTION=81;
+    public static final int VK_FROM=78;
+    public static final int VK_EXCLUDES=68;
+    public static final int RIGHT_PAREN=93;
     public static final int VT_TEMPLATE_ID=10;
-    public static final int VK_DECLARE=61;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=120;
+    public static final int VK_DECLARE=62;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=121;
 
         public Tree2TestDRL(TreeNodeStream input) {
             super(input);
@@ -2191,10 +2188,10 @@
 
 
     // $ANTLR start fact_expression
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:152:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT data_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression!
  ) | ^( VT_FIELD fact_expression ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:152:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT pattern_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_express!
 ion ) | ^( VT_FIELD fact_expression ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );
     public final void fact_expression() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:153:2: ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT data_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT!
 _FIELD fact_expression ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:153:2: ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT pattern_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^(!
  VT_FIELD fact_expression ( fact_expression )? ) | ^( VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK )
             int alt43=28;
             switch ( input.LA(1) ) {
             case DOUBLE_PIPE:
@@ -2339,7 +2336,7 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("152:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT data_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_FIELD fact_expression ( fact_expression )? ) | ^( VT_!
 ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );", 43, 0, input);
+                    new NoViableAltException("152:1: fact_expression : ( ^( DOUBLE_PIPE fact_expression fact_expression ) | ^( DOUBLE_AMPER fact_expression fact_expression ) | ^( VT_FACT_BINDING VT_LABEL fact_expression ) | ^( VT_FACT pattern_type ( fact_expression )* ) | ^( VT_FACT_OR fact_expression fact_expression ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_IN ( VK_NOT )? ( fact_expression )+ ) | ^( EQUAL fact_expression ) | ^( GREATER fact_expression ) | ^( GREATER_EQUAL fact_expression ) | ^( LESS fact_expression ) | ^( LESS_EQUAL fact_expression ) | ^( NOT_EQUAL fact_expression ) | ^( VK_CONTAINS ( VK_NOT )? fact_expression ) | ^( VK_EXCLUDES ( VK_NOT )? fact_expression ) | ^( VK_MATCHES ( VK_NOT )? fact_expression ) | ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression ) | ^( VK_MEMBEROF ( VK_NOT )? fact_expression ) | ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression ) | ^( VT_BIND_FIELD VT_LABEL fact_expression ) | ^( VT_FIELD fact_expression ( fact_expression )? ) | ^( !
 VT_ACCESSOR_PATH ( accessor_element )+ ) | STRING | INT | FLOAT | BOOL | NULL | VT_PAREN_CHUNK );", 43, 0, input);
 
                 throw nvae;
             }
@@ -2400,16 +2397,16 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:4: ^( VT_FACT data_type ( fact_expression )* )
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:4: ^( VT_FACT pattern_type ( fact_expression )* )
                     {
                     match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression828); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_data_type_in_fact_expression830);
-                    data_type();
+                    pushFollow(FOLLOW_pattern_type_in_fact_expression830);
+                    pattern_type();
                     _fsp--;
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:24: ( fact_expression )*
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:27: ( fact_expression )*
                     loop31:
                     do {
                         int alt31=2;
@@ -2422,7 +2419,7 @@
 
                         switch (alt31) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:24: fact_expression
+                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:27: fact_expression
                     	    {
                     	    pushFollow(FOLLOW_fact_expression_in_fact_expression832);
                     	    fact_expression();
@@ -2993,17 +2990,17 @@
     // $ANTLR end fact_expression
 
 
-    // $ANTLR start data_type
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:183:1: data_type : ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
-    public final void data_type() throws RecognitionException {
+    // $ANTLR start pattern_type
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:183:1: pattern_type : ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) ;
+    public final void pattern_type() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:2: ( ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:4: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:2: ( ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:4: ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
             {
-            match(input,VT_DATA_TYPE,FOLLOW_VT_DATA_TYPE_in_data_type1071); 
+            match(input,VT_PATTERN_TYPE,FOLLOW_VT_PATTERN_TYPE_in_pattern_type1071); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:19: ( ID )+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:22: ( ID )+
             int cnt44=0;
             loop44:
             do {
@@ -3017,9 +3014,9 @@
 
                 switch (alt44) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:19: ID
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:22: ID
             	    {
-            	    match(input,ID,FOLLOW_ID_in_data_type1073); 
+            	    match(input,ID,FOLLOW_ID_in_pattern_type1073); 
 
             	    }
             	    break;
@@ -3033,7 +3030,7 @@
                 cnt44++;
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:23: ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:26: ( dimension_definition )*
             loop45:
             do {
                 int alt45=2;
@@ -3046,9 +3043,9 @@
 
                 switch (alt45) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:23: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:26: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_data_type1076);
+            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type1076);
             	    dimension_definition();
             	    _fsp--;
 
@@ -3075,18 +3072,103 @@
         }
         return ;
     }
+    // $ANTLR end pattern_type
+
+
+    // $ANTLR start data_type
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:187:1: data_type : ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
+    public final void data_type() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:2: ( ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:4: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            {
+            match(input,VT_DATA_TYPE,FOLLOW_VT_DATA_TYPE_in_data_type1090); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:19: ( ID )+
+            int cnt46=0;
+            loop46:
+            do {
+                int alt46=2;
+                int LA46_0 = input.LA(1);
+
+                if ( (LA46_0==ID) ) {
+                    alt46=1;
+                }
+
+
+                switch (alt46) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:19: ID
+            	    {
+            	    match(input,ID,FOLLOW_ID_in_data_type1092); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt46 >= 1 ) break loop46;
+                        EarlyExitException eee =
+                            new EarlyExitException(46, input);
+                        throw eee;
+                }
+                cnt46++;
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:23: ( dimension_definition )*
+            loop47:
+            do {
+                int alt47=2;
+                int LA47_0 = input.LA(1);
+
+                if ( (LA47_0==LEFT_SQUARE) ) {
+                    alt47=1;
+                }
+
+
+                switch (alt47) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:23: dimension_definition
+            	    {
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type1095);
+            	    dimension_definition();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop47;
+                }
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
     // $ANTLR end data_type
 
 
     // $ANTLR start dimension_definition
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:187:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:191:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
     public final void dimension_definition() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:2: ( LEFT_SQUARE RIGHT_SQUARE )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:4: LEFT_SQUARE RIGHT_SQUARE
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:4: LEFT_SQUARE RIGHT_SQUARE
             {
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition1089); 
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition1091); 
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition1108); 
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition1110); 
 
             }
 
@@ -3103,38 +3185,38 @@
 
 
     // $ANTLR start accessor_element
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:191:1: accessor_element : ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:195:1: accessor_element : ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) ;
     public final void accessor_element() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:2: ( ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:4: ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:2: ( ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:4: ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* )
             {
-            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1103); 
+            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1122); 
 
             match(input, Token.DOWN, null); 
-            match(input,ID,FOLLOW_ID_in_accessor_element1105); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:29: ( VT_SQUARE_CHUNK )*
-            loop46:
+            match(input,ID,FOLLOW_ID_in_accessor_element1124); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:29: ( VT_SQUARE_CHUNK )*
+            loop48:
             do {
-                int alt46=2;
-                int LA46_0 = input.LA(1);
+                int alt48=2;
+                int LA48_0 = input.LA(1);
 
-                if ( (LA46_0==VT_SQUARE_CHUNK) ) {
-                    alt46=1;
+                if ( (LA48_0==VT_SQUARE_CHUNK) ) {
+                    alt48=1;
                 }
 
 
-                switch (alt46) {
+                switch (alt48) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:29: VT_SQUARE_CHUNK
+            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:29: VT_SQUARE_CHUNK
             	    {
-            	    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1107); 
+            	    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1126); 
 
             	    }
             	    break;
 
             	default :
-            	    break loop46;
+            	    break loop48;
                 }
             } while (true);
 
@@ -3156,64 +3238,64 @@
 
 
     // $ANTLR start expression_chain
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:195:1: expression_chain : ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:199:1: expression_chain : ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) ;
     public final void expression_chain() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:2: ( ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:4: ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:2: ( ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:4: ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? )
             {
-            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1121); 
+            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1140); 
 
             match(input, Token.DOWN, null); 
-            match(input,ID,FOLLOW_ID_in_expression_chain1123); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:29: ( VT_SQUARE_CHUNK )?
-            int alt47=2;
-            int LA47_0 = input.LA(1);
+            match(input,ID,FOLLOW_ID_in_expression_chain1142); 
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:29: ( VT_SQUARE_CHUNK )?
+            int alt49=2;
+            int LA49_0 = input.LA(1);
 
-            if ( (LA47_0==VT_SQUARE_CHUNK) ) {
-                alt47=1;
+            if ( (LA49_0==VT_SQUARE_CHUNK) ) {
+                alt49=1;
             }
-            switch (alt47) {
+            switch (alt49) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:29: VT_SQUARE_CHUNK
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:29: VT_SQUARE_CHUNK
                     {
-                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1125); 
+                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1144); 
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:46: ( VT_PAREN_CHUNK )?
-            int alt48=2;
-            int LA48_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:46: ( VT_PAREN_CHUNK )?
+            int alt50=2;
+            int LA50_0 = input.LA(1);
 
-            if ( (LA48_0==VT_PAREN_CHUNK) ) {
-                alt48=1;
+            if ( (LA50_0==VT_PAREN_CHUNK) ) {
+                alt50=1;
             }
-            switch (alt48) {
+            switch (alt50) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:46: VT_PAREN_CHUNK
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:46: VT_PAREN_CHUNK
                     {
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain1128); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain1147); 
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:62: ( expression_chain )?
-            int alt49=2;
-            int LA49_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:62: ( expression_chain )?
+            int alt51=2;
+            int LA51_0 = input.LA(1);
 
-            if ( (LA49_0==VT_EXPRESSION_CHAIN) ) {
-                alt49=1;
+            if ( (LA51_0==VT_EXPRESSION_CHAIN) ) {
+                alt51=1;
             }
-            switch (alt49) {
+            switch (alt51) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:62: expression_chain
+                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:62: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain1131);
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain1150);
                     expression_chain();
                     _fsp--;
 
@@ -3241,13 +3323,13 @@
 
 
     // $ANTLR start curly_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:199:1: curly_chunk : VT_CURLY_CHUNK ;
+    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:203:1: curly_chunk : VT_CURLY_CHUNK ;
     public final void curly_chunk() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:2: ( VT_CURLY_CHUNK )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:4: VT_CURLY_CHUNK
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:204:2: ( VT_CURLY_CHUNK )
+            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:204:4: VT_CURLY_CHUNK
             {
-            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1145); 
+            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1164); 
 
             }
 
@@ -3266,12 +3348,12 @@
  
 
     public static final BitSet FOLLOW_VT_COMPILATION_UNIT_in_compilation_unit43 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_package_statement_in_compilation_unit45 = new BitSet(new long[]{0xDB3FFC0000000028L});
-    public static final BitSet FOLLOW_statement_in_compilation_unit48 = new BitSet(new long[]{0xDB3FFC0000000028L});
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit45 = new BitSet(new long[]{0xB67FF80000000028L,0x0000000000000001L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit48 = new BitSet(new long[]{0xB67FF80000000028L,0x0000000000000001L});
     public static final BitSet FOLLOW_VK_PACKAGE_in_package_statement63 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_package_id_in_package_statement65 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_PACKAGE_ID_in_package_id78 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_package_id80 = new BitSet(new long[]{0x0000000000000008L,0x0000000000200000L});
+    public static final BitSet FOLLOW_ID_in_package_id80 = new BitSet(new long[]{0x0000000000000008L,0x0000000000400000L});
     public static final BitSet FOLLOW_rule_attribute_in_statement93 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_function_import_statement_in_statement98 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_import_statement_in_statement104 = new BitSet(new long[]{0x0000000000000002L});
@@ -3283,47 +3365,47 @@
     public static final BitSet FOLLOW_VK_IMPORT_in_import_statement143 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_import_name_in_import_statement145 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement158 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_FUNCTION_in_function_import_statement160 = new BitSet(new long[]{0x0000004000000000L});
+    public static final BitSet FOLLOW_VK_FUNCTION_in_function_import_statement160 = new BitSet(new long[]{0x0000008000000000L});
     public static final BitSet FOLLOW_import_name_in_function_import_statement162 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_IMPORT_ID_in_import_name175 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_import_name177 = new BitSet(new long[]{0x0000000000000008L,0x0000000000A00000L});
+    public static final BitSet FOLLOW_ID_in_import_name177 = new BitSet(new long[]{0x0000000000000008L,0x0000000001400000L});
     public static final BitSet FOLLOW_DOT_STAR_in_import_name180 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_GLOBAL_in_global194 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_data_type_in_global196 = new BitSet(new long[]{0x0000008000000000L});
+    public static final BitSet FOLLOW_data_type_in_global196 = new BitSet(new long[]{0x0000010000000000L});
     public static final BitSet FOLLOW_VT_GLOBAL_ID_in_global198 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_FUNCTION_in_function211 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_data_type_in_function213 = new BitSet(new long[]{0x0000010000000000L});
-    public static final BitSet FOLLOW_VT_FUNCTION_ID_in_function216 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_data_type_in_function213 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_VT_FUNCTION_ID_in_function216 = new BitSet(new long[]{0x0000040000000000L});
     public static final BitSet FOLLOW_parameters_in_function218 = new BitSet(new long[]{0x0000000000020000L});
     public static final BitSet FOLLOW_curly_chunk_in_function220 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_QUERY_in_query233 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_QUERY_ID_in_query235 = new BitSet(new long[]{0x0000020000100000L});
+    public static final BitSet FOLLOW_VT_QUERY_ID_in_query235 = new BitSet(new long[]{0x0000040000100000L});
     public static final BitSet FOLLOW_parameters_in_query237 = new BitSet(new long[]{0x0000000000100000L});
-    public static final BitSet FOLLOW_lhs_block_in_query240 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_lhs_block_in_query240 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
     public static final BitSet FOLLOW_END_in_query242 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_PARAM_LIST_in_parameters255 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_param_definition_in_parameters257 = new BitSet(new long[]{0x0000001000000008L,0x0000000000200000L});
-    public static final BitSet FOLLOW_data_type_in_param_definition270 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters257 = new BitSet(new long[]{0x0000001000000008L,0x0000000000400000L});
+    public static final BitSet FOLLOW_data_type_in_param_definition270 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
     public static final BitSet FOLLOW_argument_in_param_definition273 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_argument284 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
-    public static final BitSet FOLLOW_dimension_definition_in_argument286 = new BitSet(new long[]{0x0000000000000002L,0x0000080000000000L});
+    public static final BitSet FOLLOW_ID_in_argument284 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_argument286 = new BitSet(new long[]{0x0000000000000002L,0x0000100000000000L});
     public static final BitSet FOLLOW_VK_TEMPLATE_in_template300 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_TEMPLATE_ID_in_template302 = new BitSet(new long[]{0x0000000000004000L});
-    public static final BitSet FOLLOW_template_slot_in_template304 = new BitSet(new long[]{0x0000000000004000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_template_slot_in_template304 = new BitSet(new long[]{0x0000000000004000L,0x0000000002000000L});
     public static final BitSet FOLLOW_END_in_template307 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_SLOT_in_template_slot320 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_data_type_in_template_slot322 = new BitSet(new long[]{0x0000000000002000L});
     public static final BitSet FOLLOW_VT_SLOT_ID_in_template_slot324 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_RULE_in_rule337 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_RULE_ID_in_rule339 = new BitSet(new long[]{0x0080000000018000L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule341 = new BitSet(new long[]{0x0080000000010000L});
+    public static final BitSet FOLLOW_VT_RULE_ID_in_rule339 = new BitSet(new long[]{0x0100000000018000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule341 = new BitSet(new long[]{0x0100000000010000L});
     public static final BitSet FOLLOW_when_part_in_rule344 = new BitSet(new long[]{0x0000000000010000L});
     public static final BitSet FOLLOW_VT_RHS_CHUNK_in_rule347 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_WHEN_in_when_part359 = new BitSet(new long[]{0x0000000000100000L});
     public static final BitSet FOLLOW_lhs_block_in_when_part361 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes373 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_ATTRIBUTES_in_rule_attributes375 = new BitSet(new long[]{0x003FFC0000000000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes378 = new BitSet(new long[]{0x003FFC0000000008L});
+    public static final BitSet FOLLOW_VK_ATTRIBUTES_in_rule_attributes375 = new BitSet(new long[]{0x007FF80000000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes378 = new BitSet(new long[]{0x007FF80000000008L});
     public static final BitSet FOLLOW_VK_SALIENCE_in_rule_attribute392 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_set_in_rule_attribute394 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_NO_LOOP_in_rule_attribute406 = new BitSet(new long[]{0x0000000000000004L});
@@ -3349,16 +3431,16 @@
     public static final BitSet FOLLOW_VK_DIALECT_in_rule_attribute512 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_STRING_in_rule_attribute514 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_AND_IMPLICIT_in_lhs_block528 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs_block530 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs_block530 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000007102L});
     public static final BitSet FOLLOW_VT_OR_PREFIX_in_lhs543 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs545 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs545 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000007102L});
     public static final BitSet FOLLOW_VT_OR_INFIX_in_lhs553 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs555 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs555 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000007102L});
     public static final BitSet FOLLOW_lhs_in_lhs557 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_AND_PREFIX_in_lhs564 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs566 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs566 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000007102L});
     public static final BitSet FOLLOW_VT_AND_INFIX_in_lhs574 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs576 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs576 = new BitSet(new long[]{0x0000000021E00000L,0x0000000000007102L});
     public static final BitSet FOLLOW_lhs_in_lhs578 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_EXISTS_in_lhs585 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_lhs_in_lhs587 = new BitSet(new long[]{0x0000000000000008L});
@@ -3367,9 +3449,9 @@
     public static final BitSet FOLLOW_VK_EVAL_in_lhs603 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_lhs605 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_FORALL_in_lhs612 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs614 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000003881L});
+    public static final BitSet FOLLOW_lhs_in_lhs614 = new BitSet(new long[]{0x0000000021E00008L,0x0000000000007102L});
     public static final BitSet FOLLOW_VK_FROM_in_lhs622 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs624 = new BitSet(new long[]{0x0000000008000000L,0x0000000000084040L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs624 = new BitSet(new long[]{0x0000000008000000L,0x0000000000108080L});
     public static final BitSet FOLLOW_from_elements_in_lhs626 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_lhs_pattern_in_lhs632 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_VK_ACCUMULATE_in_from_elements644 = new BitSet(new long[]{0x0000000000000004L});
@@ -3389,7 +3471,7 @@
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause707 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_ACTION_in_accumulate_init_clause715 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause717 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause724 = new BitSet(new long[]{0x0000000000000000L,0x0000000000040000L});
+    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause724 = new BitSet(new long[]{0x0000000000000000L,0x0000000000080000L});
     public static final BitSet FOLLOW_VK_RESULT_in_accumulate_init_clause731 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause733 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause747 = new BitSet(new long[]{0x0000000000000004L});
@@ -3400,25 +3482,25 @@
     public static final BitSet FOLLOW_VT_PATTERN_in_lhs_pattern780 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_fact_expression_in_lhs_pattern782 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_expression795 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression797 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression797 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression799 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_DOUBLE_AMPER_in_fact_expression806 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression808 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression808 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression810 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FACT_BINDING_in_fact_expression817 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression819 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression819 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression821 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FACT_in_fact_expression828 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_data_type_in_fact_expression830 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression832 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_pattern_type_in_fact_expression830 = new BitSet(new long[]{0x00000007C0080048L,0x00000FF78440027EL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression832 = new BitSet(new long[]{0x00000007C0080048L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_VT_FACT_OR_in_fact_expression840 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression842 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression842 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression844 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_EVAL_in_fact_expression851 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression853 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_IN_in_fact_expression860 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression862 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression865 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression862 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression865 = new BitSet(new long[]{0x00000007C0080048L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_EQUAL_in_fact_expression873 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression875 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_GREATER_in_fact_expression882 = new BitSet(new long[]{0x0000000000000004L});
@@ -3432,29 +3514,29 @@
     public static final BitSet FOLLOW_NOT_EQUAL_in_fact_expression918 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression920 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_CONTAINS_in_fact_expression927 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression929 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression929 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression932 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_EXCLUDES_in_fact_expression939 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression941 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression941 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression944 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_MATCHES_in_fact_expression951 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression953 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression953 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression956 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_SOUNDSLIKE_in_fact_expression963 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression965 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression965 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression968 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VK_MEMBEROF_in_fact_expression975 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression977 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression977 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression980 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_ID_in_fact_expression987 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_NOT_in_fact_expression989 = new BitSet(new long[]{0x00000007C00C0040L,0x000007FBC220013FL});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression992 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression989 = new BitSet(new long[]{0x00000007C00C0040L,0x00000FF78440027EL});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression992 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression995 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_BIND_FIELD_in_fact_expression1002 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1004 = new BitSet(new long[]{0x00000007C0080040L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1004 = new BitSet(new long[]{0x00000007C0080040L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1006 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_FIELD_in_fact_expression1013 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1015 = new BitSet(new long[]{0x00000007C0080048L,0x000007FBC220013FL});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1015 = new BitSet(new long[]{0x00000007C0080048L,0x00000FF78440027EL});
     public static final BitSet FOLLOW_fact_expression_in_fact_expression1017 = new BitSet(new long[]{0x0000000000000008L});
     public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1025 = new BitSet(new long[]{0x0000000000000004L});
     public static final BitSet FOLLOW_accessor_element_in_fact_expression1027 = new BitSet(new long[]{0x0000000800000008L});
@@ -3464,19 +3546,22 @@
     public static final BitSet FOLLOW_BOOL_in_fact_expression1049 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_NULL_in_fact_expression1054 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression1059 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VT_DATA_TYPE_in_data_type1071 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_data_type1073 = new BitSet(new long[]{0x0000000000000008L,0x0000080000200000L});
-    public static final BitSet FOLLOW_dimension_definition_in_data_type1076 = new BitSet(new long[]{0x0000000000000008L,0x0000080000000000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition1089 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition1091 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1103 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_accessor_element1105 = new BitSet(new long[]{0x0000000000040008L});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1107 = new BitSet(new long[]{0x0000000000040008L});
-    public static final BitSet FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1121 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_expression_chain1123 = new BitSet(new long[]{0x00000000100C0008L});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1125 = new BitSet(new long[]{0x0000000010080008L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_expression_chain1128 = new BitSet(new long[]{0x0000000010000008L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain1131 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1145 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_PATTERN_TYPE_in_pattern_type1071 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_pattern_type1073 = new BitSet(new long[]{0x0000000000000008L,0x0000100000400000L});
+    public static final BitSet FOLLOW_dimension_definition_in_pattern_type1076 = new BitSet(new long[]{0x0000000000000008L,0x0000100000000000L});
+    public static final BitSet FOLLOW_VT_DATA_TYPE_in_data_type1090 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_data_type1092 = new BitSet(new long[]{0x0000000000000008L,0x0000100000400000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type1095 = new BitSet(new long[]{0x0000000000000008L,0x0000100000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition1108 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition1110 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1122 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accessor_element1124 = new BitSet(new long[]{0x0000000000040008L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1126 = new BitSet(new long[]{0x0000000000040008L});
+    public static final BitSet FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1140 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_expression_chain1142 = new BitSet(new long[]{0x00000000100C0008L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1144 = new BitSet(new long[]{0x0000000010080008L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_expression_chain1147 = new BitSet(new long[]{0x0000000010000008L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain1150 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1164 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/gUnitTest.testsuite
===================================================================
--- labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/gUnitTest.testsuite	2008-05-20 12:50:33 UTC (rev 20081)
+++ labs/jbossrules/branches/parser-rewrite/drools-compiler/src/test/java/org/drools/lang/gUnitTest.testsuite	2008-05-20 13:44:37 UTC (rev 20082)
@@ -57,7 +57,7 @@
   then
   	baz();
 end>>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID test templates)) (template Cheese (VT_SLOT (VT_DATA_TYPE String) name) (VT_SLOT (VT_DATA_TYPE Integer) age) end) (template "Wine" (VT_SLOT (VT_DATA_TYPE String) name) (VT_SLOT (VT_DATA_TYPE String) year) (VT_SLOT (VT_DATA_TYPE String [ ]) accolades) end) (rule "a rule" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Stilton")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 2001)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Wine) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Grange")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== "1978")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT accolades)) (contains "world champion"))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID test templates)) (template Cheese (VT_SLOT (VT_DATA_TYPE String) name) (VT_SLOT (VT_DATA_TYPE Integer) age) end) (template "Wine" (VT_SLOT (VT_DATA_TYPE String) name) (VT_SLOT (VT_DATA_TYPE String) year) (VT_SLOT (VT_DATA_TYPE String [ ]) accolades) end) (rule "a rule" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Stilton")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 2001)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Wine) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Grange")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== "1978")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT accolades)) (contains "world champion"))))) then
   	baz();
 end))
 	<<package foo
@@ -69,7 +69,7 @@
   	 if (speed > speedLimit ? true : false;)
      pullEmOver();
 end>>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (rule rule_one when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo)))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (rule rule_one when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo)))) then
   	 if (speed > speedLimit ? true : false;)
      pullEmOver();
 end))
@@ -89,7 +89,7 @@
 end>>
 		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (function (VT_DATA_TYPE String [ ]) yourFunction (VT_PARAM_LIST (VT_DATA_TYPE String) args [ ]) {
      baz();
-}) (rule "new rule" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Something)))) then
+}) (rule "new rule" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Something)))) then
 		yourFunction(new String[3] {"a","b","c"});
 		
 end))
@@ -114,7 +114,7 @@
   then
 	funky();
 end>>
-		-> (VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (no-loop false)) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
+		-> (VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (no-loop false)) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
 	funky();
 end))
 	<<
@@ -125,7 +125,7 @@
   then
 	funky();
 end>>
-		-> (VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (auto-focus true)) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
+		-> (VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (auto-focus true)) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
 	funky();
 end))
 	<<
@@ -136,7 +136,7 @@
   then
 	funky();
 end>>
-		-> (VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (ruleflow-group "a group")) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
+		-> (VT_COMPILATION_UNIT (rule rule1 (VT_RULE_ATTRIBUTES (ruleflow-group "a group")) when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
 	funky();
 end))
 	<<
@@ -210,7 +210,7 @@
   then
 	cons();
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== false)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42.42))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== false)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42.42))))) then
 	cons();
 end))
 
@@ -223,7 +223,7 @@
         Cheese( )
     then
 end >>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (rule "simple rule" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese)))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (rule "simple rule" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese)))) then
 end))
 	<<
 rule blah
@@ -235,7 +235,7 @@
  then
 	partay();
 end	>>
-		-> (VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ( foo,bar,42,"hello",{ a => "b", "something" => 42, "a" => foo, x => {x=>y}},"end", [a, "b", 42] )))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2)))) then
+		-> (VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ( foo,bar,42,"hello",{ a => "b", "something" => 42, "a" => foo, x => {x=>y}},"end", [a, "b", 42] )))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2)))) then
 	partay();
 end))
 	<<
@@ -248,7 +248,7 @@
  then
 	partay();
 end	>>
-		-> (VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE doIt ( foo,bar,42,"hello",{ a => "b", "something" => 42, "a" => foo, x => {x=>y}},"end", [a, "b", 42] ))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2)))) then
+		-> (VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE doIt ( foo,bar,42,"hello",{ a => "b", "something" => 42, "a" => foo, x => {x=>y}},"end", [a, "b", 42] ))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2)))) then
 	partay();
 end))
 	<<
@@ -261,7 +261,7 @@
  then
 	partay();
 end	>>
-		-> (VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2)))) then
+		-> (VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2)))) then
 	partay();
 end))
 	<<
@@ -274,7 +274,7 @@
  then
 	partay();
 end	>>
-		-> (VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ["key"]))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2)))) then
+		-> (VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ["key"]))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2)))) then
 	partay();
 end))
 	<<rule blah
@@ -285,7 +285,7 @@
  then
 	partay();
 end	>>
-		-> (VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE doIt1 ( foo,bar,42,"hello",{ a => "b"}, [a, "b", 42] ) (. doIt2 (bar, [a, "b", 42]) (. field ["key"])))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2)))) then
+		-> (VT_COMPILATION_UNIT (rule blah when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE doIt1 ( foo,bar,42,"hello",{ a => "b"}, [a, "b", 42] ) (. doIt2 (bar, [a, "b", 42]) (. field ["key"])))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2)))) then
 	partay();
 end))
 	<<
@@ -302,7 +302,7 @@
   } 
   System.out.println( a4 );
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) then
   if ( a == b ) {
     assert( foo3 );
   } else {
@@ -322,7 +322,7 @@
   then
 	consequence();
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (|| (== "sedan") (== "wagon"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (|| (== "sedan") (== "wagon"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then
 	consequence();
 end))
 	<<package la
@@ -342,7 +342,7 @@
   	*/
   	second  
 end>>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID la)) (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID la)) (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) then
   	//woot
   	first
   	
@@ -365,7 +365,7 @@
   } 
   System.out.println( a4 );
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) then
   if ( a == b ) {
     assert( foo3 );
   } else {
@@ -380,7 +380,7 @@
   then
 	funky();
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
 	funky();
 end))
 	<<package HR1
@@ -395,7 +395,7 @@
   then
 	funky();
 end>>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID HR1)) (import function (VT_IMPORT_ID abd def x)) (import function (VT_IMPORT_ID qed wah .*)) (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (exists (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID HR1)) (import function (VT_IMPORT_ID abd def x)) (import function (VT_IMPORT_ID qed wah .*)) (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (exists (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))))) then
 	funky();
 end))
 	<<package HR1
@@ -407,7 +407,7 @@
   then
 	funky();
 end>>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID HR1)) (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (exists (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID HR1)) (rule simple_rule when (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (exists (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))))) then
 	funky();
 end))
 	<<package HR2
@@ -428,7 +428,7 @@
     Baz()
 	
 end>>
-		-> (VT_COMPILATION_UNIT (query "simple_query" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) end))
+		-> (VT_COMPILATION_UNIT (query "simple_query" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) end))
 	<<
 package foo
 
@@ -460,11 +460,11 @@
 	
 end
 	>>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (rule bar when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID foo)) (rule bar when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) then
 		Boo()
-end) (query "simple_query" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) end) (rule bar2 when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) then
+end) (query "simple_query" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) end) (rule bar2 when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) then
 		Boo()
-end) (query "simple_query2" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz)))) end))
+end) (query "simple_query2" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz)))) end))
 
 	<<package org.drools.test;
 
@@ -483,9 +483,9 @@
     then
         System.out.println("I like " + t );
 end    >>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools integrationtests Cheese)) (rule "Like Stilton" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools integrationtests Cheese)) (rule "Like Stilton" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
         System.out.println("I like " + t);
-end) (rule "Like Cheddar" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "cheddar")))))) then
+end) (rule "Like Cheddar" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "cheddar")))))) then
         System.out.println("I like " + t );
 end))
 	<<package org.drools.test;
@@ -498,7 +498,7 @@
     then
         System.out.println("I like " + $type);
 end    >>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (rule "like cheddar" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type))))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (rule "like cheddar" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type))))))) then
         System.out.println("I like " + $type);
 end))
 	<<package org.drools.test;
@@ -513,7 +513,7 @@
     then
         System.out.println( $name + " likes " + $type);
 end    >>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (import (VT_IMPORT_ID org drools Person)) (rule "Who likes Stilton" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $name (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "bob"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $type)))))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (import (VT_IMPORT_ID org drools Person)) (rule "Who likes Stilton" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $name (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "bob"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $type)))))))) then
         System.out.println( $name + " likes " + $type);
 end))
 	<<
@@ -526,7 +526,7 @@
   then
 	System.out.println( "Mark and Michael" + bar );
 end>>
-		-> (VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "green"))))))) then
+		-> (VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "green"))))))) then
 	System.out.println( "Mark and Michael" + bar );
 end))
 	<<
@@ -539,7 +539,7 @@
   then
 	System.out.println( "Mark and Michael" );
 end>>
-		-> (VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (&& (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (|| (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
+		-> (VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (&& (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (|| (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
 	System.out.println( "Mark and Michael" );
 end))
 	<<
@@ -552,7 +552,7 @@
   then
 	System.out.println( "Mark and Michael" + bar );
 end>>
-		-> (VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "green"))))) then
+		-> (VT_COMPILATION_UNIT (import (VT_IMPORT_ID org drools Person)) (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "green"))))) then
 	System.out.println( "Mark and Michael" + bar );
 end))
 	<<
@@ -565,7 +565,7 @@
   then
 	System.out.println( "Mark and Michael" + bar );
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan"))))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan"))))))) then
 	System.out.println( "Mark and Michael" + bar );
 end))
 	<<rule simple_rule 
@@ -576,7 +576,7 @@
   then
 	System.out.println( "Mark and Michael" + bar );
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan"))))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan"))))))) then
 	System.out.println( "Mark and Michael" + bar );
 end))
 	<<
@@ -586,7 +586,7 @@
   then
 	go wild
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (and (or (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== "a"))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== "y"))))) (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Shoes))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Butt)))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (and (or (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== "a"))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== "y"))))) (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Shoes))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Butt)))))) then
 	go wild
 end))
 	<<
@@ -601,7 +601,7 @@
 	Poof
 	
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (eval (abc("foo") + 5)) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (eval (qed())) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar)))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (eval (abc("foo") + 5)) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (eval (qed())) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar)))) then
 	Kapow
 	Poof
 	
@@ -616,7 +616,7 @@
 	Kapow
 	
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar))) (eval (abc("foo")))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar))) (eval (abc("foo")))) then
 	Kapow
 	
 end))
@@ -628,7 +628,7 @@
 	Kapow
 	
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== (a + b)))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== (a + b)))))) then
 	Kapow
 	
 end))
@@ -639,7 +639,7 @@
   then
 	foo bar
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age2 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)))) (-> ($age2 == $age1+2 ))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age2 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)))) (-> ($age2 == $age1+2 ))))) then
 	foo bar
 end))
 	<<package org.drools.test;
@@ -656,7 +656,7 @@
     then
 		list.add( $person );
 end    >>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (global (VT_DATA_TYPE java util List) list) (global (VT_DATA_TYPE java lang Integer) five) (rule "not rule test" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT like))))))) (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (global (VT_DATA_TYPE java util List) list) (global (VT_DATA_TYPE java lang Integer) five) (rule "not rule test" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT like))))))) (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))) then
 		list.add( $person );
 end))
 	<<package org.drools.test;
@@ -672,7 +672,7 @@
     then
 
 end    >>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (global (VT_DATA_TYPE java lang String) foo) (global (VT_DATA_TYPE java lang Integer) bar) (rule baz when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese)))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (import (VT_IMPORT_ID org drools Cheese)) (global (VT_DATA_TYPE java lang String) foo) (global (VT_DATA_TYPE java lang Integer) bar) (rule baz when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese)))) then
 
 end))
 	<<
@@ -744,7 +744,7 @@
 	then
 		bar();
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule (VT_RULE_ATTRIBUTES (salience 42) (agenda-group "my_group") no-loop (duration 42) (activation-group "my_activation_group") (lock-on-active true)) when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo)))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule (VT_RULE_ATTRIBUTES (salience 42) (agenda-group "my_group") no-loop (duration 42) (activation-group "my_activation_group") (lock-on-active true)) when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo)))) then
 		bar();
 end))
 	<<
@@ -758,7 +758,7 @@
 	then
 		bar();
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule (VT_RULE_ATTRIBUTES attributes (salience 42) (agenda-group "my_group") no-loop lock-on-active (duration 42) (activation-group "my_activation_group")) when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo)))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule (VT_RULE_ATTRIBUTES attributes (salience 42) (agenda-group "my_group") no-loop lock-on-active (duration 42) (activation-group "my_activation_group")) when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo)))) then
 		bar();
 end))
 	<<
@@ -767,7 +767,7 @@
   	Foo(bar == Foo.BAR)
   then
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT Foo) (VT_ACCESSOR_ELEMENT BAR))))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT Foo) (VT_ACCESSOR_ELEMENT BAR))))))) then
 end))
 	<<rule one
   when
@@ -792,7 +792,7 @@
     then
         list.add( s );
 end >>
-		-> (VT_COMPILATION_UNIT (rule "another test" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING s (VT_FACT (VT_DATA_TYPE String)))) (eval (s.equals("foo") && s.startsWith("f")))) then
+		-> (VT_COMPILATION_UNIT (rule "another test" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING s (VT_FACT (VT_PATTERN_TYPE String)))) (eval (s.equals("foo") && s.startsWith("f")))) then
         list.add( s );
 end))
 	<<package nesting;
@@ -808,7 +808,7 @@
 		p.name = "goober"
 		System.out.println(p.name)
 end>>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID nesting)) (rule "test something" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING p (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (soundslike "Michael")))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID nesting)) (rule "test something" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING p (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (soundslike "Michael")))))) then
 		p.name = "goober"
 		System.out.println(p.name)
 end))
@@ -909,7 +909,7 @@
 	Poof
 	
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar))) (eval (
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar))) (eval (
 	
 	
 	
@@ -948,7 +948,7 @@
 	Poof
 end
 	>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT baz)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT la)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT laz))))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT baz)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT la)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT laz))))))) then
 	Kapow
 	Poof
 end))
@@ -960,7 +960,7 @@
     then
         System.out.println( $name + " likes " + $type);
 end    >>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (rule "Who likes Stilton" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE com cheeseco Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools test)) (rule "Who likes Stilton" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE com cheeseco Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton")))))) then
         System.out.println( $name + " likes " + $type);
 end))
 	<<rule "AccumulateParserTest"
@@ -971,7 +971,7 @@
                                 result( new Integer(x) ) );
 then
 end>>
-		-> (VT_COMPILATION_UNIT (rule "AccumulateParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then
+		-> (VT_COMPILATION_UNIT (rule "AccumulateParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then
 end))
 	<<rule "AccumulateParserTest"
 when
@@ -981,14 +981,14 @@
                                          result( new Integer(x) ) );
 then
 end>>
-		-> (VT_COMPILATION_UNIT (rule "AccumulateParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_DATA_TYPE Integer)))) (accumulate (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then
+		-> (VT_COMPILATION_UNIT (rule "AccumulateParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_PATTERN_TYPE Integer)))) (accumulate (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then
 end))
 	<<rule "CollectParserTest"
 when
      $personList : ArrayList() from collect( Person( age > 21 ) );
 then
 end>>
-		-> (VT_COMPILATION_UNIT (rule "CollectParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (collect (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))))) then
+		-> (VT_COMPILATION_UNIT (rule "CollectParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (collect (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))))) then
 end))
 	<<rule "test_Quotes"
    when
@@ -996,7 +996,7 @@
    then
       String s = "\"\n\t\\";
 end >>
-		-> (VT_COMPILATION_UNIT (rule "test_Quotes" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE InitialFact)))) then
+		-> (VT_COMPILATION_UNIT (rule "test_Quotes" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE InitialFact)))) then
       String s = "\"\n\t\\";
 end))
 	<<rule "test nested CEs"	
@@ -1009,7 +1009,7 @@
 	then 
 		results.add("OK");		
 end>>
-		-> (VT_COMPILATION_UNIT (rule "test nested CEs" when (VT_AND_IMPLICIT (not (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE State) (VT_BIND_FIELD $state (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT state)))))) (not (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT status)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $state)))) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Bob")))) (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "brie")))))) then 
+		-> (VT_COMPILATION_UNIT (rule "test nested CEs" when (VT_AND_IMPLICIT (not (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE State) (VT_BIND_FIELD $state (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT state)))))) (not (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT status)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $state)))) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Bob")))) (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "brie")))))) then 
 		results.add("OK");		
 end))
 	<<rule "ForallParserTest"
@@ -1018,7 +1018,7 @@
              Cheese( type == $likes ) );
 then
 end>>
-		-> (VT_COMPILATION_UNIT (rule "ForallParserTest" when (VT_AND_IMPLICIT (forall (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))) then
+		-> (VT_COMPILATION_UNIT (rule "ForallParserTest" when (VT_AND_IMPLICIT (forall (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))) then
 end))
 	<<#testing 'in' operator
 
@@ -1029,7 +1029,7 @@
   then
 	consequence();
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in "sedan" "wagon")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in "sedan" "wagon")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then
 	consequence();
 end))
 	<<#testing not 'in' operator
@@ -1041,7 +1041,7 @@
   then
 	consequence();
 end>>
-		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in not "sedan" "wagon")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then
+		-> (VT_COMPILATION_UNIT (rule simple_rule when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in not "sedan" "wagon")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3))))) then
 	consequence();
 end))
 	<<package org.drools;
@@ -1071,9 +1071,9 @@
 end;
 
 	>>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (global (VT_DATA_TYPE java util List) list) (rule "rule1" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern1))) (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern2))) (VT_FROM_SOURCE x (. y (. z))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (global (VT_DATA_TYPE java util List) list) (rule "rule1" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern1))) (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern2))) (VT_FROM_SOURCE x (. y (. z))))) then
     System.out.println("Test");
-end;) (query "query1" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern5))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern6))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern7)))) end) (rule "rule2" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern3))) (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern4))) (collect (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern5)))))) then
+end;) (query "query1" (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern5))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern6))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern7)))) end) (rule "rule2" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern3))) (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern4))) (collect (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern5)))))) then
     System.out.println("Test");
 end;))
 	<<package org.drools
@@ -1097,7 +1097,7 @@
                                 result( new Integer(x) ) );
 then
 end>>
-		-> (VT_COMPILATION_UNIT (rule "AccumulateReverseParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (reverse ( x--; )) (result ( new Integer(x) )))))) then
+		-> (VT_COMPILATION_UNIT (rule "AccumulateReverseParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (reverse ( x--; )) (result ( new Integer(x) )))))) then
 end))
 	<<rule "AccumulateReverseParserTest"
 when
@@ -1105,7 +1105,7 @@
                                average( $age ) );
 then
 end>>
-		-> (VT_COMPILATION_UNIT (rule "AccumulateReverseParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Number))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_ID_CLAUSE average ( $age ))))) then
+		-> (VT_COMPILATION_UNIT (rule "AccumulateReverseParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Number))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_ID_CLAUSE average ( $age ))))) then
 end))
 	<<rule "CollectParserTest"
 when
@@ -1115,7 +1115,7 @@
 end
 
 	>>
-		-> (VT_COMPILATION_UNIT (rule "CollectParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (collect (from (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_DATA_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ())))))))) then
+		-> (VT_COMPILATION_UNIT (rule "CollectParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (collect (from (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_PATTERN_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ())))))))) then
 end))
 	<<rule "AccumulateParserTest"
 when
@@ -1126,7 +1126,7 @@
 end
 
 	>>
-		-> (VT_COMPILATION_UNIT (rule "AccumulateParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (accumulate (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (> 21) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))) (VT_ACCUMULATE_ID_CLAUSE max ( $age ))))) then
+		-> (VT_COMPILATION_UNIT (rule "AccumulateParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (accumulate (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (> 21) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))) (VT_ACCUMULATE_ID_CLAUSE max ( $age ))))) then
 end))
 	<<package org.drools;
 
@@ -1137,7 +1137,7 @@
 then
     // do something
 end >>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (rule "testing OR CE" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "bob"))))) (|| (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $p) (VT_ACCESSOR_ELEMENT likes))))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (rule "testing OR CE" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "bob"))))) (|| (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $p) (VT_ACCESSOR_ELEMENT likes))))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))))) then
     // do something
 end))
 	<<rule "another test" salience 10 when eval( true ) then System.out.println(1); end>>
@@ -1154,7 +1154,7 @@
                                          result( new Integer(x) ) );
 then
 end>>
-		-> (VT_COMPILATION_UNIT (rule "AccumulateMultiPatternParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_DATA_TYPE Integer)))) (accumulate (and (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $person) (VT_ACCESSOR_ELEMENT likes))))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then
+		-> (VT_COMPILATION_UNIT (rule "AccumulateMultiPatternParserTest" when (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_PATTERN_TYPE Integer)))) (accumulate (and (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $person) (VT_ACCESSOR_ELEMENT likes))))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) )))))) then
 end))
 	<<package org.drools;
 
@@ -1187,12 +1187,12 @@
     $e : EventE( this not before [1, 10] $b )
 then
 end>>
-		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (rule "test pluggable operators" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $a (VT_FACT (VT_DATA_TYPE EventA)))) (VT_PATTERN (VT_FACT_BINDING $b (VT_FACT (VT_DATA_TYPE EventB) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (after [1,10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_DATA_TYPE EventC) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (finishes (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))) (VT_PATTERN (VT_FACT_BINDING $d (VT_FACT (VT_DATA_TYPE EventD) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (starts not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $e (VT_FACT (VT_DATA_TYPE EventE) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (before not [1, 10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b)))))))) then
+		-> (VT_COMPILATION_UNIT (package (VT_PACKAGE_ID org drools)) (rule "test pluggable operators" when (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $a (VT_FACT (VT_PATTERN_TYPE EventA)))) (VT_PATTERN (VT_FACT_BINDING $b (VT_FACT (VT_PATTERN_TYPE EventB) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (after [1,10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_PATTERN_TYPE EventC) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (finishes (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))) (VT_PATTERN (VT_FACT_BINDING $d (VT_FACT (VT_PATTERN_TYPE EventD) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (starts not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $e (VT_FACT (VT_PATTERN_TYPE EventE) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (before not [1, 10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b)))))))) then
 end))
 
 pattern_source:
 	<<StockTick( symbol=="ACME") from entry-point StreamA>>
-		-> (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE StockTick) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT symbol)) (== "ACME")))) (entry-point StreamA))
+		-> (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE StockTick) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT symbol)) (== "ACME")))) (entry-point StreamA))
 
 paren_chunk:
 	<<( foo )>>
@@ -1207,151 +1207,151 @@
 normal_lhs_block:
 	"" -> "VT_AND_IMPLICIT"
 	<< $id : Something( duration == "foo") >>
-		->  (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $id (VT_FACT (VT_DATA_TYPE Something) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT duration)) (== "foo"))))))
+		->  (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $id (VT_FACT (VT_PATTERN_TYPE Something) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT duration)) (== "foo"))))))
 	"foo3 : Bar(" FAIL
 	<<
 	Cheese(name == "Stilton", age==2001)
 	Wine(name == "Grange", age == "1978", accolades contains "world champion")
-	>> -> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Stilton")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 2001)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Wine) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Grange")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== "1978")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT accolades)) (contains "world champion")))))
+	>> -> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Stilton")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 2001)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Wine) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Grange")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== "1978")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT accolades)) (contains "world champion")))))
 	"Foo()"
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))))
 	<<not Cheese(type == "stilton")>>
-		-> (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))))
+		-> (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))))
 	<<
 	Person(age < 42, location=="atlanta") 
 	or
 	Person(name=="bob")
 	>>
-		-> (VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "atlanta")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "bob"))))))
+		-> (VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "atlanta")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "bob"))))))
 	<<
 	Foo(bar == false)
 	Foo(boo > -42)
 	Foo(boo > -42.42)
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== false)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42.42)))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== false)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT boo)) (> -42.42)))))
 	"Cheese( )" 
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese))))
 		
 	<<
 	Col1() from something.doIt( foo,bar,42,"hello",{ a => "b", "something" => 42, "a" => foo, x => {x=>y}},"end", [a, "b", 42] )
 	Col2()
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ( foo,bar,42,"hello",{ a => "b", "something" => 42, "a" => foo, x => {x=>y}},"end", [a, "b", 42] )))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ( foo,bar,42,"hello",{ a => "b", "something" => 42, "a" => foo, x => {x=>y}},"end", [a, "b", 42] )))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2))))
 	<<
 	Col1() from doIt( foo,bar,42,"hello",{ a => "b", "something" => 42, "a" => foo, x => {x=>y}},"end", [a, "b", 42] )
 	Col2()
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE doIt ( foo,bar,42,"hello",{ a => "b", "something" => 42, "a" => foo, x => {x=>y}},"end", [a, "b", 42] ))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2))))	
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE doIt ( foo,bar,42,"hello",{ a => "b", "something" => 42, "a" => foo, x => {x=>y}},"end", [a, "b", 42] ))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2))))	
 	<<
 	Col1() from something.doIt
 	Col2()
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2))))	
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2))))	
 	<<
 	Col1() from something.doIt["key"]
 	Col2()
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ["key"]))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE something (. doIt ["key"]))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2))))
 	<<
 	Col1() from doIt1( foo,bar,42,"hello",{ a => "b"}, [a, "b", 42] )
 	            .doIt2(bar, [a, "b", 42]).field["key"]
 	Col2()
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col1))) (VT_FROM_SOURCE doIt1 ( foo,bar,42,"hello",{ a => "b"}, [a, "b", 42] ) (. doIt2 (bar, [a, "b", 42]) (. field ["key"])))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Col2))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col1))) (VT_FROM_SOURCE doIt1 ( foo,bar,42,"hello",{ a => "b"}, [a, "b", 42] ) (. doIt2 (bar, [a, "b", 42]) (. field ["key"])))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Col2))))
 	<<
 	foo3 : Bar(a==3)
     foo4 : Bar(a4:a==4)
     Baz()
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz))))
 	<<
 	Person(age > 30 && < 40)
   	Vehicle(type == "sedan" || == "wagon", age < 3)
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (|| (== "sedan") (== "wagon"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (|| (== "sedan") (== "wagon"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))
 	"    foo3 : Bar(a==3) ; foo4 : Bar(a4:a==4) ; Baz()"
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_DATA_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_DATA_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Baz))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo3 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 3))))) (VT_PATTERN (VT_FACT_BINDING foo4 (VT_FACT (VT_PATTERN_TYPE Bar) (VT_BIND_FIELD a4 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT a)) (== 4)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Baz))))
 	<<
   	not ( Cheese(type == "stilton") )
   	exists ( Foo() )
   	>>
-  		-> (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (exists (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo)))))
+  		-> (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (exists (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo)))))
 	<<
   	not ( Cheese(type == "stilton") )
   	exists ( Foo() )
 	>>
-		-> (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (exists (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo)))))
+		-> (VT_AND_IMPLICIT (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (exists (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo)))))
 	<<
   	a : (not ( Cheese(type == "stilton") ))
   	exists ( Foo() )
 	>>
 		FAIL
 	<< Cheese( t:type == "cheddar" ) >>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "cheddar"))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD t (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "cheddar"))))))
 
 	"Cheese( $type:type )"
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)))))))
 	<<
         Cheese($type : type == "stilton")
         $person : Person($name : name == "bob", likes == $type)        
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $name (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "bob"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $type))))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $name (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "bob"))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $type))))))))
 	<<
 	Person(name == "mark") or 
 	( Person(type == "fan") and Cheese(type == "green") )
 	>>
-		-> (VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "green")))))))
+		-> (VT_AND_IMPLICIT (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "green")))))))
 	<<
 	Person(name == "mark") && Cheese(type == "stilton")
     Person(name == "mark") || Cheese(type == "stilton")
 	>>
-		-> (VT_AND_IMPLICIT (&& (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (|| (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))))
+		-> (VT_AND_IMPLICIT (&& (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))) (|| (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark")))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))))
 	<<
 	foo :  ( Person(name == "mark") or Person(type == "fan") ) 
 	Cheese(type == "green")
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "green")))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "green")))))
 	<<
 	foo : ( Person(name == "mark") 
 		or 
 		Person(type == "fan") )
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))))))
 	<<
 	foo : ( 
 		Person(name == "mark") or Person(type == "fan") 
 		)
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING foo (or (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "mark"))) (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "fan")))))))
 	<<
 	 ( (not Foo(x=="a") or Foo(x=="y") ) and ( Shoes() or Butt() ) )
 	>>
-		-> (VT_AND_IMPLICIT (and (or (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== "a"))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== "y"))))) (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Shoes))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Butt))))))
+		-> (VT_AND_IMPLICIT (and (or (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== "a"))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT x)) (== "y"))))) (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Shoes))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Butt))))))
 	<<
 	eval(abc("foo") + 5)
 	Foo()
 	eval(qed())
 	Bar()
 	>>
-		-> (VT_AND_IMPLICIT (eval (abc("foo") + 5)) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (eval (qed())) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar))))
+		-> (VT_AND_IMPLICIT (eval (abc("foo") + 5)) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (eval (qed())) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar))))
 	<<
 	Foo()
 	Bar()
 	eval(abc("foo"))
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar))) (eval (abc("foo"))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar))) (eval (abc("foo"))))
 	"Foo(name== (a + b))"
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== (a + b))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== (a + b))))))
 	
 	"Person( $age2:age -> ($age2 == $age1+2 ) )"
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age2 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)))) (-> ($age2 == $age1+2 )))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age2 (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)))) (-> ($age2 == $age1+2 )))))
 
 	"Foo(bar == Foo.BAR)"
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT Foo) (VT_ACCESSOR_ELEMENT BAR)))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT Foo) (VT_ACCESSOR_ELEMENT BAR)))))))
 	<<
 	p: Person( name soundslike "Michael" )
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING p (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (soundslike "Michael"))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING p (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (soundslike "Michael"))))))
 
 	<<
 	Foo()
@@ -1370,7 +1370,7 @@
 	        
 	       )
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Bar))) (eval (
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Bar))) (eval (
 	
 	
 	
@@ -1392,10 +1392,10 @@
 	  bar == baz, la==laz
 	  )
 	 >>
-	 	-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT baz)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT la)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT laz)))))))
+	 	-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT baz)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT la)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT laz)))))))
 
 	<<com.cheeseco.Cheese($type : type == "stilton")>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE com cheeseco Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE com cheeseco Cheese) (VT_BIND_FIELD $type (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "stilton"))))))
 	
 	<<
 	     Integer() from accumulate( Person( age > 21 ),
@@ -1403,7 +1403,7 @@
                                 action( x++; ),
                                 result( new Integer(x) ) );
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))
 
 	<<
      $counter:Integer() from accumulate( $person : Person( age > 21 ),
@@ -1411,10 +1411,10 @@
                                          action( x++; ),
                                          result( new Integer(x) ) );
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_DATA_TYPE Integer)))) (accumulate (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_PATTERN_TYPE Integer)))) (accumulate (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))
 	
 	"$personList : ArrayList() from collect( Person( age > 21 ) );"
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (collect (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (collect (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))))))
 
 
 	<<
@@ -1424,67 +1424,67 @@
 	    Person( name == "Bob" )
 	    ( Cheese( price == 10 ) or Cheese( type == "brie" ) )
 	>>
-		-> (VT_AND_IMPLICIT (not (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE State) (VT_BIND_FIELD $state (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT state)))))) (not (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT status)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $state)))) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Bob")))) (or (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "brie"))))))
+		-> (VT_AND_IMPLICIT (not (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE State) (VT_BIND_FIELD $state (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT state)))))) (not (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT status)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $state)))) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes)))))))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "Bob")))) (or (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== "brie"))))))
 
 	<<
      forall( Person( age > 21, $likes : likes )
              Cheese( type == $likes ) );
 	>>
-		-> (VT_AND_IMPLICIT (forall (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes))))))))
+		-> (VT_AND_IMPLICIT (forall (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_BIND_FIELD $likes (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT likes)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $likes))))))))
 
 	<<
      Country( $cities : city )
      Person( city memberOf $cities )
     >>
-    	-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Country) (VT_BIND_FIELD $cities (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)) (memberOf (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $cities)))))))
+    	-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Country) (VT_BIND_FIELD $cities (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)) (memberOf (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $cities)))))))
 
 	<<
      Country( $cities : city )
      Person( city not memberOf $cities )
     >>
-    	-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Country) (VT_BIND_FIELD $cities (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)) (memberOf not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $cities)))))))
+    	-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Country) (VT_BIND_FIELD $cities (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)) (memberOf not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $cities)))))))
 
 	<<
   	Person(age > 30 && < 40)
   	Vehicle(type in ( "sedan", "wagon" ), age < 3)
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in "sedan" "wagon")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in "sedan" "wagon")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))
 
 	<<
   	Person(age > 30 && < 40)
   	Vehicle(type not in ( "sedan", "wagon" ), age < 3)
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in not "sedan" "wagon")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (&& (> 30) (< 40))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Vehicle) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (in not "sedan" "wagon")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 3)))))
 
 	<< Person( age < 42 && location=="atlanta") >>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "atlanta"))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "atlanta"))))))
 
 	<< Person( age < 42 || location=="atlanta") >>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "atlanta"))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "atlanta"))))))
 	
 	<<Person( age < 42 && location=="atlanta" || age > 20 && location=="Seatle" || location == "Chicago")>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "atlanta"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 20)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "Seatle")))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "Chicago"))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "atlanta"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 20)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "Seatle")))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "Chicago"))))))
 	
 	<<Person( age < 42 && ( location=="atlanta" || age > 20 && location=="Seatle") || location == "Chicago")>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "atlanta")) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 20)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "Seatle"))))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "Chicago"))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 42)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "atlanta")) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 20)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "Seatle"))))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT location)) (== "Chicago"))))))
 
 	<< Person( ( age == 70 && hair == "black" ) || ( age == 40 && hair == "pink" ) || ( age == 12 && ( hair == "yellow" || hair == "blue" ) ) ) >>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 70)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "black"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 40)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "pink")))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 12)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "yellow")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "blue"))))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 70)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "black"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 40)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "pink")))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 12)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "yellow")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "blue"))))))))
 
 	<< Person( name matches "mark" || matches "bob" ) >>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (|| (matches "mark") (matches "bob"))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (|| (matches "mark") (matches "bob"))))))
 	
 	<<
 	City( $city : city )
 	Country( cities not contains $city )
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE City) (VT_BIND_FIELD $city (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Country) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT cities)) (contains not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $city)))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE City) (VT_BIND_FIELD $city (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT city)))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Country) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT cities)) (contains not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $city)))))))
 
 	<< Message( text not matches '[abc]*' ) >>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Message) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT text)) (matches not '[abc]*')))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Message) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT text)) (matches not '[abc]*')))))
 	
 	<<Foo( bar > 1 || == 1 )>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (|| (> 1) (== 1))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Foo) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT bar)) (|| (> 1) (== 1))))))
 	
 	<<
 	Pattern1();
@@ -1495,7 +1495,7 @@
 	Pattern3();
 	Pattern4() from collect( Pattern5() );
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern1))) (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern2))) (VT_FROM_SOURCE x (. y (. z)))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern5))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern6))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern7))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern3))) (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern4))) (collect (VT_PATTERN (VT_FACT (VT_DATA_TYPE Pattern5))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern1))) (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern2))) (VT_FROM_SOURCE x (. y (. z)))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern5))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern6))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern7))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern3))) (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern4))) (collect (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Pattern5))))))
 	
 	<< eval( 3==3 ) >>
 		-> (VT_AND_IMPLICIT (eval ( 3==3 )))
@@ -1507,31 +1507,31 @@
 	                           reverse( x--; ),
 	                           result( new Integer(x) ) );
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (reverse ( x--; )) (result ( new Integer(x) ))))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Integer))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (reverse ( x--; )) (result ( new Integer(x) ))))))
 	
 	<<
      Number() from accumulate( Person( $age : age > 21 ),
                                average( $age ) );
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Number))) (accumulate (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_ID_CLAUSE average ( $age )))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Number))) (accumulate (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_ACCUMULATE_ID_CLAUSE average ( $age )))))
 
 	<<
      #bellow statement makes no sense, but is useful to test parsing recursiveness
      $personList : ArrayList() from collect( $p : Person( age > 21 || age < 10 ) from collect( People() from $town.getPeople() ) );
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (collect (from (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_DATA_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (collect (from (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_PATTERN_TYPE Person) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))))))
 	
 	<<
      $personList : ArrayList() from accumulate( Person( $age : age > 21 || < 10 ) from collect( People() from $town.getPeople() ),
                                                 max( $age ) );
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_DATA_TYPE ArrayList)))) (accumulate (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (> 21) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))) (VT_ACCUMULATE_ID_CLAUSE max ( $age )))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $personList (VT_FACT (VT_PATTERN_TYPE ArrayList)))) (accumulate (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (VT_BIND_FIELD $age (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (> 21) (< 10)))))) (collect (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE People))) (VT_FROM_SOURCE $town (. getPeople ()))))) (VT_ACCUMULATE_ID_CLAUSE max ( $age )))))
 
 	<<
     $p : Person( name == "bob" )
     $c : Cheese( type == $p.likes ) || Cheese( price == 10 )
     >>
-    	-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "bob"))))) (|| (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $p) (VT_ACCESSOR_ELEMENT likes))))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10))))))
+    	-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $p (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT name)) (== "bob"))))) (|| (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $p) (VT_ACCESSOR_ELEMENT likes))))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT price)) (== 10))))))
 
 	<<
 	(or
@@ -1540,7 +1540,7 @@
 			Meat()
 			Wine()))
 	>>
-		-> (VT_AND_IMPLICIT (or (not (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person)))) (and (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Meat))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Wine))))))
+		-> (VT_AND_IMPLICIT (or (not (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person)))) (and (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Meat))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Wine))))))
 
 	<<
      $counter:Integer() from accumulate( $person : Person( age > 21 ) and Cheese( type == $person.likes ),
@@ -1548,7 +1548,7 @@
                                          action( x++; ),
                                          result( new Integer(x) ) );
 	>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_DATA_TYPE Integer)))) (accumulate (and (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_DATA_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_PATTERN (VT_FACT (VT_DATA_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $person) (VT_ACCESSOR_ELEMENT likes))))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT_BINDING $counter (VT_FACT (VT_PATTERN_TYPE Integer)))) (accumulate (and (VT_PATTERN (VT_FACT_BINDING $person (VT_FACT (VT_PATTERN_TYPE Person) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (> 21))))) (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Cheese) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT type)) (== (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $person) (VT_ACCESSOR_ELEMENT likes))))))) (VT_ACCUMULATE_INIT_CLAUSE (init ( int x = 0; )) (action ( x++; )) (result ( new Integer(x) ))))))
 	
 	<<
     $a : EventA()
@@ -1557,18 +1557,18 @@
     $d : EventD( this not starts $a )
     $e : EventE( this not before [1, 10] $b )
 	>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $a (VT_FACT (VT_DATA_TYPE EventA)))) (VT_PATTERN (VT_FACT_BINDING $b (VT_FACT (VT_DATA_TYPE EventB) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (after [1,10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_DATA_TYPE EventC) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (finishes (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))) (VT_PATTERN (VT_FACT_BINDING $d (VT_FACT (VT_DATA_TYPE EventD) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (starts not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $e (VT_FACT (VT_DATA_TYPE EventE) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (before not [1, 10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT_BINDING $a (VT_FACT (VT_PATTERN_TYPE EventA)))) (VT_PATTERN (VT_FACT_BINDING $b (VT_FACT (VT_PATTERN_TYPE EventB) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (after [1,10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $c (VT_FACT (VT_PATTERN_TYPE EventC) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (finishes (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))) (VT_PATTERN (VT_FACT_BINDING $d (VT_FACT (VT_PATTERN_TYPE EventD) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (starts not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $a))))))) (VT_PATTERN (VT_FACT_BINDING $e (VT_FACT (VT_PATTERN_TYPE EventE) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT this)) (before not [1, 10] (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $b))))))))
 
 	<<StockTick( symbol=="ACME") from entry-point StreamA>>
-		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_DATA_TYPE StockTick) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT symbol)) (== "ACME")))) (entry-point StreamA)))
+		-> (VT_AND_IMPLICIT (from (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE StockTick) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT symbol)) (== "ACME")))) (entry-point StreamA)))
 
 	<<Person( ( age ( > 60 && < 70 ) || ( > 50 && < 55 ) && hair == "black" ) || ( age == 40 && hair == "pink" ) || ( age == 12 && ( hair == "yellow" || hair == "blue" ) ))>>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (&& (> 60) (< 70)) (&& (> 50) (< 55)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "black"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 40)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "pink")))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 12)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "yellow")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "blue"))))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE Person) (|| (|| (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (|| (&& (> 60) (< 70)) (&& (> 50) (< 55)))) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "black"))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 40)) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "pink")))) (&& (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT age)) (== 12)) (|| (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "yellow")) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT hair)) (== "blue"))))))))
 
 	<<org   .   drools/*comment*/	  .Message( text not matches $c#comment
 . property )
 >>
-		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_DATA_TYPE org drools Message) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT text)) (matches not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $c) (VT_ACCESSOR_ELEMENT property)))))))
+		-> (VT_AND_IMPLICIT (VT_PATTERN (VT_FACT (VT_PATTERN_TYPE org drools Message) (VT_FIELD (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT text)) (matches not (VT_ACCESSOR_PATH (VT_ACCESSOR_ELEMENT $c) (VT_ACCESSOR_ELEMENT property)))))))
 
 constraints:
 	<<eval( $var.equals("xyz") )>>




More information about the jboss-svn-commits mailing list