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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jul 22 10:14:48 EDT 2008


Author: porcelli
Date: 2008-07-22 10:14:46 -0400 (Tue, 22 Jul 2008)
New Revision: 21169

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DroolsParaphareseTypes.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g
   labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ConsequenceOffsetTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java
Log:
JBRULES-1689: added support to the new parser for declare statement and the over clause

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLLexer.java	2008-07-22 14:14:46 UTC (rev 21169)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-06-05 22:50:44
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-07-22 10:02:12
 
 	package org.drools.lang;
 
@@ -10,128 +10,133 @@
 import java.util.Map;
 import java.util.HashMap;
 public class DRLLexer extends Lexer {
-    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=52;
-    public static final int VK_FUNCTION=63;
-    public static final int END=89;
-    public static final int HexDigit=118;
-    public static final int VK_ATTRIBUTES=55;
-    public static final int VT_EXPRESSION_CHAIN=28;
-    public static final int VK_ACCUMULATE=79;
-    public static final int MISC=114;
-    public static final int VT_AND_PREFIX=21;
-    public static final int VK_QUERY=61;
-    public static final int THEN=111;
-    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=38;
-    public static final int LEFT_SQUARE=109;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=121;
-    public static final int VT_DATA_TYPE=36;
-    public static final int VK_MATCHES=67;
+    public static final int COMMA=94;
+    public static final int VT_PATTERN_TYPE=39;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=28;
+    public static final int VK_DIALECT=54;
+    public static final int VK_FUNCTION=65;
+    public static final int END=91;
+    public static final int HexDigit=123;
+    public static final int VK_ATTRIBUTES=57;
+    public static final int VT_EXPRESSION_CHAIN=30;
+    public static final int VK_ACCUMULATE=81;
+    public static final int MISC=119;
+    public static final int VT_AND_PREFIX=23;
+    public static final int VK_QUERY=63;
+    public static final int THEN=116;
+    public static final int VK_AUTO_FOCUS=49;
+    public static final int DOT=89;
+    public static final int VK_IMPORT=60;
+    public static final int VT_SLOT=15;
+    public static final int VT_PACKAGE_ID=40;
+    public static final int LEFT_SQUARE=114;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=126;
+    public static final int VT_DATA_TYPE=38;
+    public static final int VK_MATCHES=69;
     public static final int VT_FACT=6;
-    public static final int LEFT_CURLY=112;
-    public static final int LEFT_PAREN=91;
-    public static final int DOUBLE_AMPER=98;
+    public static final int LEFT_CURLY=117;
+    public static final int AT=96;
+    public static final int LEFT_PAREN=93;
+    public static final int DOUBLE_AMPER=102;
     public static final int VT_QUERY_ID=9;
-    public static final int VT_ACCESSOR_PATH=34;
+    public static final int VT_ACCESSOR_PATH=36;
     public static final int VT_LABEL=8;
-    public static final int VT_ENTRYPOINT_ID=12;
-    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=116;
-    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_GLOBAL=64;
-    public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
-    public static final int VK_REVERSE=82;
-    public static final int GRAVE_ACCENT=106;
-    public static final int VK_DURATION=51;
-    public static final int VT_SQUARE_CHUNK=18;
-    public static final int VK_FORALL=77;
+    public static final int VT_ENTRYPOINT_ID=13;
+    public static final int VK_SOUNDSLIKE=71;
+    public static final int VK_SALIENCE=55;
+    public static final int VT_FIELD=35;
+    public static final int WS=121;
+    public static final int OVER=103;
+    public static final int VK_AND=77;
+    public static final int STRING=92;
+    public static final int VT_ACCESSOR_ELEMENT=37;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=27;
+    public static final int VK_GLOBAL=66;
+    public static final int VK_REVERSE=84;
+    public static final int VT_BEHAVIOR=21;
+    public static final int GRAVE_ACCENT=111;
+    public static final int VK_DURATION=53;
+    public static final int VT_SQUARE_CHUNK=19;
+    public static final int VK_FORALL=79;
+    public static final int VT_PAREN_CHUNK=20;
     public static final int VT_COMPILATION_UNIT=4;
-    public static final int VT_PAREN_CHUNK=19;
-    public static final int VK_ENABLED=54;
-    public static final int VK_RESULT=83;
-    public static final int UnicodeEscape=119;
-    public static final int VK_PACKAGE=59;
-    public static final int VT_RULE_ID=11;
-    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=108;
-    public static final int COLON=94;
-    public static final int MULTI_LINE_COMMENT=123;
-    public static final int VT_RULE_ATTRIBUTES=15;
-    public static final int RIGHT_SQUARE=110;
-    public static final int VK_AGENDA_GROUP=49;
-    public static final int VT_FACT_OR=31;
-    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=107;
-    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=97;
-    public static final int LESS=103;
-    public static final int VT_PATTERN=29;
-    public static final int VK_DATE_EFFECTIVE=43;
-    public static final int EscapeSequence=117;
-    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=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=86;
-    public static final int NOT_EQUAL=105;
-    public static final int RIGHT_CURLY=113;
-    public static final int VK_ENTRY_POINT=71;
-    public static final int VT_AND_INFIX=23;
-    public static final int VT_PARAM_LIST=42;
-    public static final int BOOL=95;
-    public static final int VT_FROM_SOURCE=27;
-    public static final int VK_CONTAINS=66;
-    public static final int VK_LOCK_ON_ACTIVE=45;
+    public static final int VK_ENABLED=56;
+    public static final int EQUALS=98;
+    public static final int VK_RESULT=85;
+    public static final int UnicodeEscape=124;
+    public static final int VK_PACKAGE=61;
+    public static final int VT_RULE_ID=12;
+    public static final int EQUAL=105;
+    public static final int VK_NO_LOOP=48;
+    public static final int SEMICOLON=87;
+    public static final int VK_TEMPLATE=62;
+    public static final int VT_AND_IMPLICIT=22;
+    public static final int NULL=113;
+    public static final int COLON=97;
+    public static final int MULTI_LINE_COMMENT=128;
+    public static final int VT_RULE_ATTRIBUTES=16;
+    public static final int RIGHT_SQUARE=115;
+    public static final int VK_AGENDA_GROUP=51;
+    public static final int VT_FACT_OR=33;
+    public static final int VK_NOT=74;
+    public static final int VK_DATE_EXPIRES=46;
+    public static final int ARROW=104;
+    public static final int FLOAT=112;
+    public static final int VT_SLOT_ID=14;
+    public static final int VT_CURLY_CHUNK=18;
+    public static final int VT_OR_PREFIX=24;
+    public static final int DOUBLE_PIPE=101;
+    public static final int LESS=108;
+    public static final int VT_TYPE_DECLARE_ID=11;
+    public static final int VT_PATTERN=31;
+    public static final int VK_DATE_EFFECTIVE=45;
+    public static final int EscapeSequence=122;
+    public static final int VK_EXISTS=78;
+    public static final int INT=100;
+    public static final int VT_BIND_FIELD=34;
+    public static final int VK_RULE=59;
+    public static final int VK_EVAL=67;
+    public static final int VK_COLLECT=86;
+    public static final int GREATER=106;
+    public static final int VT_FACT_BINDING=32;
+    public static final int ID=88;
+    public static final int NOT_EQUAL=110;
+    public static final int RIGHT_CURLY=118;
+    public static final int VK_ENTRY_POINT=73;
+    public static final int VT_PARAM_LIST=44;
+    public static final int VT_AND_INFIX=25;
+    public static final int BOOL=99;
+    public static final int VT_FROM_SOURCE=29;
+    public static final int VK_CONTAINS=68;
+    public static final int VK_LOCK_ON_ACTIVE=47;
     public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VK_IN=73;
-    public static final int VT_RHS_CHUNK=16;
-    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=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 VK_IN=75;
+    public static final int VT_RHS_CHUNK=17;
+    public static final int VK_MEMBEROF=72;
+    public static final int GREATER_EQUAL=107;
+    public static final int VT_OR_INFIX=26;
+    public static final int DOT_STAR=90;
+    public static final int VK_OR=76;
+    public static final int VT_GLOBAL_ID=42;
+    public static final int LESS_EQUAL=109;
+    public static final int VK_WHEN=58;
+    public static final int VK_RULEFLOW_GROUP=52;
+    public static final int VT_FUNCTION_ID=43;
     public static final int EOF=-1;
     public static final int VT_CONSTRAINTS=7;
-    public static final int VT_IMPORT_ID=39;
-    public static final int EOL=115;
-    public static final int VK_INIT=80;
-    public static final int VK_ACTIVATION_GROUP=48;
-    public static final int Tokens=124;
-    public static final int OctalEscape=120;
-    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_IMPORT_ID=41;
+    public static final int EOL=120;
+    public static final int VK_INIT=82;
+    public static final int VK_ACTIVATION_GROUP=50;
+    public static final int Tokens=129;
+    public static final int OctalEscape=125;
+    public static final int VK_ACTION=83;
+    public static final int VK_FROM=80;
+    public static final int VK_EXCLUDES=70;
+    public static final int RIGHT_PAREN=95;
     public static final int VT_TEMPLATE_ID=10;
-    public static final int VK_DECLARE=62;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=122;
+    public static final int VK_DECLARE=64;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=127;
 
     	/** The standard method called to automatically emit a token at the
     	 *  outermost lexical rule.  The token object should point into the
@@ -151,18 +156,18 @@
     public DRLLexer() {;} 
     public DRLLexer(CharStream input) {
         super(input);
-        ruleMemo = new HashMap[41+1];
+        ruleMemo = new HashMap[44+1];
      }
-    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
+    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
 
     // $ANTLR start WS
     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:993:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:9: ( ( ' ' | '\\t' | '\\f' | EOL )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:17: ( ' ' | '\\t' | '\\f' | EOL )+
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:17: ( ' ' | '\\t' | '\\f' | EOL )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:17: ( ' ' | '\\t' | '\\f' | EOL )+
             int cnt1=0;
             loop1:
             do {
@@ -194,28 +199,28 @@
 
                 switch (alt1) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:993:19: ' '
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:19: ' '
             	    {
             	    match(' '); if (failed) return ;
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:994:19: '\\t'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039: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:995:19: '\\f'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1040: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:996:19: EOL
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1041:19: EOL
             	    {
             	    mEOL(); if (failed) return ;
 
@@ -248,10 +253,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:1002:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1047:6: ( ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )
             int alt2=3;
             int LA2_0 = input.LA(1);
 
@@ -270,13 +275,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1003:6: ( ( '\\r\\n' )=> '\\r\\n' | '\\r' | '\\n' )", 2, 0, input);
+                    new NoViableAltException("1048: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:1003:14: ( '\\r\\n' )=> '\\r\\n'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:14: ( '\\r\\n' )=> '\\r\\n'
                     {
                     match("\r\n"); if (failed) return ;
 
@@ -284,14 +289,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:25: '\\r'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1049: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:1005:25: '\\n'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1050:25: '\\n'
                     {
                     match('\n'); if (failed) return ;
 
@@ -313,10 +318,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:1010:2: ( ( '-' )? ( '0' .. '9' )+ )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:4: ( '-' )? ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:2: ( ( '-' )? ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:4: ( '-' )? ( '0' .. '9' )+
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:4: ( '-' )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -325,7 +330,7 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:5: '-'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -334,7 +339,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:10: ( '0' .. '9' )+
             int cnt4=0;
             loop4:
             do {
@@ -348,7 +353,7 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -379,10 +384,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:1014:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:2: ( ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:4: ( '-' )? ( '0' .. '9' )+ '.' ( '0' .. '9' )+
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:4: ( '-' )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:4: ( '-' )?
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -391,7 +396,7 @@
             }
             switch (alt5) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:5: '-'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:5: '-'
                     {
                     match('-'); if (failed) return ;
 
@@ -400,7 +405,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:10: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:10: ( '0' .. '9' )+
             int cnt6=0;
             loop6:
             do {
@@ -414,7 +419,7 @@
 
                 switch (alt6) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:11: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:11: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -432,7 +437,7 @@
             } while (true);
 
             match('.'); if (failed) return ;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:26: ( '0' .. '9' )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:26: ( '0' .. '9' )+
             int cnt7=0;
             loop7:
             do {
@@ -446,7 +451,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:27: '0' .. '9'
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1059:27: '0' .. '9'
             	    {
             	    matchRange('0','9'); if (failed) return ;
 
@@ -477,7 +482,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:1018:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:5: ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) )
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -490,19 +495,19 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1017:1: STRING : ( ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' ) | ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' ) );", 10, 0, input);
+                    new NoViableAltException("1062: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:1018:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
                     {
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:8: ( '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:9: '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
                     {
                     match('\"'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:13: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
                     loop8:
                     do {
                         int alt8=3;
@@ -518,14 +523,14 @@
 
                         switch (alt8) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:15: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:15: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:32: ~ ( '\\\\' | '\"' )
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1063:32: ~ ( '\\\\' | '\"' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -555,13 +560,13 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1064:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
                     {
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1064:8: ( '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\'' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1064:9: '\\'' ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )* '\\''
                     {
                     match('\''); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1064:14: ( EscapeSequence | ~ ( '\\\\' | '\\'' ) )*
                     loop9:
                     do {
                         int alt9=3;
@@ -577,14 +582,14 @@
 
                         switch (alt9) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:16: EscapeSequence
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1064:16: EscapeSequence
                     	    {
                     	    mEscapeSequence(); if (failed) return ;
 
                     	    }
                     	    break;
                     	case 2 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:33: ~ ( '\\\\' | '\\'' )
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1064:33: ~ ( '\\\\' | '\\'' )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFE') ) {
                     	        input.consume();
@@ -625,8 +630,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:1023:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1068:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1068:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
             {
             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();
@@ -651,7 +656,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:1027:5: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072:5: ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape )
             int alt11=3;
             int LA11_0 = input.LA(1);
 
@@ -723,7 +728,7 @@
                 default:
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1025: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("1070:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 1, input);
 
                     throw nvae;
                 }
@@ -732,13 +737,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1025: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("1070:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' ) | UnicodeEscape | OctalEscape );", 11, 0, input);
 
                 throw nvae;
             }
             switch (alt11) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1072:9: '\\\\' ( 'b' | 'B' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' | '.' | 'o' | 'x' | 'a' | 'e' | 'c' | 'd' | 'D' | 's' | 'S' | 'w' | 'W' | 'p' | 'A' | 'G' | 'Z' | 'z' | 'Q' | 'E' | '*' | '[' | ']' | '(' | ')' | '$' | '^' | '{' | '}' | '?' | '+' | '-' | '&' | '|' )
                     {
                     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)<='}') ) {
@@ -756,14 +761,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:9: UnicodeEscape
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1076:9: UnicodeEscape
                     {
                     mUnicodeEscape(); if (failed) return ;
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1032:9: OctalEscape
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1077:9: OctalEscape
                     {
                     mOctalEscape(); if (failed) return ;
 
@@ -780,7 +785,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:1037:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             int alt12=3;
             int LA12_0 = input.LA(1);
 
@@ -814,7 +819,7 @@
                 else {
                     if (backtracking>0) {failed=true; return ;}
                     NoViableAltException nvae =
-                        new NoViableAltException("1035:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
+                        new NoViableAltException("1080:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 1, input);
 
                     throw nvae;
                 }
@@ -822,31 +827,31 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1035:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 12, 0, input);
+                    new NoViableAltException("1080: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:1037:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082: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:1037:14: ( '0' .. '3' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:15: '0' .. '3'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:14: ( '0' .. '3' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:15: '0' .. '3'
                     {
                     matchRange('0','3'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:25: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:26: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:36: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1037:37: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:36: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:37: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -856,18 +861,18 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:14: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:15: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:25: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1038:26: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:25: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1083:26: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -877,11 +882,11 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:9: '\\\\' ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:9: '\\\\' ( '0' .. '7' )
                     {
                     match('\\'); if (failed) return ;
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:14: ( '0' .. '7' )
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1039:15: '0' .. '7'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:14: ( '0' .. '7' )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1084:15: '0' .. '7'
                     {
                     matchRange('0','7'); if (failed) return ;
 
@@ -901,8 +906,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:1044:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1044:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1089:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1089:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             {
             match('\\'); if (failed) return ;
             match('u'); if (failed) return ;
@@ -923,10 +928,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:1048:2: ( ( 'true' | 'false' ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:2: ( ( 'true' | 'false' ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:4: ( 'true' | 'false' )
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:4: ( 'true' | 'false' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:4: ( 'true' | 'false' )
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -939,13 +944,13 @@
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("1048:4: ( 'true' | 'false' )", 13, 0, input);
+                    new NoViableAltException("1093: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:1048:5: 'true'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:5: 'true'
                     {
                     match("true"); if (failed) return ;
 
@@ -953,7 +958,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:12: 'false'
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1093:12: 'false'
                     {
                     match("false"); if (failed) return ;
 
@@ -977,8 +982,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:1051:6: ( 'null' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1051:8: 'null'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1096:6: ( 'null' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1096:8: 'null'
             {
             match("null"); if (failed) return ;
 
@@ -992,12 +997,31 @@
     }
     // $ANTLR end NULL
 
+    // $ANTLR start OVER
+    public final void mOVER() throws RecognitionException {
+        try {
+            int _type = OVER;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1099:2: ( 'over' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1099:4: 'over'
+            {
+            match("over"); if (failed) return ;
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end OVER
+
     // $ANTLR start THEN
     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:1055:2: ( 'then' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1055:4: 'then'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1103:2: ( 'then' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1103:4: 'then'
             {
             match("then"); if (failed) return ;
 
@@ -1015,8 +1039,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:1058:5: ( 'end' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1058:7: 'end'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:5: ( 'end' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:7: 'end'
             {
             match("end"); if (failed) return ;
 
@@ -1034,8 +1058,8 @@
     public final void mGRAVE_ACCENT() throws RecognitionException {
         try {
             int _type = GRAVE_ACCENT;
-            // /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: '`'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1110:2: ( '`' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1110:4: '`'
             {
             match('`'); if (failed) return ;
 
@@ -1048,12 +1072,48 @@
     }
     // $ANTLR end GRAVE_ACCENT
 
+    // $ANTLR start AT
+    public final void mAT() throws RecognitionException {
+        try {
+            int _type = AT;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1113:4: ( '@' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1113:6: '@'
+            {
+            match('@'); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end AT
+
+    // $ANTLR start EQUALS
+    public final void mEQUALS() throws RecognitionException {
+        try {
+            int _type = EQUALS;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:2: ( '=' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1117:4: '='
+            {
+            match('='); if (failed) return ;
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end EQUALS
+
     // $ANTLR start SEMICOLON
     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:1066:2: ( ';' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1066:4: ';'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1121:2: ( ';' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1121:4: ';'
             {
             match(';'); if (failed) return ;
 
@@ -1070,8 +1130,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:1070:2: ( '.*' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1070:4: '.*'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:2: ( '.*' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1125:4: '.*'
             {
             match(".*"); if (failed) return ;
 
@@ -1089,8 +1149,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:1074:2: ( ':' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1074:4: ':'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1129:2: ( ':' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1129:4: ':'
             {
             match(':'); if (failed) return ;
 
@@ -1107,8 +1167,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:1078:2: ( '==' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1078:4: '=='
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1133:2: ( '==' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1133:4: '=='
             {
             match("=="); if (failed) return ;
 
@@ -1126,8 +1186,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:1082:2: ( '!=' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1082:4: '!='
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1137:2: ( '!=' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1137:4: '!='
             {
             match("!="); if (failed) return ;
 
@@ -1145,8 +1205,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:1086:2: ( '>' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1086:4: '>'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:2: ( '>' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1141:4: '>'
             {
             match('>'); if (failed) return ;
 
@@ -1163,8 +1223,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:1090:2: ( '>=' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1090:4: '>='
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1145:2: ( '>=' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1145:4: '>='
             {
             match(">="); if (failed) return ;
 
@@ -1182,8 +1242,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:1094:2: ( '<' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1094:4: '<'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:2: ( '<' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1149:4: '<'
             {
             match('<'); if (failed) return ;
 
@@ -1200,8 +1260,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:1098:2: ( '<=' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1098:4: '<='
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1153:2: ( '<=' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1153:4: '<='
             {
             match("<="); if (failed) return ;
 
@@ -1219,8 +1279,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:1102:2: ( '->' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1102:4: '->'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1157:2: ( '->' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1157:4: '->'
             {
             match("->"); if (failed) return ;
 
@@ -1238,8 +1298,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:1106: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:1106:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1161:2: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1161:4: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' | '\\u00c0' .. '\\u00ff' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             {
             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();
@@ -1252,7 +1312,7 @@
                 recover(mse);    throw mse;
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1106:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1161:50: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '\\u00c0' .. '\\u00ff' )*
             loop14:
             do {
                 int alt14=2;
@@ -1265,7 +1325,7 @@
 
                 switch (alt14) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             	    {
             	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(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();
@@ -1301,8 +1361,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:1110:9: ( '(' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1110:11: '('
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1165:9: ( '(' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1165:11: '('
             {
             match('('); if (failed) return ;
 
@@ -1319,8 +1379,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:1114:9: ( ')' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1114:11: ')'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1169:9: ( ')' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1169:11: ')'
             {
             match(')'); if (failed) return ;
 
@@ -1337,8 +1397,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:1118:9: ( '[' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1118:11: '['
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1173:9: ( '[' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1173:11: '['
             {
             match('['); if (failed) return ;
 
@@ -1355,8 +1415,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:1122:9: ( ']' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1122:11: ']'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1177:9: ( ']' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1177:11: ']'
             {
             match(']'); if (failed) return ;
 
@@ -1373,8 +1433,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:1126:9: ( '{' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1126:11: '{'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1181:9: ( '{' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1181:11: '{'
             {
             match('{'); if (failed) return ;
 
@@ -1391,8 +1451,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:1130:9: ( '}' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1130:11: '}'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1185:9: ( '}' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1185:11: '}'
             {
             match('}'); if (failed) return ;
 
@@ -1409,8 +1469,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:1133:7: ( ',' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1133:9: ','
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:7: ( ',' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1188:9: ','
             {
             match(','); if (failed) return ;
 
@@ -1427,8 +1487,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:1136:5: ( '.' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1136:7: '.'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1191:5: ( '.' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1191:7: '.'
             {
             match('.'); if (failed) return ;
 
@@ -1445,8 +1505,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:1140:2: ( '&&' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1140:4: '&&'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1195:2: ( '&&' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1195:4: '&&'
             {
             match("&&"); if (failed) return ;
 
@@ -1464,8 +1524,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:1144:2: ( '||' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1144:4: '||'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1199:2: ( '||' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1199:4: '||'
             {
             match("||"); if (failed) return ;
 
@@ -1483,11 +1543,11 @@
     public final void mSH_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = SH_STYLE_SINGLE_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1148:2: ( '#' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1148:4: '#' ( options {greedy=false; } : . )* EOL
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1203:2: ( '#' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1203:4: '#' ( options {greedy=false; } : . )* EOL
             {
             match('#'); if (failed) return ;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1148:8: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1203:8: ( options {greedy=false; } : . )*
             loop15:
             do {
                 int alt15=2;
@@ -1506,7 +1566,7 @@
 
                 switch (alt15) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1148:35: .
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1203:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1536,12 +1596,12 @@
     public final void mC_STYLE_SINGLE_LINE_COMMENT() throws RecognitionException {
         try {
             int _type = C_STYLE_SINGLE_LINE_COMMENT;
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1154:2: ( '//' ( options {greedy=false; } : . )* EOL )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1154:4: '//' ( options {greedy=false; } : . )* EOL
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1209:2: ( '//' ( options {greedy=false; } : . )* EOL )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1209:4: '//' ( options {greedy=false; } : . )* EOL
             {
             match("//"); if (failed) return ;
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1154:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1209:9: ( options {greedy=false; } : . )*
             loop16:
             do {
                 int alt16=2;
@@ -1560,7 +1620,7 @@
 
                 switch (alt16) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1154:36: .
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1209:36: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1590,12 +1650,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:1159:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1159:4: '/*' ( options {greedy=false; } : . )* '*/'
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1214:2: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1214:4: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); if (failed) return ;
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1159:9: ( options {greedy=false; } : . )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1214:9: ( options {greedy=false; } : . )*
             loop17:
             do {
                 int alt17=2;
@@ -1620,7 +1680,7 @@
 
                 switch (alt17) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1159:35: .
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1214:35: .
             	    {
             	    matchAny(); if (failed) return ;
 
@@ -1651,10 +1711,10 @@
     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:1163:7: ( '!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '=' | '/' | '\\'' | '\\\\' | '|' | '&' )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1218:7: ( '!' | '$' | '%' | '^' | '*' | '_' | '-' | '+' | '?' | '/' | '\\'' | '\\\\' | '|' | '&' )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             {
-            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)=='|' ) {
+            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.consume();
             failed=false;
             }
@@ -1676,244 +1736,265 @@
     // $ANTLR end MISC
 
     public void mTokens() throws RecognitionException {
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:8: ( WS | INT | FLOAT | STRING | BOOL | NULL | THEN | END | GRAVE_ACCENT | SEMICOLON | DOT_STAR | COLON | EQUAL | NOT_EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | ARROW | ID | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | COMMA | DOT | DOUBLE_AMPER | DOUBLE_PIPE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC )
-        int alt18=34;
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:8: ( WS | INT | FLOAT | STRING | BOOL | NULL | OVER | THEN | END | GRAVE_ACCENT | AT | EQUALS | SEMICOLON | DOT_STAR | COLON | EQUAL | NOT_EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | ARROW | ID | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | COMMA | DOT | DOUBLE_AMPER | DOUBLE_PIPE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC )
+        int alt18=37;
         alt18 = dfa18.predict(input);
         switch (alt18) {
             case 1 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:10: WS
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:10: WS
                 {
                 mWS(); if (failed) return ;
 
                 }
                 break;
             case 2 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:13: INT
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:13: INT
                 {
                 mINT(); if (failed) return ;
 
                 }
                 break;
             case 3 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:17: FLOAT
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:17: FLOAT
                 {
                 mFLOAT(); if (failed) return ;
 
                 }
                 break;
             case 4 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:23: STRING
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:23: STRING
                 {
                 mSTRING(); if (failed) return ;
 
                 }
                 break;
             case 5 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:30: BOOL
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:30: BOOL
                 {
                 mBOOL(); if (failed) return ;
 
                 }
                 break;
             case 6 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:35: NULL
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:35: NULL
                 {
                 mNULL(); if (failed) return ;
 
                 }
                 break;
             case 7 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:40: THEN
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:40: OVER
                 {
-                mTHEN(); if (failed) return ;
+                mOVER(); if (failed) return ;
 
                 }
                 break;
             case 8 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:45: END
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:45: THEN
                 {
-                mEND(); if (failed) return ;
+                mTHEN(); if (failed) return ;
 
                 }
                 break;
             case 9 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:49: GRAVE_ACCENT
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:50: END
                 {
-                mGRAVE_ACCENT(); if (failed) return ;
+                mEND(); if (failed) return ;
 
                 }
                 break;
             case 10 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:62: SEMICOLON
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:54: GRAVE_ACCENT
                 {
-                mSEMICOLON(); if (failed) return ;
+                mGRAVE_ACCENT(); if (failed) return ;
 
                 }
                 break;
             case 11 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:72: DOT_STAR
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:67: AT
                 {
-                mDOT_STAR(); if (failed) return ;
+                mAT(); if (failed) return ;
 
                 }
                 break;
             case 12 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:81: COLON
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:70: EQUALS
                 {
-                mCOLON(); if (failed) return ;
+                mEQUALS(); if (failed) return ;
 
                 }
                 break;
             case 13 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:87: EQUAL
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:77: SEMICOLON
                 {
-                mEQUAL(); if (failed) return ;
+                mSEMICOLON(); if (failed) return ;
 
                 }
                 break;
             case 14 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:93: NOT_EQUAL
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:87: DOT_STAR
                 {
-                mNOT_EQUAL(); if (failed) return ;
+                mDOT_STAR(); if (failed) return ;
 
                 }
                 break;
             case 15 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:103: GREATER
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:96: COLON
                 {
-                mGREATER(); if (failed) return ;
+                mCOLON(); if (failed) return ;
 
                 }
                 break;
             case 16 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:111: GREATER_EQUAL
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:102: EQUAL
                 {
-                mGREATER_EQUAL(); if (failed) return ;
+                mEQUAL(); if (failed) return ;
 
                 }
                 break;
             case 17 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:125: LESS
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:108: NOT_EQUAL
                 {
-                mLESS(); if (failed) return ;
+                mNOT_EQUAL(); if (failed) return ;
 
                 }
                 break;
             case 18 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:130: LESS_EQUAL
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:118: GREATER
                 {
-                mLESS_EQUAL(); if (failed) return ;
+                mGREATER(); if (failed) return ;
 
                 }
                 break;
             case 19 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:141: ARROW
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:126: GREATER_EQUAL
                 {
-                mARROW(); if (failed) return ;
+                mGREATER_EQUAL(); if (failed) return ;
 
                 }
                 break;
             case 20 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:147: ID
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:140: LESS
                 {
-                mID(); if (failed) return ;
+                mLESS(); if (failed) return ;
 
                 }
                 break;
             case 21 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:150: LEFT_PAREN
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:145: LESS_EQUAL
                 {
-                mLEFT_PAREN(); if (failed) return ;
+                mLESS_EQUAL(); if (failed) return ;
 
                 }
                 break;
             case 22 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:161: RIGHT_PAREN
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:156: ARROW
                 {
-                mRIGHT_PAREN(); if (failed) return ;
+                mARROW(); if (failed) return ;
 
                 }
                 break;
             case 23 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:173: LEFT_SQUARE
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:162: ID
                 {
-                mLEFT_SQUARE(); if (failed) return ;
+                mID(); if (failed) return ;
 
                 }
                 break;
             case 24 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:185: RIGHT_SQUARE
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:165: LEFT_PAREN
                 {
-                mRIGHT_SQUARE(); if (failed) return ;
+                mLEFT_PAREN(); if (failed) return ;
 
                 }
                 break;
             case 25 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:198: LEFT_CURLY
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:176: RIGHT_PAREN
                 {
-                mLEFT_CURLY(); if (failed) return ;
+                mRIGHT_PAREN(); if (failed) return ;
 
                 }
                 break;
             case 26 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:209: RIGHT_CURLY
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:188: LEFT_SQUARE
                 {
-                mRIGHT_CURLY(); if (failed) return ;
+                mLEFT_SQUARE(); if (failed) return ;
 
                 }
                 break;
             case 27 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:221: COMMA
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:200: RIGHT_SQUARE
                 {
-                mCOMMA(); if (failed) return ;
+                mRIGHT_SQUARE(); if (failed) return ;
 
                 }
                 break;
             case 28 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:227: DOT
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:213: LEFT_CURLY
                 {
-                mDOT(); if (failed) return ;
+                mLEFT_CURLY(); if (failed) return ;
 
                 }
                 break;
             case 29 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:231: DOUBLE_AMPER
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:224: RIGHT_CURLY
                 {
-                mDOUBLE_AMPER(); if (failed) return ;
+                mRIGHT_CURLY(); if (failed) return ;
 
                 }
                 break;
             case 30 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:244: DOUBLE_PIPE
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:236: COMMA
                 {
-                mDOUBLE_PIPE(); if (failed) return ;
+                mCOMMA(); if (failed) return ;
 
                 }
                 break;
             case 31 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:256: SH_STYLE_SINGLE_LINE_COMMENT
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:242: DOT
                 {
-                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mDOT(); if (failed) return ;
 
                 }
                 break;
             case 32 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:285: C_STYLE_SINGLE_LINE_COMMENT
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:246: DOUBLE_AMPER
                 {
-                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+                mDOUBLE_AMPER(); if (failed) return ;
 
                 }
                 break;
             case 33 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:313: MULTI_LINE_COMMENT
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:259: DOUBLE_PIPE
                 {
-                mMULTI_LINE_COMMENT(); if (failed) return ;
+                mDOUBLE_PIPE(); if (failed) return ;
 
                 }
                 break;
             case 34 :
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:332: MISC
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:271: SH_STYLE_SINGLE_LINE_COMMENT
                 {
+                mSH_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 35 :
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:300: C_STYLE_SINGLE_LINE_COMMENT
+                {
+                mC_STYLE_SINGLE_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 36 :
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:328: MULTI_LINE_COMMENT
+                {
+                mMULTI_LINE_COMMENT(); if (failed) return ;
+
+                }
+                break;
+            case 37 :
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1:347: MISC
+                {
                 mMISC(); if (failed) return ;
 
                 }
@@ -1925,8 +2006,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:1003:14: ( '\\r\\n' )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:16: '\\r\\n'
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:14: ( '\\r\\n' )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1048:16: '\\r\\n'
         {
         match("\r\n"); if (failed) return ;
 
@@ -1953,72 +2034,78 @@
 
     protected DFA18 dfa18 = new DFA18(this);
     static final String DFA18_eotS =
-        "\2\uffff\1\37\1\41\1\uffff\1\37\4\36\2\uffff\1\51\1\uffff\2\37\1"+
-        "\55\1\57\10\uffff\2\37\1\uffff\1\37\5\uffff\5\36\14\uffff\4\36\1"+
-        "\75\1\76\1\77\1\36\1\101\3\uffff\1\77\1\uffff";
+        "\2\uffff\1\41\1\43\1\uffff\1\41\5\40\2\uffff\1\54\1\uffff\1\56\1"+
+        "\uffff\1\41\1\61\1\63\10\uffff\2\41\1\uffff\1\41\5\uffff\6\40\15"+
+        "\uffff\5\40\1\103\1\104\1\105\1\40\1\107\1\110\3\uffff\1\104\2\uffff";
     static final String DFA18_eofS =
-        "\102\uffff";
+        "\111\uffff";
     static final String DFA18_minS =
-        "\1\11\1\uffff\1\60\1\56\1\uffff\1\0\1\150\1\141\1\165\1\156\2\uffff"+
-        "\1\52\1\uffff\4\75\10\uffff\1\46\1\174\1\uffff\1\52\5\uffff\1\145"+
-        "\1\165\2\154\1\144\14\uffff\1\156\1\145\1\163\1\154\3\60\1\145\1"+
-        "\60\3\uffff\1\60\1\uffff";
+        "\1\11\1\uffff\1\60\1\56\1\uffff\1\0\1\150\1\141\1\165\1\166\1\156"+
+        "\2\uffff\1\75\1\uffff\1\52\1\uffff\3\75\10\uffff\1\46\1\174\1\uffff"+
+        "\1\52\5\uffff\1\165\1\145\2\154\1\145\1\144\15\uffff\1\145\1\156"+
+        "\1\163\1\154\1\162\3\60\1\145\2\60\3\uffff\1\60\2\uffff";
     static final String DFA18_maxS =
-        "\1\u00ff\1\uffff\1\76\1\71\1\uffff\1\ufffe\1\162\1\141\1\165\1\156"+
-        "\2\uffff\1\52\1\uffff\4\75\10\uffff\1\46\1\174\1\uffff\1\57\5\uffff"+
-        "\1\145\1\165\2\154\1\144\14\uffff\1\156\1\145\1\163\1\154\3\u00ff"+
-        "\1\145\1\u00ff\3\uffff\1\u00ff\1\uffff";
+        "\1\u00ff\1\uffff\1\76\1\71\1\uffff\1\ufffe\1\162\1\141\1\165\1\166"+
+        "\1\156\2\uffff\1\75\1\uffff\1\52\1\uffff\3\75\10\uffff\1\46\1\174"+
+        "\1\uffff\1\57\5\uffff\1\165\1\145\2\154\1\145\1\144\15\uffff\1\145"+
+        "\1\156\1\163\1\154\1\162\3\u00ff\1\145\2\u00ff\3\uffff\1\u00ff\2"+
+        "\uffff";
     static final String DFA18_acceptS =
-        "\1\uffff\1\1\2\uffff\1\4\5\uffff\1\11\1\12\1\uffff\1\14\4\uffff"+
-        "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33\2\uffff\1\37\1\uffff\1"+
-        "\24\1\42\1\23\1\2\1\3\5\uffff\1\13\1\34\1\15\1\16\1\20\1\17\1\22"+
-        "\1\21\1\35\1\36\1\40\1\41\11\uffff\1\10\1\7\1\5\1\uffff\1\6";
+        "\1\uffff\1\1\2\uffff\1\4\6\uffff\1\12\1\13\1\uffff\1\15\1\uffff"+
+        "\1\17\3\uffff\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36\2\uffff\1"+
+        "\42\1\uffff\1\27\1\45\1\26\1\2\1\3\6\uffff\1\20\1\14\1\16\1\37\1"+
+        "\21\1\23\1\22\1\25\1\24\1\40\1\41\1\44\1\43\13\uffff\1\11\1\5\1"+
+        "\10\1\uffff\1\6\1\7";
     static final String DFA18_specialS =
-        "\102\uffff}>";
+        "\111\uffff}>";
     static final String[] DFA18_transitionS = {
-            "\2\1\1\uffff\2\1\22\uffff\1\1\1\17\1\4\1\34\1\22\1\37\1\32\1"+
-            "\5\1\23\1\24\2\37\1\31\1\2\1\14\1\35\12\3\1\15\1\13\1\21\1\16"+
-            "\1\20\2\37\32\36\1\25\1\37\1\26\1\37\1\22\1\12\4\36\1\11\1\7"+
-            "\7\36\1\10\5\36\1\6\6\36\1\27\1\33\1\30\102\uffff\100\36",
+            "\2\1\1\uffff\2\1\22\uffff\1\1\1\21\1\4\1\36\1\24\1\41\1\34\1"+
+            "\5\1\25\1\26\2\41\1\33\1\2\1\17\1\37\12\3\1\20\1\16\1\23\1\15"+
+            "\1\22\1\41\1\14\32\40\1\27\1\41\1\30\1\41\1\24\1\13\4\40\1\12"+
+            "\1\7\7\40\1\10\1\11\4\40\1\6\6\40\1\31\1\35\1\32\102\uffff\100"+
+            "\40",
             "",
-            "\12\3\4\uffff\1\40",
-            "\1\42\1\uffff\12\3",
+            "\12\3\4\uffff\1\42",
+            "\1\44\1\uffff\12\3",
             "",
             "\uffff\4",
-            "\1\43\11\uffff\1\44",
-            "\1\45",
-            "\1\46",
+            "\1\46\11\uffff\1\45",
             "\1\47",
+            "\1\50",
+            "\1\51",
+            "\1\52",
             "",
             "",
-            "\1\50",
-            "",
-            "\1\52",
             "\1\53",
-            "\1\54",
-            "\1\56",
             "",
+            "\1\55",
             "",
+            "\1\57",
+            "\1\60",
+            "\1\62",
             "",
             "",
             "",
             "",
             "",
             "",
-            "\1\60",
-            "\1\61",
             "",
-            "\1\63\4\uffff\1\62",
             "",
+            "\1\64",
+            "\1\65",
             "",
+            "\1\66\4\uffff\1\67",
             "",
             "",
             "",
-            "\1\64",
-            "\1\65",
-            "\1\66",
-            "\1\67",
+            "",
+            "",
             "\1\70",
+            "\1\71",
+            "\1\72",
+            "\1\73",
+            "\1\74",
+            "\1\75",
             "",
             "",
             "",
@@ -2031,24 +2118,29 @@
             "",
             "",
             "",
-            "\1\71",
-            "\1\72",
-            "\1\73",
-            "\1\74",
-            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36\105\uffff\100"+
-            "\36",
-            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36\105\uffff\100"+
-            "\36",
-            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36\105\uffff\100"+
-            "\36",
+            "",
+            "\1\76",
+            "\1\77",
             "\1\100",
-            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36\105\uffff\100"+
-            "\36",
+            "\1\101",
+            "\1\102",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40\105\uffff\100"+
+            "\40",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40\105\uffff\100"+
+            "\40",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40\105\uffff\100"+
+            "\40",
+            "\1\106",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40\105\uffff\100"+
+            "\40",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40\105\uffff\100"+
+            "\40",
             "",
             "",
             "",
-            "\12\36\7\uffff\32\36\4\uffff\1\36\1\uffff\32\36\105\uffff\100"+
-            "\36",
+            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40\105\uffff\100"+
+            "\40",
+            "",
             ""
     };
 
@@ -2082,7 +2174,7 @@
             this.transition = DFA18_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( WS | INT | FLOAT | STRING | BOOL | NULL | THEN | END | GRAVE_ACCENT | SEMICOLON | DOT_STAR | COLON | EQUAL | NOT_EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | ARROW | ID | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | COMMA | DOT | DOUBLE_AMPER | DOUBLE_PIPE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC );";
+            return "1:1: Tokens : ( WS | INT | FLOAT | STRING | BOOL | NULL | OVER | THEN | END | GRAVE_ACCENT | AT | EQUALS | SEMICOLON | DOT_STAR | COLON | EQUAL | NOT_EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | ARROW | ID | LEFT_PAREN | RIGHT_PAREN | LEFT_SQUARE | RIGHT_SQUARE | LEFT_CURLY | RIGHT_CURLY | COMMA | DOT | DOUBLE_AMPER | DOUBLE_PIPE | SH_STYLE_SINGLE_LINE_COMMENT | C_STYLE_SINGLE_LINE_COMMENT | MULTI_LINE_COMMENT | MISC );";
         }
     }
  

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DRLParser.java	2008-07-22 14:14:46 UTC (rev 21169)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-06-05 23:49:53
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g 2008-07-22 10:02:11
 
 	package org.drools.lang;
 	
@@ -16,133 +16,138 @@
 
 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_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", "GRAVE_ACCENT", "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_TYPE_DECLARE_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_BEHAVIOR", "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", "AT", "COLON", "EQUALS", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "OVER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "GRAVE_ACCENT", "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=92;
-    public static final int VT_PATTERN_TYPE=37;
-    public static final int VT_ACCUMULATE_ID_CLAUSE=26;
-    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=118;
-    public static final int VK_ATTRIBUTES=55;
-    public static final int VT_EXPRESSION_CHAIN=28;
-    public static final int VK_ACCUMULATE=79;
-    public static final int MISC=114;
-    public static final int VT_AND_PREFIX=21;
-    public static final int VK_QUERY=61;
-    public static final int THEN=111;
-    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=38;
-    public static final int LEFT_SQUARE=109;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=121;
-    public static final int VT_DATA_TYPE=36;
+    public static final int COMMA=94;
+    public static final int VT_PATTERN_TYPE=39;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=28;
+    public static final int VK_DIALECT=54;
+    public static final int VK_FUNCTION=65;
+    public static final int END=91;
+    public static final int HexDigit=123;
+    public static final int VK_ATTRIBUTES=57;
+    public static final int VT_EXPRESSION_CHAIN=30;
+    public static final int VK_ACCUMULATE=81;
+    public static final int MISC=119;
+    public static final int VT_AND_PREFIX=23;
+    public static final int VK_QUERY=63;
+    public static final int THEN=116;
+    public static final int VK_AUTO_FOCUS=49;
+    public static final int DOT=89;
+    public static final int VK_IMPORT=60;
+    public static final int VT_SLOT=15;
+    public static final int VT_PACKAGE_ID=40;
+    public static final int LEFT_SQUARE=114;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=126;
+    public static final int VT_DATA_TYPE=38;
     public static final int VT_FACT=6;
-    public static final int VK_MATCHES=67;
-    public static final int LEFT_CURLY=112;
-    public static final int DOUBLE_AMPER=98;
-    public static final int LEFT_PAREN=91;
+    public static final int VK_MATCHES=69;
+    public static final int LEFT_CURLY=117;
+    public static final int AT=96;
+    public static final int DOUBLE_AMPER=102;
+    public static final int LEFT_PAREN=93;
     public static final int VT_QUERY_ID=9;
-    public static final int VT_ACCESSOR_PATH=34;
+    public static final int VT_ACCESSOR_PATH=36;
     public static final int VT_LABEL=8;
-    public static final int VT_ENTRYPOINT_ID=12;
-    public static final int WS=116;
-    public static final int VT_FIELD=33;
-    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=64;
-    public static final int VK_REVERSE=82;
-    public static final int GRAVE_ACCENT=106;
-    public static final int VK_DURATION=51;
-    public static final int VT_SQUARE_CHUNK=18;
-    public static final int VK_FORALL=77;
+    public static final int VT_ENTRYPOINT_ID=13;
+    public static final int WS=121;
+    public static final int VT_FIELD=35;
+    public static final int VK_SALIENCE=55;
+    public static final int VK_SOUNDSLIKE=71;
+    public static final int OVER=103;
+    public static final int STRING=92;
+    public static final int VK_AND=77;
+    public static final int VT_ACCESSOR_ELEMENT=37;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=27;
+    public static final int VK_GLOBAL=66;
+    public static final int VK_REVERSE=84;
+    public static final int VT_BEHAVIOR=21;
+    public static final int GRAVE_ACCENT=111;
+    public static final int VK_DURATION=53;
+    public static final int VT_SQUARE_CHUNK=19;
+    public static final int VK_FORALL=79;
+    public static final int VT_PAREN_CHUNK=20;
     public static final int VT_COMPILATION_UNIT=4;
-    public static final int VT_PAREN_CHUNK=19;
-    public static final int VK_ENABLED=54;
-    public static final int VK_RESULT=83;
-    public static final int UnicodeEscape=119;
-    public static final int VK_PACKAGE=59;
-    public static final int VT_RULE_ID=11;
-    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=108;
-    public static final int COLON=94;
-    public static final int MULTI_LINE_COMMENT=123;
-    public static final int VT_RULE_ATTRIBUTES=15;
-    public static final int RIGHT_SQUARE=110;
-    public static final int VK_AGENDA_GROUP=49;
-    public static final int VT_FACT_OR=31;
-    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=107;
-    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=97;
-    public static final int LESS=103;
-    public static final int VT_PATTERN=29;
-    public static final int VK_DATE_EFFECTIVE=43;
-    public static final int EscapeSequence=117;
-    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=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=86;
-    public static final int NOT_EQUAL=105;
-    public static final int RIGHT_CURLY=113;
-    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=71;
-    public static final int VT_FROM_SOURCE=27;
-    public static final int VK_LOCK_ON_ACTIVE=45;
-    public static final int VK_CONTAINS=66;
+    public static final int VK_ENABLED=56;
+    public static final int EQUALS=98;
+    public static final int VK_RESULT=85;
+    public static final int UnicodeEscape=124;
+    public static final int VK_PACKAGE=61;
+    public static final int VT_RULE_ID=12;
+    public static final int EQUAL=105;
+    public static final int VK_NO_LOOP=48;
+    public static final int SEMICOLON=87;
+    public static final int VK_TEMPLATE=62;
+    public static final int VT_AND_IMPLICIT=22;
+    public static final int NULL=113;
+    public static final int COLON=97;
+    public static final int MULTI_LINE_COMMENT=128;
+    public static final int VT_RULE_ATTRIBUTES=16;
+    public static final int RIGHT_SQUARE=115;
+    public static final int VK_AGENDA_GROUP=51;
+    public static final int VT_FACT_OR=33;
+    public static final int VK_NOT=74;
+    public static final int VK_DATE_EXPIRES=46;
+    public static final int ARROW=104;
+    public static final int FLOAT=112;
+    public static final int VT_SLOT_ID=14;
+    public static final int VT_CURLY_CHUNK=18;
+    public static final int VT_OR_PREFIX=24;
+    public static final int DOUBLE_PIPE=101;
+    public static final int LESS=108;
+    public static final int VT_TYPE_DECLARE_ID=11;
+    public static final int VT_PATTERN=31;
+    public static final int VK_DATE_EFFECTIVE=45;
+    public static final int EscapeSequence=122;
+    public static final int VK_EXISTS=78;
+    public static final int INT=100;
+    public static final int VT_BIND_FIELD=34;
+    public static final int VK_RULE=59;
+    public static final int VK_EVAL=67;
+    public static final int VK_COLLECT=86;
+    public static final int GREATER=106;
+    public static final int VT_FACT_BINDING=32;
+    public static final int ID=88;
+    public static final int NOT_EQUAL=110;
+    public static final int RIGHT_CURLY=118;
+    public static final int BOOL=99;
+    public static final int VT_AND_INFIX=25;
+    public static final int VT_PARAM_LIST=44;
+    public static final int VK_ENTRY_POINT=73;
+    public static final int VT_FROM_SOURCE=29;
+    public static final int VK_LOCK_ON_ACTIVE=47;
+    public static final int VK_CONTAINS=68;
     public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VK_IN=73;
-    public static final int VT_RHS_CHUNK=16;
-    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=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 VK_IN=75;
+    public static final int VT_RHS_CHUNK=17;
+    public static final int GREATER_EQUAL=107;
+    public static final int VK_MEMBEROF=72;
+    public static final int VT_OR_INFIX=26;
+    public static final int DOT_STAR=90;
+    public static final int VK_OR=76;
+    public static final int VT_GLOBAL_ID=42;
+    public static final int LESS_EQUAL=109;
+    public static final int VK_WHEN=58;
+    public static final int VK_RULEFLOW_GROUP=52;
+    public static final int VT_FUNCTION_ID=43;
     public static final int EOF=-1;
     public static final int VT_CONSTRAINTS=7;
-    public static final int EOL=115;
-    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=120;
-    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 EOL=120;
+    public static final int VT_IMPORT_ID=41;
+    public static final int VK_ACTIVATION_GROUP=50;
+    public static final int VK_INIT=82;
+    public static final int OctalEscape=125;
+    public static final int VK_ACTION=83;
+    public static final int VK_EXCLUDES=70;
+    public static final int VK_FROM=80;
+    public static final int RIGHT_PAREN=95;
     public static final int VT_TEMPLATE_ID=10;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=122;
-    public static final int VK_DECLARE=62;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=127;
+    public static final int VK_DECLARE=64;
 
         public DRLParser(TokenStream input) {
             super(input);
-            ruleMemo = new HashMap[140+1];
+            ruleMemo = new HashMap[147+1];
          }
         
     protected TreeAdaptor adaptor = new CommonTreeAdaptor();
@@ -155,7 +160,7 @@
     }
 
     public String[] getTokenNames() { return tokenNames; }
-    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
+    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g"; }
 
 
     	private Stack<Map<Integer, String>> paraphrases = new Stack<Map<Integer, String>>();
@@ -276,7 +281,7 @@
     };
 
     // $ANTLR start compilation_unit
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:242:1: compilation_unit : ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:244: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);
@@ -294,18 +299,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:243: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:243:4: ( package_statement )? ( statement )* EOF
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:245:2: ( ( package_statement )? ( statement )* EOF -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:245:4: ( package_statement )? ( statement )* EOF
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:243:4: ( package_statement )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:245:4: ( package_statement )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
-            if ( (LA1_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(valida!
 teIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords!
 .TEMPLATE))||((validateLT(1, "import") && validateLT(2, "function") )&
&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))))) {
+            if ( (LA1_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(Dr!
 oolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(valid!
 ateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKe
y(DroolsSoftKeywords.PACKAGE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeyw!
 ords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
                 int LA1_1 = input.LA(2);
 
-                if ( (LA1_1==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(D!
 roolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))))) {
-                    int LA1_6 = input.LA(3);
+                if ( (LA1_1==ID) && ((((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKey!
 words.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywo!
 rds.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(
(validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSof!
 tKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEM!
 PLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIden
tifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))))) {
+                    int LA1_4 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.PACKAGE))) ) {
                         alt1=1;
@@ -314,9 +319,9 @@
             }
             switch (alt1) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:243:4: package_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:245:4: package_statement
                     {
-                    pushFollow(FOLLOW_package_statement_in_compilation_unit400);
+                    pushFollow(FOLLOW_package_statement_in_compilation_unit408);
                     package_statement1=package_statement();
                     _fsp--;
                     if (failed) return retval;
@@ -327,22 +332,22 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:244:3: ( statement )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:246:3: ( statement )*
             loop2:
             do {
                 int alt2=2;
                 int LA2_0 = input.LA(1);
 
-                if ( (LA2_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(v!
 alidateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
+                if ( (LA2_0==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(valid!
 ateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
                     alt2=1;
                 }
 
 
                 switch (alt2) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:244:3: statement
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:246:3: statement
             	    {
-            	    pushFollow(FOLLOW_statement_in_compilation_unit405);
+            	    pushFollow(FOLLOW_statement_in_compilation_unit413);
             	    statement2=statement();
             	    _fsp--;
             	    if (failed) return retval;
@@ -357,7 +362,7 @@
             } while (true);
 
             EOF3=(Token)input.LT(1);
-            match(input,EOF,FOLLOW_EOF_in_compilation_unit410); if (failed) return retval;
+            match(input,EOF,FOLLOW_EOF_in_compilation_unit418); if (failed) return retval;
             if ( backtracking==0 ) stream_EOF.add(EOF3);
 
 
@@ -372,20 +377,20 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 246:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            // 248:3: -> ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:246:6: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:248:6: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
                 {
                 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:246:28: ( package_statement )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:248: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:246:47: ( statement )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:248:47: ( statement )*
                 while ( stream_statement.hasNext() ) {
                     adaptor.addChild(root_1, stream_statement.next());
 
@@ -429,7 +434,7 @@
     };
 
     // $ANTLR start package_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:254:1: package_statement : package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:256: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);
@@ -448,20 +453,20 @@
         RewriteRuleSubtreeStream stream_package_id=new RewriteRuleSubtreeStream(adaptor,"rule package_id");
          pushParaphrases(DroolsParaphareseTypes.PACKAGE); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:257: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:257:4: package_key package_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:259:2: ( package_key package_id ( SEMICOLON )? -> ^( package_key package_id ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:259:4: package_key package_id ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_package_key_in_package_statement461);
+            pushFollow(FOLLOW_package_key_in_package_statement469);
             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_statement463);
+            pushFollow(FOLLOW_package_id_in_package_statement471);
             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:257:27: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:259:27: ( SEMICOLON )?
             int alt3=2;
             int LA3_0 = input.LA(1);
 
@@ -470,10 +475,10 @@
             }
             switch (alt3) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:257:27: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:259:27: SEMICOLON
                     {
                     SEMICOLON6=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement465); if (failed) return retval;
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_package_statement473); if (failed) return retval;
                     if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON6);
 
 
@@ -494,9 +499,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 258:3: -> ^( package_key package_id )
+            // 260:3: -> ^( package_key package_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:258:6: ^( package_key package_id )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:260:6: ^( package_key package_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_package_key.nextNode(), root_1);
@@ -538,7 +543,7 @@
     };
 
     // $ANTLR start package_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:261:1: package_id : id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:263:1: package_id : id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) ;
     public final package_id_return package_id() throws RecognitionException {
         package_id_return retval = new package_id_return();
         retval.start = input.LT(1);
@@ -553,17 +558,17 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:262:2: (id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:262:4: id+= ID (id+= DOT id+= ID )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:264:2: (id+= ID (id+= DOT id+= ID )* -> ^( VT_PACKAGE_ID ( ID )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:264:4: id+= ID (id+= DOT id+= ID )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_package_id489); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_package_id497); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if (list_id==null) list_id=new ArrayList();
             list_id.add(id);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:262:11: (id+= DOT id+= ID )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:264:11: (id+= DOT id+= ID )*
             loop4:
             do {
                 int alt4=2;
@@ -576,17 +581,17 @@
 
                 switch (alt4) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:262:13: id+= DOT id+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:264:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_package_id495); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_package_id503); if (failed) return retval;
             	    if ( backtracking==0 ) stream_DOT.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
             	    list_id.add(id);
 
             	    id=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_package_id499); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_package_id507); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
@@ -616,9 +621,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 264:3: -> ^( VT_PACKAGE_ID ( ID )+ )
+            // 266:3: -> ^( VT_PACKAGE_ID ( ID )+ )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:264:6: ^( VT_PACKAGE_ID ( ID )+ )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:266:6: ^( VT_PACKAGE_ID ( ID )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PACKAGE_ID, "VT_PACKAGE_ID"), root_1);
@@ -664,7 +669,7 @@
     };
 
     // $ANTLR start statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:267:1: statement : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:269:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );
     public final statement_return statement() throws RecognitionException {
         statement_return retval = new statement_return();
         retval.start = input.LT(1);
@@ -683,23 +688,114 @@
 
         template_return template12 = null;
 
-        rule_return rule13 = null;
+        type_declaration_return type_declaration13 = null;
 
-        query_return query14 = null;
+        rule_return rule14 = null;
 
+        query_return query15 = null;
 
 
+
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:268:2: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | template | rule | query )
-            int alt5=8;
-            alt5 = dfa5.predict(input);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:3: ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query )
+            int alt5=9;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") !
 && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(val!
 idateIdentifierKey(DroolsSoftKeywords.ENABLED))||((validateLT(1, Drool
sSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && v!
 alidateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
+                int LA5_1 = input.LA(2);
+
+                if ( (LA5_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-")!
  && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                    alt5=1;
+                }
+                else if ( (LA5_1==ID) && ((((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywor!
 ds.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(!
 (validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(D
roolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdent!
 ifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords!
 .DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((va
lidateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))||((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))))) {
+                    int LA5_3 = input.LA(3);
+
+                    if ( (((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) ) {
+                        alt5=2;
+                    }
+                    else if ( ((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {
+                        alt5=3;
+                    }
+                    else if ( ((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))) ) {
+                        alt5=4;
+                    }
+                    else if ( ((validateIdentifierKey(DroolsSoftKeywords.FUNCTION))) ) {
+                        alt5=5;
+                    }
+                    else if ( (((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))) ) {
+                        alt5=6;
+                    }
+                    else if ( (((validateLT(1, DroolsSoftKeywords.DECLARE))&&(validateIdentifierKey(DroolsSoftKeywords.DECLARE)))) ) {
+                        alt5=7;
+                    }
+                    else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {
+                        alt5=8;
+                    }
+                    else if ( ((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {
+                        alt5=9;
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("269:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 3, input);
+
+                        throw nvae;
+                    }
+                }
+                else if ( (LA5_1==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(Dro!
 olsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))||((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))))) {
+                    int LA5_4 = input.LA(3);
+
+                    if ( ((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {
+                        alt5=1;
+                    }
+                    else if ( (((validateLT(1, DroolsSoftKeywords.TEMPLATE))&&(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))) ) {
+                        alt5=6;
+                    }
+                    else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {
+                        alt5=8;
+                    }
+                    else if ( ((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {
+                        alt5=9;
+                    }
+                    else {
+                        if (backtracking>0) {failed=true; return retval;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("269:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 4, input);
+
+                        throw nvae;
+                    }
+                }
+                else if ( (LA5_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {
+                    alt5=1;
+                }
+                else if ( (LA5_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
+                    alt5=1;
+                }
+                else if ( (LA5_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
+                    alt5=1;
+                }
+                else {
+                    if (backtracking>0) {failed=true; return retval;}
+                    NoViableAltException nvae =
+                        new NoViableAltException("269:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 1, input);
+
+                    throw nvae;
+                }
+            }
+            else {
+                if (backtracking>0) {failed=true; return retval;}
+                NoViableAltException nvae =
+                    new NoViableAltException("269:1: statement options {k=2; } : ( rule_attribute | {...}? => function_import_statement | import_statement | global | function | {...}? => template | {...}? => type_declaration | rule | query );", 5, 0, input);
+
+                throw nvae;
+            }
             switch (alt5) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:268:4: rule_attribute
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:5: rule_attribute
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_rule_attribute_in_statement527);
+                    pushFollow(FOLLOW_rule_attribute_in_statement545);
                     rule_attribute7=rule_attribute();
                     _fsp--;
                     if (failed) return retval;
@@ -708,7 +804,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:269:3: {...}? => function_import_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:273:3: {...}? => function_import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -716,7 +812,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_statement534);
+                    pushFollow(FOLLOW_function_import_statement_in_statement552);
                     function_import_statement8=function_import_statement();
                     _fsp--;
                     if (failed) return retval;
@@ -725,11 +821,11 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:270:4: import_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:274:4: import_statement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_import_statement_in_statement540);
+                    pushFollow(FOLLOW_import_statement_in_statement558);
                     import_statement9=import_statement();
                     _fsp--;
                     if (failed) return retval;
@@ -738,11 +834,11 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:271:4: global
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:275:4: global
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_global_in_statement546);
+                    pushFollow(FOLLOW_global_in_statement564);
                     global10=global();
                     _fsp--;
                     if (failed) return retval;
@@ -751,11 +847,11 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:272:4: function
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:276:4: function
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_function_in_statement552);
+                    pushFollow(FOLLOW_function_in_statement570);
                     function11=function();
                     _fsp--;
                     if (failed) return retval;
@@ -764,11 +860,15 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:273:4: template
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:277:4: {...}? => template
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_template_in_statement557);
+                    if ( !((validateLT(1, DroolsSoftKeywords.TEMPLATE))) ) {
+                        if (backtracking>0) {failed=true; return retval;}
+                        throw new FailedPredicateException(input, "statement", "(validateLT(1, DroolsSoftKeywords.TEMPLATE))");
+                    }
+                    pushFollow(FOLLOW_template_in_statement578);
                     template12=template();
                     _fsp--;
                     if (failed) return retval;
@@ -777,32 +877,49 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:274:4: rule
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:278:4: {...}? => type_declaration
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_rule_in_statement562);
-                    rule13=rule();
+                    if ( !((validateLT(1, DroolsSoftKeywords.DECLARE))) ) {
+                        if (backtracking>0) {failed=true; return retval;}
+                        throw new FailedPredicateException(input, "statement", "(validateLT(1, DroolsSoftKeywords.DECLARE))");
+                    }
+                    pushFollow(FOLLOW_type_declaration_in_statement586);
+                    type_declaration13=type_declaration();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, rule13.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, type_declaration13.getTree());
 
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:275:4: query
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:279:4: rule
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_query_in_statement567);
-                    query14=query();
+                    pushFollow(FOLLOW_rule_in_statement591);
+                    rule14=rule();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, query14.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, rule14.getTree());
 
                     }
                     break;
+                case 9 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:280:4: query
+                    {
+                    root_0 = (Object)adaptor.nil();
 
+                    pushFollow(FOLLOW_query_in_statement596);
+                    query15=query();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, query15.getTree());
+
+                    }
+                    break;
+
             }
             retval.stop = input.LT(-1);
 
@@ -827,39 +944,39 @@
     };
 
     // $ANTLR start import_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:278:1: import_statement : import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:283:1: import_statement : import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) ;
     public final import_statement_return import_statement() throws RecognitionException {
         import_statement_return retval = new import_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token SEMICOLON17=null;
-        import_key_return import_key15 = null;
+        Token SEMICOLON18=null;
+        import_key_return import_key16 = null;
 
-        import_name_return import_name16 = null;
+        import_name_return import_name17 = null;
 
 
-        Object SEMICOLON17_tree=null;
+        Object SEMICOLON18_tree=null;
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_import_key=new RewriteRuleSubtreeStream(adaptor,"rule import_key");
         RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
          pushParaphrases(DroolsParaphareseTypes.IMPORT); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:2: ( import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:4: import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:286:2: ( import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )? -> ^( import_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:286:4: import_key import_name[DroolsParaphareseTypes.IMPORT] ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_import_key_in_import_statement589);
-            import_key15=import_key();
+            pushFollow(FOLLOW_import_key_in_import_statement618);
+            import_key16=import_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_import_key.add(import_key15.getTree());
-            pushFollow(FOLLOW_import_name_in_import_statement591);
-            import_name16=import_name(DroolsParaphareseTypes.IMPORT);
+            if ( backtracking==0 ) stream_import_key.add(import_key16.getTree());
+            pushFollow(FOLLOW_import_name_in_import_statement620);
+            import_name17=import_name(DroolsParaphareseTypes.IMPORT);
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_import_name.add(import_name16.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:58: ( SEMICOLON )?
+            if ( backtracking==0 ) stream_import_name.add(import_name17.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:286:58: ( SEMICOLON )?
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -868,11 +985,11 @@
             }
             switch (alt6) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:281:58: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:286:58: SEMICOLON
                     {
-                    SEMICOLON17=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement594); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON17);
+                    SEMICOLON18=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_import_statement623); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON18);
 
 
                     }
@@ -882,7 +999,7 @@
 
 
             // AST REWRITE
-            // elements: import_name, import_key
+            // elements: import_key, import_name
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -892,9 +1009,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 282:3: -> ^( import_key import_name )
+            // 287:3: -> ^( import_key import_name )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:282:6: ^( import_key import_name )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:287:6: ^( import_key import_name )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_import_key.nextNode(), root_1);
@@ -936,47 +1053,47 @@
     };
 
     // $ANTLR start function_import_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:285:1: function_import_statement : imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:290:1: function_import_statement : imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) ;
     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);
 
         Object root_0 = null;
 
-        Token SEMICOLON20=null;
+        Token SEMICOLON21=null;
         import_key_return imp = null;
 
-        function_key_return function_key18 = null;
+        function_key_return function_key19 = null;
 
-        import_name_return import_name19 = null;
+        import_name_return import_name20 = null;
 
 
-        Object SEMICOLON20_tree=null;
+        Object SEMICOLON21_tree=null;
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_import_key=new RewriteRuleSubtreeStream(adaptor,"rule import_key");
         RewriteRuleSubtreeStream stream_function_key=new RewriteRuleSubtreeStream(adaptor,"rule function_key");
         RewriteRuleSubtreeStream stream_import_name=new RewriteRuleSubtreeStream(adaptor,"rule import_name");
          pushParaphrases(DroolsParaphareseTypes.FUNCTION_IMPORT); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:2: (imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:4: imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:2: (imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )? -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:4: imp= import_key function_key import_name[DroolsParaphareseTypes.FUNCTION_IMPORT] ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_import_key_in_function_import_statement629);
+            pushFollow(FOLLOW_import_key_in_function_import_statement658);
             imp=import_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_import_key.add(imp.getTree());
-            pushFollow(FOLLOW_function_key_in_function_import_statement631);
-            function_key18=function_key();
+            pushFollow(FOLLOW_function_key_in_function_import_statement660);
+            function_key19=function_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_function_key.add(function_key18.getTree());
-            pushFollow(FOLLOW_import_name_in_function_import_statement633);
-            import_name19=import_name(DroolsParaphareseTypes.FUNCTION_IMPORT);
+            if ( backtracking==0 ) stream_function_key.add(function_key19.getTree());
+            pushFollow(FOLLOW_import_name_in_function_import_statement662);
+            import_name20=import_name(DroolsParaphareseTypes.FUNCTION_IMPORT);
             _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:288:84: ( SEMICOLON )?
+            if ( backtracking==0 ) stream_import_name.add(import_name20.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:84: ( SEMICOLON )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -985,11 +1102,11 @@
             }
             switch (alt7) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:288:84: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:84: SEMICOLON
                     {
-                    SEMICOLON20=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement636); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON20);
+                    SEMICOLON21=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_function_import_statement665); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON21);
 
 
                     }
@@ -999,7 +1116,7 @@
 
 
             // AST REWRITE
-            // elements: import_name, function_key
+            // elements: function_key, import_name
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1009,9 +1126,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 289:3: -> ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+            // 294: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:289:6: ^( VT_FUNCTION_IMPORT[$imp.start] function_key import_name )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:294: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);
@@ -1054,7 +1171,7 @@
     };
 
     // $ANTLR start import_name
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:292:1: import_name[int importType] : id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:297:1: import_name[int importType] : id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
     public final import_name_return import_name(int importType) throws RecognitionException {
         import_name_return retval = new import_name_return();
         retval.start = input.LT(1);
@@ -1070,17 +1187,17 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:2: (id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:4: id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:2: (id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )? -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:4: id+= ID (id+= DOT id+= ID )* (id+= DOT_STAR )?
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_import_name665); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_import_name694); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if (list_id==null) list_id=new ArrayList();
             list_id.add(id);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:11: (id+= DOT id+= ID )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:11: (id+= DOT id+= ID )*
             loop8:
             do {
                 int alt8=2;
@@ -1093,17 +1210,17 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:13: id+= DOT id+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_import_name671); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_import_name700); if (failed) return retval;
             	    if ( backtracking==0 ) stream_DOT.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
             	    list_id.add(id);
 
             	    id=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_import_name675); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_import_name704); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
@@ -1118,7 +1235,7 @@
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:33: (id+= DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:33: (id+= DOT_STAR )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -1127,10 +1244,10 @@
             }
             switch (alt9) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:293:33: id+= DOT_STAR
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:33: id+= DOT_STAR
                     {
                     id=(Token)input.LT(1);
-                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name682); if (failed) return retval;
+                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name711); if (failed) return retval;
                     if ( backtracking==0 ) stream_DOT_STAR.add(id);
 
                     if (list_id==null) list_id=new ArrayList();
@@ -1157,9 +1274,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 295:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            // 300:3: -> ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:295:6: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:300:6: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_IMPORT_ID, "VT_IMPORT_ID"), root_1);
@@ -1172,7 +1289,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:295:25: ( DOT_STAR )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:300:25: ( DOT_STAR )?
                 if ( stream_DOT_STAR.hasNext() ) {
                     adaptor.addChild(root_1, stream_DOT_STAR.next());
 
@@ -1211,47 +1328,47 @@
     };
 
     // $ANTLR start global
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:298:1: global : global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:303: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);
 
         Object root_0 = null;
 
-        Token SEMICOLON24=null;
-        global_key_return global_key21 = null;
+        Token SEMICOLON25=null;
+        global_key_return global_key22 = null;
 
-        data_type_return data_type22 = null;
+        data_type_return data_type23 = null;
 
-        global_id_return global_id23 = null;
+        global_id_return global_id24 = null;
 
 
-        Object SEMICOLON24_tree=null;
+        Object SEMICOLON25_tree=null;
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
         RewriteRuleSubtreeStream stream_global_id=new RewriteRuleSubtreeStream(adaptor,"rule global_id");
         RewriteRuleSubtreeStream stream_global_key=new RewriteRuleSubtreeStream(adaptor,"rule global_key");
          pushParaphrases(DroolsParaphareseTypes.GLOBAL); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:301: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:301:4: global_key data_type global_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:2: ( global_key data_type global_id ( SEMICOLON )? -> ^( global_key data_type global_id ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:4: global_key data_type global_id ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_global_key_in_global722);
-            global_key21=global_key();
+            pushFollow(FOLLOW_global_key_in_global751);
+            global_key22=global_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_global_key.add(global_key21.getTree());
-            pushFollow(FOLLOW_data_type_in_global724);
-            data_type22=data_type();
+            if ( backtracking==0 ) stream_global_key.add(global_key22.getTree());
+            pushFollow(FOLLOW_data_type_in_global753);
+            data_type23=data_type();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_data_type.add(data_type22.getTree());
-            pushFollow(FOLLOW_global_id_in_global726);
-            global_id23=global_id();
+            if ( backtracking==0 ) stream_data_type.add(data_type23.getTree());
+            pushFollow(FOLLOW_global_id_in_global755);
+            global_id24=global_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_global_id.add(global_id23.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:301:35: ( SEMICOLON )?
+            if ( backtracking==0 ) stream_global_id.add(global_id24.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:35: ( SEMICOLON )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -1260,11 +1377,11 @@
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:301:35: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:35: SEMICOLON
                     {
-                    SEMICOLON24=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global728); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON24);
+                    SEMICOLON25=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_global757); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON25);
 
 
                     }
@@ -1274,7 +1391,7 @@
 
 
             // AST REWRITE
-            // elements: data_type, global_id, global_key
+            // elements: global_key, data_type, global_id
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1284,9 +1401,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 302:3: -> ^( global_key data_type global_id )
+            // 307:3: -> ^( global_key data_type global_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:302:6: ^( global_key data_type global_id )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:307:6: ^( global_key data_type global_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_global_key.nextNode(), root_1);
@@ -1329,7 +1446,7 @@
     };
 
     // $ANTLR start global_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:305:1: global_id : id= ID -> VT_GLOBAL_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:310: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);
@@ -1342,11 +1459,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:306:2: (id= ID -> VT_GLOBAL_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:306:4: id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311:2: (id= ID -> VT_GLOBAL_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311:4: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_global_id754); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_global_id783); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -1364,7 +1481,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 308:3: -> VT_GLOBAL_ID[$id]
+            // 313:3: -> VT_GLOBAL_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_GLOBAL_ID, id));
 
@@ -1397,22 +1514,22 @@
     };
 
     // $ANTLR start function
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:311:1: function : function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:316: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);
 
         Object root_0 = null;
 
-        function_key_return function_key25 = null;
+        function_key_return function_key26 = null;
 
-        data_type_return data_type26 = null;
+        data_type_return data_type27 = null;
 
-        function_id_return function_id27 = null;
+        function_id_return function_id28 = null;
 
-        parameters_return parameters28 = null;
+        parameters_return parameters29 = null;
 
-        curly_chunk_return curly_chunk29 = null;
+        curly_chunk_return curly_chunk30 = null;
 
 
         RewriteRuleSubtreeStream stream_parameters=new RewriteRuleSubtreeStream(adaptor,"rule parameters");
@@ -1422,15 +1539,15 @@
         RewriteRuleSubtreeStream stream_function_id=new RewriteRuleSubtreeStream(adaptor,"rule function_id");
          pushParaphrases(DroolsParaphareseTypes.FUNCTION); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314: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:314:4: function_key ( data_type )? function_id parameters curly_chunk
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:2: ( function_key ( data_type )? function_id parameters curly_chunk -> ^( function_key ( data_type )? function_id parameters curly_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:4: function_key ( data_type )? function_id parameters curly_chunk
             {
-            pushFollow(FOLLOW_function_key_in_function786);
-            function_key25=function_key();
+            pushFollow(FOLLOW_function_key_in_function815);
+            function_key26=function_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_function_key.add(function_key25.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:17: ( data_type )?
+            if ( backtracking==0 ) stream_function_key.add(function_key26.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:17: ( data_type )?
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -1443,37 +1560,37 @@
             }
             switch (alt11) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:314:17: data_type
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:17: data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_function788);
-                    data_type26=data_type();
+                    pushFollow(FOLLOW_data_type_in_function817);
+                    data_type27=data_type();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_data_type.add(data_type26.getTree());
+                    if ( backtracking==0 ) stream_data_type.add(data_type27.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_function_id_in_function791);
-            function_id27=function_id();
+            pushFollow(FOLLOW_function_id_in_function820);
+            function_id28=function_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_function_id.add(function_id27.getTree());
-            pushFollow(FOLLOW_parameters_in_function793);
-            parameters28=parameters();
+            if ( backtracking==0 ) stream_function_id.add(function_id28.getTree());
+            pushFollow(FOLLOW_parameters_in_function822);
+            parameters29=parameters();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_parameters.add(parameters28.getTree());
-            pushFollow(FOLLOW_curly_chunk_in_function795);
-            curly_chunk29=curly_chunk();
+            if ( backtracking==0 ) stream_parameters.add(parameters29.getTree());
+            pushFollow(FOLLOW_curly_chunk_in_function824);
+            curly_chunk30=curly_chunk();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_curly_chunk.add(curly_chunk29.getTree());
+            if ( backtracking==0 ) stream_curly_chunk.add(curly_chunk30.getTree());
 
             // AST REWRITE
-            // elements: curly_chunk, parameters, function_id, data_type, function_key
+            // elements: parameters, function_id, data_type, curly_chunk, function_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1483,14 +1600,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 315:3: -> ^( function_key ( data_type )? function_id parameters curly_chunk )
+            // 320: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:315:6: ^( function_key ( data_type )? function_id parameters curly_chunk )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320: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:315:21: ( data_type )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:320:21: ( data_type )?
                 if ( stream_data_type.hasNext() ) {
                     adaptor.addChild(root_1, stream_data_type.next());
 
@@ -1535,7 +1652,7 @@
     };
 
     // $ANTLR start function_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:318:1: function_id : id= ID -> VT_FUNCTION_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:323: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);
@@ -1548,11 +1665,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:319:2: (id= ID -> VT_FUNCTION_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:319:4: id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324:2: (id= ID -> VT_FUNCTION_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324:4: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_function_id825); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_function_id854); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if ( backtracking==0 ) {
@@ -1570,7 +1687,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 321:3: -> VT_FUNCTION_ID[$id]
+            // 326:3: -> VT_FUNCTION_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_FUNCTION_ID, id));
 
@@ -1603,26 +1720,26 @@
     };
 
     // $ANTLR start query
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:324:1: query : query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:329: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);
 
         Object root_0 = null;
 
-        Token END34=null;
-        Token SEMICOLON35=null;
-        query_key_return query_key30 = null;
+        Token END35=null;
+        Token SEMICOLON36=null;
+        query_key_return query_key31 = null;
 
-        query_id_return query_id31 = null;
+        query_id_return query_id32 = null;
 
-        parameters_return parameters32 = null;
+        parameters_return parameters33 = null;
 
-        normal_lhs_block_return normal_lhs_block33 = null;
+        normal_lhs_block_return normal_lhs_block34 = null;
 
 
-        Object END34_tree=null;
-        Object SEMICOLON35_tree=null;
+        Object END35_tree=null;
+        Object SEMICOLON36_tree=null;
         RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_parameters=new RewriteRuleSubtreeStream(adaptor,"rule parameters");
@@ -1631,47 +1748,47 @@
         RewriteRuleSubtreeStream stream_query_id=new RewriteRuleSubtreeStream(adaptor,"rule query_id");
          pushParaphrases(DroolsParaphareseTypes.QUERY); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327: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:327:4: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:2: ( query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )? -> ^( query_key query_id ( parameters )? normal_lhs_block END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:4: query_key query_id ( parameters )? normal_lhs_block END ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_query_key_in_query857);
-            query_key30=query_key();
+            pushFollow(FOLLOW_query_key_in_query886);
+            query_key31=query_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_query_key.add(query_key30.getTree());
-            pushFollow(FOLLOW_query_id_in_query859);
-            query_id31=query_id();
+            if ( backtracking==0 ) stream_query_key.add(query_key31.getTree());
+            pushFollow(FOLLOW_query_id_in_query888);
+            query_id32=query_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_query_id.add(query_id31.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327:23: ( parameters )?
+            if ( backtracking==0 ) stream_query_id.add(query_id32.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:23: ( parameters )?
             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:327:23: parameters
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:23: parameters
                     {
-                    pushFollow(FOLLOW_parameters_in_query861);
-                    parameters32=parameters();
+                    pushFollow(FOLLOW_parameters_in_query890);
+                    parameters33=parameters();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_parameters.add(parameters32.getTree());
+                    if ( backtracking==0 ) stream_parameters.add(parameters33.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_normal_lhs_block_in_query864);
-            normal_lhs_block33=normal_lhs_block();
+            pushFollow(FOLLOW_normal_lhs_block_in_query893);
+            normal_lhs_block34=normal_lhs_block();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block33.getTree());
-            END34=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_query866); if (failed) return retval;
-            if ( backtracking==0 ) stream_END.add(END34);
+            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block34.getTree());
+            END35=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_query895); if (failed) return retval;
+            if ( backtracking==0 ) stream_END.add(END35);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327:56: ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:56: ( SEMICOLON )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -1680,11 +1797,11 @@
             }
             switch (alt13) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:327:56: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:56: SEMICOLON
                     {
-                    SEMICOLON35=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query868); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON35);
+                    SEMICOLON36=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_query897); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON36);
 
 
                     }
@@ -1694,7 +1811,7 @@
 
 
             // AST REWRITE
-            // elements: normal_lhs_block, query_id, END, query_key, parameters
+            // elements: parameters, query_key, normal_lhs_block, query_id, END
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1704,15 +1821,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 328:3: -> ^( query_key query_id ( parameters )? normal_lhs_block END )
+            // 333: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:328:6: ^( query_key query_id ( parameters )? normal_lhs_block END )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333: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:328:27: ( parameters )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:333:27: ( parameters )?
                 if ( stream_parameters.hasNext() ) {
                     adaptor.addChild(root_1, stream_parameters.next());
 
@@ -1756,7 +1873,7 @@
     };
 
     // $ANTLR start query_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:331:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:336:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );
     public final query_id_return query_id() throws RecognitionException {
         query_id_return retval = new query_id_return();
         retval.start = input.LT(1);
@@ -1770,7 +1887,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:332:2: (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:337:2: (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] )
             int alt14=2;
             int LA14_0 = input.LA(1);
 
@@ -1783,16 +1900,16 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("331:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );", 14, 0, input);
+                    new NoViableAltException("336:1: query_id : (id= ID -> VT_QUERY_ID[$id] | id= STRING -> VT_QUERY_ID[$id] );", 14, 0, input);
 
                 throw nvae;
             }
             switch (alt14) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:332:5: id= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:337:5: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_query_id900); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_query_id929); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(id);
 
                     if ( backtracking==0 ) {
@@ -1810,7 +1927,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 333:67: -> VT_QUERY_ID[$id]
+                    // 338:67: -> VT_QUERY_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, id));
 
@@ -1821,10 +1938,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:334:5: id= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:339:5: id= STRING
                     {
                     id=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_query_id916); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_query_id945); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(id);
 
                     if ( backtracking==0 ) {
@@ -1842,7 +1959,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 335:67: -> VT_QUERY_ID[$id]
+                    // 340:67: -> VT_QUERY_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_QUERY_ID, id));
 
@@ -1877,37 +1994,37 @@
     };
 
     // $ANTLR start parameters
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:338:1: parameters : LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:343: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);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN36=null;
-        Token COMMA38=null;
-        Token RIGHT_PAREN40=null;
-        param_definition_return param_definition37 = null;
+        Token LEFT_PAREN37=null;
+        Token COMMA39=null;
+        Token RIGHT_PAREN41=null;
+        param_definition_return param_definition38 = null;
 
-        param_definition_return param_definition39 = null;
+        param_definition_return param_definition40 = null;
 
 
-        Object LEFT_PAREN36_tree=null;
-        Object COMMA38_tree=null;
-        Object RIGHT_PAREN40_tree=null;
+        Object LEFT_PAREN37_tree=null;
+        Object COMMA39_tree=null;
+        Object RIGHT_PAREN41_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         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:339: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:339:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:2: ( LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:344:4: LEFT_PAREN ( param_definition ( COMMA param_definition )* )? RIGHT_PAREN
             {
-            LEFT_PAREN36=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters935); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN36);
+            LEFT_PAREN37=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_parameters964); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN37);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:4: ( param_definition ( COMMA param_definition )* )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:4: ( param_definition ( COMMA param_definition )* )?
             int alt16=2;
             int LA16_0 = input.LA(1);
 
@@ -1916,14 +2033,14 @@
             }
             switch (alt16) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:6: param_definition ( COMMA param_definition )*
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:6: param_definition ( COMMA param_definition )*
                     {
-                    pushFollow(FOLLOW_param_definition_in_parameters942);
-                    param_definition37=param_definition();
+                    pushFollow(FOLLOW_param_definition_in_parameters971);
+                    param_definition38=param_definition();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_param_definition.add(param_definition37.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:23: ( COMMA param_definition )*
+                    if ( backtracking==0 ) stream_param_definition.add(param_definition38.getTree());
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:23: ( COMMA param_definition )*
                     loop15:
                     do {
                         int alt15=2;
@@ -1936,17 +2053,17 @@
 
                         switch (alt15) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:340:24: COMMA param_definition
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:24: COMMA param_definition
                     	    {
-                    	    COMMA38=(Token)input.LT(1);
-                    	    match(input,COMMA,FOLLOW_COMMA_in_parameters945); if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_COMMA.add(COMMA38);
+                    	    COMMA39=(Token)input.LT(1);
+                    	    match(input,COMMA,FOLLOW_COMMA_in_parameters974); if (failed) return retval;
+                    	    if ( backtracking==0 ) stream_COMMA.add(COMMA39);
 
-                    	    pushFollow(FOLLOW_param_definition_in_parameters947);
-                    	    param_definition39=param_definition();
+                    	    pushFollow(FOLLOW_param_definition_in_parameters976);
+                    	    param_definition40=param_definition();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_param_definition.add(param_definition39.getTree());
+                    	    if ( backtracking==0 ) stream_param_definition.add(param_definition40.getTree());
 
                     	    }
                     	    break;
@@ -1962,13 +2079,13 @@
 
             }
 
-            RIGHT_PAREN40=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_parameters956); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN40);
+            RIGHT_PAREN41=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_parameters985); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN41);
 
 
             // AST REWRITE
-            // elements: param_definition, RIGHT_PAREN
+            // elements: RIGHT_PAREN, param_definition
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -1978,14 +2095,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 342:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+            // 347:3: -> ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:342:6: ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:347:6: ^( VT_PARAM_LIST ( param_definition )* RIGHT_PAREN )
                 {
                 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:342:22: ( param_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:347:22: ( param_definition )*
                 while ( stream_param_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_param_definition.next());
 
@@ -2025,48 +2142,48 @@
     };
 
     // $ANTLR start param_definition
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:345:1: param_definition : ( data_type )? argument ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350: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);
 
         Object root_0 = null;
 
-        data_type_return data_type41 = null;
+        data_type_return data_type42 = null;
 
-        argument_return argument42 = null;
+        argument_return argument43 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:2: ( ( data_type )? argument )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:4: ( data_type )? argument
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:2: ( ( data_type )? argument )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:4: ( data_type )? argument
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:346:4: ( data_type )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351: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:346:4: data_type
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:351:4: data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_param_definition980);
-                    data_type41=data_type();
+                    pushFollow(FOLLOW_data_type_in_param_definition1009);
+                    data_type42=data_type();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, data_type41.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, data_type42.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_argument_in_param_definition983);
-            argument42=argument();
+            pushFollow(FOLLOW_argument_in_param_definition1012);
+            argument43=argument();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, argument42.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, argument43.getTree());
 
             }
 
@@ -2093,32 +2210,32 @@
     };
 
     // $ANTLR start argument
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:349:1: argument : ID ( dimension_definition )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:1: argument : ID ( dimension_definition )* ;
     public final argument_return argument() throws RecognitionException {
         argument_return retval = new argument_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID43=null;
-        dimension_definition_return dimension_definition44 = null;
+        Token ID44=null;
+        dimension_definition_return dimension_definition45 = null;
 
 
-        Object ID43_tree=null;
+        Object ID44_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:2: ( ID ( dimension_definition )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:4: ID ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:2: ( ID ( dimension_definition )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:4: ID ( dimension_definition )*
             {
             root_0 = (Object)adaptor.nil();
 
-            ID43=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_argument994); if (failed) return retval;
+            ID44=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_argument1023); if (failed) return retval;
             if ( backtracking==0 ) {
-            ID43_tree = (Object)adaptor.create(ID43);
-            adaptor.addChild(root_0, ID43_tree);
+            ID44_tree = (Object)adaptor.create(ID44);
+            adaptor.addChild(root_0, ID44_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:7: ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:7: ( dimension_definition )*
             loop18:
             do {
                 int alt18=2;
@@ -2131,13 +2248,13 @@
 
                 switch (alt18) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:350:7: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:355:7: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_argument996);
-            	    dimension_definition44=dimension_definition();
+            	    pushFollow(FOLLOW_dimension_definition_in_argument1025);
+            	    dimension_definition45=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, dimension_definition44.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, dimension_definition45.getTree());
 
             	    }
             	    break;
@@ -2167,32 +2284,593 @@
     }
     // $ANTLR end argument
 
+    public static class type_declaration_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start type_declaration
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:358:1: type_declaration : declare_key type_declare_id ( decl_metadata )* ( decl_field )* END -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END ) ;
+    public final type_declaration_return type_declaration() throws RecognitionException {
+        type_declaration_return retval = new type_declaration_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token END50=null;
+        declare_key_return declare_key46 = null;
+
+        type_declare_id_return type_declare_id47 = null;
+
+        decl_metadata_return decl_metadata48 = null;
+
+        decl_field_return decl_field49 = null;
+
+
+        Object END50_tree=null;
+        RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
+        RewriteRuleSubtreeStream stream_decl_field=new RewriteRuleSubtreeStream(adaptor,"rule decl_field");
+        RewriteRuleSubtreeStream stream_declare_key=new RewriteRuleSubtreeStream(adaptor,"rule declare_key");
+        RewriteRuleSubtreeStream stream_decl_metadata=new RewriteRuleSubtreeStream(adaptor,"rule decl_metadata");
+        RewriteRuleSubtreeStream stream_type_declare_id=new RewriteRuleSubtreeStream(adaptor,"rule type_declare_id");
+         pushParaphrases(DroolsParaphareseTypes.TYPE_DECLARE); 
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:2: ( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:361:4: declare_key type_declare_id ( decl_metadata )* ( decl_field )* END
+            {
+            pushFollow(FOLLOW_declare_key_in_type_declaration1048);
+            declare_key46=declare_key();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_declare_key.add(declare_key46.getTree());
+            pushFollow(FOLLOW_type_declare_id_in_type_declaration1051);
+            type_declare_id47=type_declare_id();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_type_declare_id.add(type_declare_id47.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:362:3: ( decl_metadata )*
+            loop19:
+            do {
+                int alt19=2;
+                int LA19_0 = input.LA(1);
+
+                if ( (LA19_0==AT) ) {
+                    alt19=1;
+                }
+
+
+                switch (alt19) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:362:3: decl_metadata
+            	    {
+            	    pushFollow(FOLLOW_decl_metadata_in_type_declaration1055);
+            	    decl_metadata48=decl_metadata();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_decl_metadata.add(decl_metadata48.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop19;
+                }
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:363:3: ( decl_field )*
+            loop20:
+            do {
+                int alt20=2;
+                int LA20_0 = input.LA(1);
+
+                if ( (LA20_0==ID) ) {
+                    alt20=1;
+                }
+
+
+                switch (alt20) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:363:3: decl_field
+            	    {
+            	    pushFollow(FOLLOW_decl_field_in_type_declaration1060);
+            	    decl_field49=decl_field();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_decl_field.add(decl_field49.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop20;
+                }
+            } while (true);
+
+            END50=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_type_declaration1065); if (failed) return retval;
+            if ( backtracking==0 ) stream_END.add(END50);
+
+
+            // AST REWRITE
+            // elements: END, declare_key, decl_metadata, type_declare_id, decl_field
+            // 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();
+            // 365:3: -> ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END )
+            {
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365:6: ^( declare_key type_declare_id ( decl_metadata )* ( decl_field )* END )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_declare_key.nextNode(), root_1);
+
+                adaptor.addChild(root_1, stream_type_declare_id.next());
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365:36: ( decl_metadata )*
+                while ( stream_decl_metadata.hasNext() ) {
+                    adaptor.addChild(root_1, stream_decl_metadata.next());
+
+                }
+                stream_decl_metadata.reset();
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:365:51: ( decl_field )*
+                while ( stream_decl_field.hasNext() ) {
+                    adaptor.addChild(root_1, stream_decl_field.next());
+
+                }
+                stream_decl_field.reset();
+                adaptor.addChild(root_1, stream_END.next());
+
+                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);
+            }
+            if ( backtracking==0 ) {
+               paraphrases.pop(); 
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return retval;
+    }
+    // $ANTLR end type_declaration
+
+    public static class type_declare_id_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start type_declare_id
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:368:1: type_declare_id : id= ID -> VT_TYPE_DECLARE_ID[$id] ;
+    public final type_declare_id_return type_declare_id() throws RecognitionException {
+        type_declare_id_return retval = new type_declare_id_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token id=null;
+
+        Object id_tree=null;
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:369:2: (id= ID -> VT_TYPE_DECLARE_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:369:5: id= ID
+            {
+            id=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_type_declare_id1097); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(id);
+
+            if ( backtracking==0 ) {
+              	setParaphrasesValue(DroolsParaphareseTypes.TYPE_DECLARE, id.getText());	
+            }
+
+            // AST REWRITE
+            // elements: 
+            // 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();
+            // 370:74: -> VT_TYPE_DECLARE_ID[$id]
+            {
+                adaptor.addChild(root_0, adaptor.create(VT_TYPE_DECLARE_ID, id));
+
+            }
+
+            }
+
+            }
+
+            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 type_declare_id
+
+    public static class decl_metadata_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start decl_metadata
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:373:1: decl_metadata : AT ID paren_chunk -> ^( AT ID paren_chunk ) ;
+    public final decl_metadata_return decl_metadata() throws RecognitionException {
+        decl_metadata_return retval = new decl_metadata_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token AT51=null;
+        Token ID52=null;
+        paren_chunk_return paren_chunk53 = null;
+
+
+        Object AT51_tree=null;
+        Object ID52_tree=null;
+        RewriteRuleTokenStream stream_AT=new RewriteRuleTokenStream(adaptor,"token AT");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:374:2: ( AT ID paren_chunk -> ^( AT ID paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:374:4: AT ID paren_chunk
+            {
+            AT51=(Token)input.LT(1);
+            match(input,AT,FOLLOW_AT_in_decl_metadata1116); if (failed) return retval;
+            if ( backtracking==0 ) stream_AT.add(AT51);
+
+            ID52=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_decl_metadata1118); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID52);
+
+            pushFollow(FOLLOW_paren_chunk_in_decl_metadata1120);
+            paren_chunk53=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk53.getTree());
+
+            // AST REWRITE
+            // elements: paren_chunk, ID, AT
+            // 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();
+            // 375:3: -> ^( AT ID paren_chunk )
+            {
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:375:6: ^( AT ID paren_chunk )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_AT.next(), root_1);
+
+                adaptor.addChild(root_1, stream_ID.next());
+                adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                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 decl_metadata
+
+    public static class decl_field_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start decl_field
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:378:1: decl_field : ID ( decl_field_initialization )? COLON data_type ( decl_metadata )* -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) ;
+    public final decl_field_return decl_field() throws RecognitionException {
+        decl_field_return retval = new decl_field_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID54=null;
+        Token COLON56=null;
+        decl_field_initialization_return decl_field_initialization55 = null;
+
+        data_type_return data_type57 = null;
+
+        decl_metadata_return decl_metadata58 = null;
+
+
+        Object ID54_tree=null;
+        Object COLON56_tree=null;
+        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleSubtreeStream stream_decl_metadata=new RewriteRuleSubtreeStream(adaptor,"rule decl_metadata");
+        RewriteRuleSubtreeStream stream_decl_field_initialization=new RewriteRuleSubtreeStream(adaptor,"rule decl_field_initialization");
+        RewriteRuleSubtreeStream stream_data_type=new RewriteRuleSubtreeStream(adaptor,"rule data_type");
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379:2: ( ID ( decl_field_initialization )? COLON data_type ( decl_metadata )* -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379:4: ID ( decl_field_initialization )? COLON data_type ( decl_metadata )*
+            {
+            ID54=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_decl_field1143); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID54);
+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379:7: ( decl_field_initialization )?
+            int alt21=2;
+            int LA21_0 = input.LA(1);
+
+            if ( (LA21_0==EQUALS) ) {
+                alt21=1;
+            }
+            switch (alt21) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379:7: decl_field_initialization
+                    {
+                    pushFollow(FOLLOW_decl_field_initialization_in_decl_field1145);
+                    decl_field_initialization55=decl_field_initialization();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) stream_decl_field_initialization.add(decl_field_initialization55.getTree());
+
+                    }
+                    break;
+
+            }
+
+            COLON56=(Token)input.LT(1);
+            match(input,COLON,FOLLOW_COLON_in_decl_field1148); if (failed) return retval;
+            if ( backtracking==0 ) stream_COLON.add(COLON56);
+
+            pushFollow(FOLLOW_data_type_in_decl_field1150);
+            data_type57=data_type();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_data_type.add(data_type57.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:3: ( decl_metadata )*
+            loop22:
+            do {
+                int alt22=2;
+                int LA22_0 = input.LA(1);
+
+                if ( (LA22_0==AT) ) {
+                    alt22=1;
+                }
+
+
+                switch (alt22) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:380:3: decl_metadata
+            	    {
+            	    pushFollow(FOLLOW_decl_metadata_in_decl_field1154);
+            	    decl_metadata58=decl_metadata();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) stream_decl_metadata.add(decl_metadata58.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop22;
+                }
+            } while (true);
+
+
+            // AST REWRITE
+            // elements: decl_metadata, decl_field_initialization, ID, data_type
+            // 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();
+            // 381:3: -> ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
+            {
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:381:6: ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_ID.next(), root_1);
+
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:381:11: ( decl_field_initialization )?
+                if ( stream_decl_field_initialization.hasNext() ) {
+                    adaptor.addChild(root_1, stream_decl_field_initialization.next());
+
+                }
+                stream_decl_field_initialization.reset();
+                adaptor.addChild(root_1, stream_data_type.next());
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:381:48: ( decl_metadata )*
+                while ( stream_decl_metadata.hasNext() ) {
+                    adaptor.addChild(root_1, stream_decl_metadata.next());
+
+                }
+                stream_decl_metadata.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 decl_field
+
+    public static class decl_field_initialization_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start decl_field_initialization
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:384:1: decl_field_initialization : EQUALS paren_chunk -> ^( EQUALS paren_chunk ) ;
+    public final decl_field_initialization_return decl_field_initialization() throws RecognitionException {
+        decl_field_initialization_return retval = new decl_field_initialization_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token EQUALS59=null;
+        paren_chunk_return paren_chunk60 = null;
+
+
+        Object EQUALS59_tree=null;
+        RewriteRuleTokenStream stream_EQUALS=new RewriteRuleTokenStream(adaptor,"token EQUALS");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:385:2: ( EQUALS paren_chunk -> ^( EQUALS paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:385:4: EQUALS paren_chunk
+            {
+            EQUALS59=(Token)input.LT(1);
+            match(input,EQUALS,FOLLOW_EQUALS_in_decl_field_initialization1182); if (failed) return retval;
+            if ( backtracking==0 ) stream_EQUALS.add(EQUALS59);
+
+            pushFollow(FOLLOW_paren_chunk_in_decl_field_initialization1184);
+            paren_chunk60=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk60.getTree());
+
+            // AST REWRITE
+            // elements: EQUALS, paren_chunk
+            // 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();
+            // 386:2: -> ^( EQUALS paren_chunk )
+            {
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:5: ^( EQUALS paren_chunk )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(stream_EQUALS.next(), root_1);
+
+                adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                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 decl_field_initialization
+
     public static class template_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
     // $ANTLR start template
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:354:1: template : template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:389: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);
 
         Object root_0 = null;
 
-        Token SEMICOLON47=null;
-        Token END49=null;
-        Token SEMICOLON50=null;
-        template_key_return template_key45 = null;
+        Token SEMICOLON63=null;
+        Token END65=null;
+        Token SEMICOLON66=null;
+        template_key_return template_key61 = null;
 
-        template_id_return template_id46 = null;
+        template_id_return template_id62 = null;
 
-        template_slot_return template_slot48 = null;
+        template_slot_return template_slot64 = null;
 
 
-        Object SEMICOLON47_tree=null;
-        Object END49_tree=null;
-        Object SEMICOLON50_tree=null;
+        Object SEMICOLON63_tree=null;
+        Object END65_tree=null;
+        Object SEMICOLON66_tree=null;
         RewriteRuleTokenStream stream_END=new RewriteRuleTokenStream(adaptor,"token END");
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         RewriteRuleSubtreeStream stream_template_id=new RewriteRuleSubtreeStream(adaptor,"rule template_id");
@@ -2200,33 +2878,33 @@
         RewriteRuleSubtreeStream stream_template_key=new RewriteRuleSubtreeStream(adaptor,"rule template_key");
          pushParaphrases(DroolsParaphareseTypes.TEMPLATE); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357: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:357:4: template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:2: ( template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )? -> ^( template_key template_id ( template_slot )+ END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:4: template_key template_id ( SEMICOLON )? ( template_slot )+ END ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_template_key_in_template1020);
-            template_key45=template_key();
+            pushFollow(FOLLOW_template_key_in_template1215);
+            template_key61=template_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_template_key.add(template_key45.getTree());
-            pushFollow(FOLLOW_template_id_in_template1022);
-            template_id46=template_id();
+            if ( backtracking==0 ) stream_template_key.add(template_key61.getTree());
+            pushFollow(FOLLOW_template_id_in_template1217);
+            template_id62=template_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_template_id.add(template_id46.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:29: ( SEMICOLON )?
-            int alt19=2;
-            int LA19_0 = input.LA(1);
+            if ( backtracking==0 ) stream_template_id.add(template_id62.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:29: ( SEMICOLON )?
+            int alt23=2;
+            int LA23_0 = input.LA(1);
 
-            if ( (LA19_0==SEMICOLON) ) {
-                alt19=1;
+            if ( (LA23_0==SEMICOLON) ) {
+                alt23=1;
             }
-            switch (alt19) {
+            switch (alt23) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:357:29: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:29: SEMICOLON
                     {
-                    SEMICOLON47=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1024); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON47);
+                    SEMICOLON63=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1219); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON63);
 
 
                     }
@@ -2234,59 +2912,59 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:358:3: ( template_slot )+
-            int cnt20=0;
-            loop20:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:393:3: ( template_slot )+
+            int cnt24=0;
+            loop24:
             do {
-                int alt20=2;
-                int LA20_0 = input.LA(1);
+                int alt24=2;
+                int LA24_0 = input.LA(1);
 
-                if ( (LA20_0==ID) ) {
-                    alt20=1;
+                if ( (LA24_0==ID) ) {
+                    alt24=1;
                 }
 
 
-                switch (alt20) {
+                switch (alt24) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:358:3: template_slot
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:393:3: template_slot
             	    {
-            	    pushFollow(FOLLOW_template_slot_in_template1029);
-            	    template_slot48=template_slot();
+            	    pushFollow(FOLLOW_template_slot_in_template1224);
+            	    template_slot64=template_slot();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_template_slot.add(template_slot48.getTree());
+            	    if ( backtracking==0 ) stream_template_slot.add(template_slot64.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    if ( cnt20 >= 1 ) break loop20;
+            	    if ( cnt24 >= 1 ) break loop24;
             	    if (backtracking>0) {failed=true; return retval;}
                         EarlyExitException eee =
-                            new EarlyExitException(20, input);
+                            new EarlyExitException(24, input);
                         throw eee;
                 }
-                cnt20++;
+                cnt24++;
             } while (true);
 
-            END49=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_template1034); if (failed) return retval;
-            if ( backtracking==0 ) stream_END.add(END49);
+            END65=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_template1229); if (failed) return retval;
+            if ( backtracking==0 ) stream_END.add(END65);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:359:7: ( SEMICOLON )?
-            int alt21=2;
-            int LA21_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:394:7: ( SEMICOLON )?
+            int alt25=2;
+            int LA25_0 = input.LA(1);
 
-            if ( (LA21_0==SEMICOLON) ) {
-                alt21=1;
+            if ( (LA25_0==SEMICOLON) ) {
+                alt25=1;
             }
-            switch (alt21) {
+            switch (alt25) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:359:7: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:394:7: SEMICOLON
                     {
-                    SEMICOLON50=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1036); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON50);
+                    SEMICOLON66=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template1231); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON66);
 
 
                     }
@@ -2296,7 +2974,7 @@
 
 
             // AST REWRITE
-            // elements: template_key, template_slot, template_id, END
+            // elements: END, template_id, template_key, template_slot
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2306,9 +2984,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 360:3: -> ^( template_key template_id ( template_slot )+ END )
+            // 395:3: -> ^( template_key template_id ( template_slot )+ END )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:360:6: ^( template_key template_id ( template_slot )+ END )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:395:6: ^( template_key template_id ( template_slot )+ END )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_template_key.nextNode(), root_1);
@@ -2359,7 +3037,7 @@
     };
 
     // $ANTLR start template_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:363:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );
     public final template_id_return template_id() throws RecognitionException {
         template_id_return retval = new template_id_return();
         retval.start = input.LT(1);
@@ -2373,29 +3051,29 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:364:2: (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] )
-            int alt22=2;
-            int LA22_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:2: (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] )
+            int alt26=2;
+            int LA26_0 = input.LA(1);
 
-            if ( (LA22_0==ID) ) {
-                alt22=1;
+            if ( (LA26_0==ID) ) {
+                alt26=1;
             }
-            else if ( (LA22_0==STRING) ) {
-                alt22=2;
+            else if ( (LA26_0==STRING) ) {
+                alt26=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("363:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );", 22, 0, input);
+                    new NoViableAltException("398:1: template_id : (id= ID -> VT_TEMPLATE_ID[$id] | id= STRING -> VT_TEMPLATE_ID[$id] );", 26, 0, input);
 
                 throw nvae;
             }
-            switch (alt22) {
+            switch (alt26) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:364:5: id= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:5: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_template_id1066); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_template_id1261); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(id);
 
                     if ( backtracking==0 ) {
@@ -2413,7 +3091,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 365:70: -> VT_TEMPLATE_ID[$id]
+                    // 400:70: -> VT_TEMPLATE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, id));
 
@@ -2424,10 +3102,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:366:5: id= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:401:5: id= STRING
                     {
                     id=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_template_id1082); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_template_id1277); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(id);
 
                     if ( backtracking==0 ) {
@@ -2445,7 +3123,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 367:70: -> VT_TEMPLATE_ID[$id]
+                    // 402:70: -> VT_TEMPLATE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_TEMPLATE_ID, id));
 
@@ -2480,51 +3158,51 @@
     };
 
     // $ANTLR start template_slot
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:370:1: template_slot : data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:405: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);
 
         Object root_0 = null;
 
-        Token SEMICOLON53=null;
-        data_type_return data_type51 = null;
+        Token SEMICOLON69=null;
+        data_type_return data_type67 = null;
 
-        slot_id_return slot_id52 = null;
+        slot_id_return slot_id68 = null;
 
 
-        Object SEMICOLON53_tree=null;
+        Object SEMICOLON69_tree=null;
         RewriteRuleTokenStream stream_SEMICOLON=new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
         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:371: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:371:5: data_type slot_id ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:2: ( data_type slot_id ( SEMICOLON )? -> ^( VT_SLOT data_type slot_id ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:5: data_type slot_id ( SEMICOLON )?
             {
-            pushFollow(FOLLOW_data_type_in_template_slot1102);
-            data_type51=data_type();
+            pushFollow(FOLLOW_data_type_in_template_slot1297);
+            data_type67=data_type();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_data_type.add(data_type51.getTree());
-            pushFollow(FOLLOW_slot_id_in_template_slot1104);
-            slot_id52=slot_id();
+            if ( backtracking==0 ) stream_data_type.add(data_type67.getTree());
+            pushFollow(FOLLOW_slot_id_in_template_slot1299);
+            slot_id68=slot_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_slot_id.add(slot_id52.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:23: ( SEMICOLON )?
-            int alt23=2;
-            int LA23_0 = input.LA(1);
+            if ( backtracking==0 ) stream_slot_id.add(slot_id68.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:23: ( SEMICOLON )?
+            int alt27=2;
+            int LA27_0 = input.LA(1);
 
-            if ( (LA23_0==SEMICOLON) ) {
-                alt23=1;
+            if ( (LA27_0==SEMICOLON) ) {
+                alt27=1;
             }
-            switch (alt23) {
+            switch (alt27) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:371:23: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:406:23: SEMICOLON
                     {
-                    SEMICOLON53=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot1106); if (failed) return retval;
-                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON53);
+                    SEMICOLON69=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_template_slot1301); if (failed) return retval;
+                    if ( backtracking==0 ) stream_SEMICOLON.add(SEMICOLON69);
 
 
                     }
@@ -2544,9 +3222,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 372:3: -> ^( VT_SLOT data_type slot_id )
+            // 407:3: -> ^( VT_SLOT data_type slot_id )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:372:6: ^( VT_SLOT data_type slot_id )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:407:6: ^( VT_SLOT data_type slot_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_SLOT, "VT_SLOT"), root_1);
@@ -2586,7 +3264,7 @@
     };
 
     // $ANTLR start slot_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:375:1: slot_id : id= ID -> VT_SLOT_ID[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:410: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);
@@ -2599,11 +3277,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:375:9: (id= ID -> VT_SLOT_ID[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:375:11: id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:410:9: (id= ID -> VT_SLOT_ID[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:410:11: id= ID
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_slot_id1131); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_slot_id1326); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -2618,7 +3296,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 376:3: -> VT_SLOT_ID[$id]
+            // 411:3: -> VT_SLOT_ID[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SLOT_ID, id));
 
@@ -2651,22 +3329,22 @@
     };
 
     // $ANTLR start rule
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:379:1: rule : rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:414: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);
 
         Object root_0 = null;
 
-        rule_key_return rule_key54 = null;
+        rule_key_return rule_key70 = null;
 
-        rule_id_return rule_id55 = null;
+        rule_id_return rule_id71 = null;
 
-        rule_attributes_return rule_attributes56 = null;
+        rule_attributes_return rule_attributes72 = null;
 
-        when_part_return when_part57 = null;
+        when_part_return when_part73 = null;
 
-        rhs_chunk_return rhs_chunk58 = null;
+        rhs_chunk_return rhs_chunk74 = null;
 
 
         RewriteRuleSubtreeStream stream_rule_key=new RewriteRuleSubtreeStream(adaptor,"rule rule_key");
@@ -2676,67 +3354,67 @@
         RewriteRuleSubtreeStream stream_rhs_chunk=new RewriteRuleSubtreeStream(adaptor,"rule rhs_chunk");
          pushParaphrases(DroolsParaphareseTypes.RULE); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382: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:382:4: rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:2: ( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:4: rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk
             {
-            pushFollow(FOLLOW_rule_key_in_rule1160);
-            rule_key54=rule_key();
+            pushFollow(FOLLOW_rule_key_in_rule1355);
+            rule_key70=rule_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_rule_key.add(rule_key54.getTree());
-            pushFollow(FOLLOW_rule_id_in_rule1162);
-            rule_id55=rule_id();
+            if ( backtracking==0 ) stream_rule_key.add(rule_key70.getTree());
+            pushFollow(FOLLOW_rule_id_in_rule1357);
+            rule_id71=rule_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_rule_id.add(rule_id55.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:21: ( rule_attributes )?
-            int alt24=2;
-            alt24 = dfa24.predict(input);
-            switch (alt24) {
+            if ( backtracking==0 ) stream_rule_id.add(rule_id71.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:21: ( rule_attributes )?
+            int alt28=2;
+            alt28 = dfa28.predict(input);
+            switch (alt28) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:21: rule_attributes
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:21: rule_attributes
                     {
-                    pushFollow(FOLLOW_rule_attributes_in_rule1164);
-                    rule_attributes56=rule_attributes();
+                    pushFollow(FOLLOW_rule_attributes_in_rule1359);
+                    rule_attributes72=rule_attributes();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_rule_attributes.add(rule_attributes56.getTree());
+                    if ( backtracking==0 ) stream_rule_attributes.add(rule_attributes72.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:38: ( when_part )?
-            int alt25=2;
-            int LA25_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:38: ( when_part )?
+            int alt29=2;
+            int LA29_0 = input.LA(1);
 
-            if ( (LA25_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {
-                alt25=1;
+            if ( (LA29_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {
+                alt29=1;
             }
-            switch (alt25) {
+            switch (alt29) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:382:38: when_part
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:417:38: when_part
                     {
-                    pushFollow(FOLLOW_when_part_in_rule1167);
-                    when_part57=when_part();
+                    pushFollow(FOLLOW_when_part_in_rule1362);
+                    when_part73=when_part();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_when_part.add(when_part57.getTree());
+                    if ( backtracking==0 ) stream_when_part.add(when_part73.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_rhs_chunk_in_rule1170);
-            rhs_chunk58=rhs_chunk();
+            pushFollow(FOLLOW_rhs_chunk_in_rule1365);
+            rhs_chunk74=rhs_chunk();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_rhs_chunk.add(rhs_chunk58.getTree());
+            if ( backtracking==0 ) stream_rhs_chunk.add(rhs_chunk74.getTree());
 
             // AST REWRITE
-            // elements: when_part, rhs_chunk, rule_id, rule_key, rule_attributes
+            // elements: rule_attributes, rhs_chunk, rule_key, when_part, rule_id
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2746,21 +3424,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 383:3: -> ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+            // 418: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:383:6: ^( rule_key rule_id ( rule_attributes )? ( when_part )? rhs_chunk )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:418: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:383:25: ( rule_attributes )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:418: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:383:42: ( when_part )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:418:42: ( when_part )?
                 if ( stream_when_part.hasNext() ) {
                     adaptor.addChild(root_1, stream_when_part.next());
 
@@ -2803,46 +3481,46 @@
     };
 
     // $ANTLR start when_part
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:386:1: when_part : when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:421: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);
 
         Object root_0 = null;
 
-        Token COLON60=null;
-        when_key_return when_key59 = null;
+        Token COLON76=null;
+        when_key_return when_key75 = null;
 
-        normal_lhs_block_return normal_lhs_block61 = null;
+        normal_lhs_block_return normal_lhs_block77 = null;
 
 
-        Object COLON60_tree=null;
+        Object COLON76_tree=null;
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleSubtreeStream stream_normal_lhs_block=new RewriteRuleSubtreeStream(adaptor,"rule normal_lhs_block");
         RewriteRuleSubtreeStream stream_when_key=new RewriteRuleSubtreeStream(adaptor,"rule when_key");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387: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:387:4: when_key ( COLON )? normal_lhs_block
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:2: ( when_key ( COLON )? normal_lhs_block -> when_key normal_lhs_block )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:4: when_key ( COLON )? normal_lhs_block
             {
-            pushFollow(FOLLOW_when_key_in_when_part1199);
-            when_key59=when_key();
+            pushFollow(FOLLOW_when_key_in_when_part1394);
+            when_key75=when_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_when_key.add(when_key59.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:13: ( COLON )?
-            int alt26=2;
-            int LA26_0 = input.LA(1);
+            if ( backtracking==0 ) stream_when_key.add(when_key75.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:13: ( COLON )?
+            int alt30=2;
+            int LA30_0 = input.LA(1);
 
-            if ( (LA26_0==COLON) ) {
-                alt26=1;
+            if ( (LA30_0==COLON) ) {
+                alt30=1;
             }
-            switch (alt26) {
+            switch (alt30) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:387:13: COLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:422:13: COLON
                     {
-                    COLON60=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_when_part1201); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COLON.add(COLON60);
+                    COLON76=(Token)input.LT(1);
+                    match(input,COLON,FOLLOW_COLON_in_when_part1396); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COLON.add(COLON76);
 
 
                     }
@@ -2850,14 +3528,14 @@
 
             }
 
-            pushFollow(FOLLOW_normal_lhs_block_in_when_part1204);
-            normal_lhs_block61=normal_lhs_block();
+            pushFollow(FOLLOW_normal_lhs_block_in_when_part1399);
+            normal_lhs_block77=normal_lhs_block();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block61.getTree());
+            if ( backtracking==0 ) stream_normal_lhs_block.add(normal_lhs_block77.getTree());
 
             // AST REWRITE
-            // elements: when_key, normal_lhs_block
+            // elements: normal_lhs_block, when_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -2867,7 +3545,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 388:2: -> when_key normal_lhs_block
+            // 423:2: -> when_key normal_lhs_block
             {
                 adaptor.addChild(root_0, stream_when_key.next());
                 adaptor.addChild(root_0, stream_normal_lhs_block.next());
@@ -2901,7 +3579,7 @@
     };
 
     // $ANTLR start rule_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:391:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:426:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );
     public final rule_id_return rule_id() throws RecognitionException {
         rule_id_return retval = new rule_id_return();
         retval.start = input.LT(1);
@@ -2915,29 +3593,29 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:2: (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] )
-            int alt27=2;
-            int LA27_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:2: (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] )
+            int alt31=2;
+            int LA31_0 = input.LA(1);
 
-            if ( (LA27_0==ID) ) {
-                alt27=1;
+            if ( (LA31_0==ID) ) {
+                alt31=1;
             }
-            else if ( (LA27_0==STRING) ) {
-                alt27=2;
+            else if ( (LA31_0==STRING) ) {
+                alt31=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("391:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );", 27, 0, input);
+                    new NoViableAltException("426:1: rule_id : (id= ID -> VT_RULE_ID[$id] | id= STRING -> VT_RULE_ID[$id] );", 31, 0, input);
 
                 throw nvae;
             }
-            switch (alt27) {
+            switch (alt31) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:392:5: id= ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:427:5: id= ID
                     {
                     id=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_rule_id1225); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_rule_id1420); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(id);
 
                     if ( backtracking==0 ) {
@@ -2955,7 +3633,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 393:66: -> VT_RULE_ID[$id]
+                    // 428:66: -> VT_RULE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, id));
 
@@ -2966,10 +3644,10 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:394:5: id= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:429:5: id= STRING
                     {
                     id=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_id1241); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_rule_id1436); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(id);
 
                     if ( backtracking==0 ) {
@@ -2987,7 +3665,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 395:66: -> VT_RULE_ID[$id]
+                    // 430:66: -> VT_RULE_ID[$id]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_RULE_ID, id));
 
@@ -3022,55 +3700,55 @@
     };
 
     // $ANTLR start rule_attributes
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:398:1: rule_attributes : ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:433:1: rule_attributes : ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) ;
     public final rule_attributes_return rule_attributes() throws RecognitionException {
         rule_attributes_return retval = new rule_attributes_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COLON63=null;
-        Token COMMA65=null;
+        Token COLON79=null;
+        Token COMMA81=null;
         rule_attribute_return attr = null;
 
-        attributes_key_return attributes_key62 = null;
+        attributes_key_return attributes_key78 = null;
 
-        rule_attribute_return rule_attribute64 = null;
+        rule_attribute_return rule_attribute80 = null;
 
 
-        Object COLON63_tree=null;
-        Object COMMA65_tree=null;
+        Object COLON79_tree=null;
+        Object COMMA81_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleSubtreeStream stream_attributes_key=new RewriteRuleSubtreeStream(adaptor,"rule attributes_key");
         RewriteRuleSubtreeStream stream_rule_attribute=new RewriteRuleSubtreeStream(adaptor,"rule rule_attribute");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399: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:399:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:2: ( ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )* -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:4: ( attributes_key COLON )? rule_attribute ( ( COMMA )? attr= rule_attribute )*
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:4: ( attributes_key COLON )?
-            int alt28=2;
-            int LA28_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:4: ( attributes_key COLON )?
+            int alt32=2;
+            int LA32_0 = input.LA(1);
 
-            if ( (LA28_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(Drool!
 sSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
-                int LA28_1 = input.LA(2);
+            if ( (LA32_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(Drool!
 sSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
+                int LA32_1 = input.LA(2);
 
-                if ( (LA28_1==COLON) && ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES)))) {
-                    alt28=1;
+                if ( (LA32_1==COLON) && ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES)))) {
+                    alt32=1;
                 }
             }
-            switch (alt28) {
+            switch (alt32) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:6: attributes_key COLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:6: attributes_key COLON
                     {
-                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1262);
-                    attributes_key62=attributes_key();
+                    pushFollow(FOLLOW_attributes_key_in_rule_attributes1457);
+                    attributes_key78=attributes_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_attributes_key.add(attributes_key62.getTree());
-                    COLON63=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1264); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COLON.add(COLON63);
+                    if ( backtracking==0 ) stream_attributes_key.add(attributes_key78.getTree());
+                    COLON79=(Token)input.LT(1);
+                    match(input,COLON,FOLLOW_COLON_in_rule_attributes1459); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COLON.add(COLON79);
 
 
                     }
@@ -3078,34 +3756,85 @@
 
             }
 
-            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1269);
-            rule_attribute64=rule_attribute();
+            pushFollow(FOLLOW_rule_attribute_in_rule_attributes1464);
+            rule_attribute80=rule_attribute();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_rule_attribute.add(rule_attribute64.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:45: ( ( COMMA )? attr= rule_attribute )*
-            loop30:
+            if ( backtracking==0 ) stream_rule_attribute.add(rule_attribute80.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:45: ( ( COMMA )? attr= rule_attribute )*
+            loop34:
             do {
-                int alt30=2;
-                alt30 = dfa30.predict(input);
-                switch (alt30) {
+                int alt34=2;
+                int LA34_0 = input.LA(1);
+
+                if ( (LA34_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(Drool!
 sSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {
+                    int LA34_1 = input.LA(2);
+
+                    if ( (LA34_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2,!
  "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                        alt34=1;
+                    }
+                    else if ( (LA34_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
+                        alt34=1;
+                    }
+                    else if ( (LA34_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {
+                        int LA34_6 = input.LA(3);
+
+                        if ( (LA34_6==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {
+                            int LA34_10 = input.LA(4);
+
+                            if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {
+                                alt34=1;
+                            }
+
+
+                        }
+                        else if ( (LA34_6==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {
+                            int LA34_11 = input.LA(4);
+
+                            if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {
+                                alt34=1;
+                            }
+
+
+                        }
+                        else if ( ((LA34_6>=VT_COMPILATION_UNIT && LA34_6<=SEMICOLON)||(LA34_6>=DOT && LA34_6<=STRING)||(LA34_6>=COMMA && LA34_6<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
+                            alt34=1;
+                        }
+
+
+                    }
+                    else if ( (LA34_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {
+                        alt34=1;
+                    }
+                    else if ( (LA34_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {
+                        alt34=1;
+                    }
+
+
+                }
+                else if ( (LA34_0==COMMA) ) {
+                    alt34=1;
+                }
+
+
+                switch (alt34) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:47: ( COMMA )? attr= rule_attribute
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:47: ( COMMA )? attr= rule_attribute
             	    {
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:47: ( COMMA )?
-            	    int alt29=2;
-            	    int LA29_0 = input.LA(1);
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:47: ( COMMA )?
+            	    int alt33=2;
+            	    int LA33_0 = input.LA(1);
 
-            	    if ( (LA29_0==COMMA) ) {
-            	        alt29=1;
+            	    if ( (LA33_0==COMMA) ) {
+            	        alt33=1;
             	    }
-            	    switch (alt29) {
+            	    switch (alt33) {
             	        case 1 :
-            	            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:399:47: COMMA
+            	            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:47: COMMA
             	            {
-            	            COMMA65=(Token)input.LT(1);
-            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1273); if (failed) return retval;
-            	            if ( backtracking==0 ) stream_COMMA.add(COMMA65);
+            	            COMMA81=(Token)input.LT(1);
+            	            match(input,COMMA,FOLLOW_COMMA_in_rule_attributes1468); if (failed) return retval;
+            	            if ( backtracking==0 ) stream_COMMA.add(COMMA81);
 
 
             	            }
@@ -3113,7 +3842,7 @@
 
             	    }
 
-            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1278);
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes1473);
             	    attr=rule_attribute();
             	    _fsp--;
             	    if (failed) return retval;
@@ -3123,13 +3852,13 @@
             	    break;
 
             	default :
-            	    break loop30;
+            	    break loop34;
                 }
             } while (true);
 
 
             // AST REWRITE
-            // elements: rule_attribute, attributes_key
+            // elements: attributes_key, rule_attribute
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -3139,14 +3868,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 400:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+            // 435:3: -> ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:400:6: ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:435:6: ^( VT_RULE_ATTRIBUTES ( attributes_key )? ( rule_attribute )+ )
                 {
                 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:400:27: ( attributes_key )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:435:27: ( attributes_key )?
                 if ( stream_attributes_key.hasNext() ) {
                     adaptor.addChild(root_1, stream_attributes_key.next());
 
@@ -3193,93 +3922,93 @@
     };
 
     // $ANTLR start rule_attribute
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:403:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:438:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );
     public final rule_attribute_return rule_attribute() throws RecognitionException {
         rule_attribute_return retval = new rule_attribute_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        salience_return salience66 = null;
+        salience_return salience82 = null;
 
-        no_loop_return no_loop67 = null;
+        no_loop_return no_loop83 = null;
 
-        agenda_group_return agenda_group68 = null;
+        agenda_group_return agenda_group84 = null;
 
-        duration_return duration69 = null;
+        duration_return duration85 = null;
 
-        activation_group_return activation_group70 = null;
+        activation_group_return activation_group86 = null;
 
-        auto_focus_return auto_focus71 = null;
+        auto_focus_return auto_focus87 = null;
 
-        date_effective_return date_effective72 = null;
+        date_effective_return date_effective88 = null;
 
-        date_expires_return date_expires73 = null;
+        date_expires_return date_expires89 = null;
 
-        enabled_return enabled74 = null;
+        enabled_return enabled90 = null;
 
-        ruleflow_group_return ruleflow_group75 = null;
+        ruleflow_group_return ruleflow_group91 = null;
 
-        lock_on_active_return lock_on_active76 = null;
+        lock_on_active_return lock_on_active92 = null;
 
-        dialect_return dialect77 = null;
+        dialect_return dialect93 = null;
 
 
 
          pushParaphrases(DroolsParaphareseTypes.RULE_ATTRIBUTE); 
         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 )
-            int alt31=12;
-            int LA31_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:2: ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect )
+            int alt35=12;
+            int LA35_0 = input.LA(1);
 
-            if ( (LA31_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(Drools!
 SoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
-                int LA31_1 = input.LA(2);
+            if ( (LA35_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(Drools!
 SoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                int LA35_1 = input.LA(2);
 
-                if ( (LA31_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-"!
 ) && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
-                    int LA31_2 = input.LA(3);
+                if ( (LA35_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-"!
 ) && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                    int LA35_2 = input.LA(3);
 
-                    if ( (LA31_2==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "!
 -") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
-                        int LA31_7 = input.LA(4);
+                    if ( (LA35_2==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "!
 -") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                        int LA35_7 = input.LA(4);
 
-                        if ( (LA31_7==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE)))) {
-                            alt31=11;
+                        if ( (LA35_7==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE)))) {
+                            alt35=11;
                         }
-                        else if ( (LA31_7==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
-                            int LA31_10 = input.LA(5);
+                        else if ( (LA35_7==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {
+                            int LA35_10 = input.LA(5);
 
                             if ( ((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
-                                alt31=3;
+                                alt35=3;
                             }
                             else if ( ((validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
-                                alt31=5;
+                                alt35=5;
                             }
                             else if ( ((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))) ) {
-                                alt31=7;
+                                alt35=7;
                             }
                             else if ( ((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))) ) {
-                                alt31=8;
+                                alt35=8;
                             }
                             else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
-                                alt31=10;
+                                alt35=10;
                             }
                             else {
                                 if (backtracking>0) {failed=true; return retval;}
                                 NoViableAltException nvae =
-                                    new NoViableAltException("403: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("438:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 10, input);
 
                                 throw nvae;
                             }
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))) ) {
-                            alt31=2;
+                            alt35=2;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))) ) {
-                            alt31=6;
+                            alt35=6;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("403: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("438:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 7, input);
 
                             throw nvae;
                         }
@@ -3287,41 +4016,41 @@
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("403: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("438:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 2, input);
 
                         throw nvae;
                     }
                 }
-                else if ( (LA31_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
-                    int LA31_3 = input.LA(3);
+                else if ( (LA35_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {
+                    int LA35_3 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {
-                        alt31=1;
+                        alt35=1;
                     }
                     else if ( ((validateIdentifierKey(DroolsSoftKeywords.DURATION))) ) {
-                        alt31=4;
+                        alt35=4;
                     }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("403: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("438:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 3, input);
 
                         throw nvae;
                     }
                 }
-                else if ( (LA31_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
-                    alt31=1;
+                else if ( (LA35_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {
+                    alt35=1;
                 }
-                else if ( (LA31_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {
-                    alt31=12;
+                else if ( (LA35_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {
+                    alt35=12;
                 }
-                else if ( (LA31_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {
-                    alt31=9;
+                else if ( (LA35_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {
+                    alt35=9;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("403: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("438:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 1, input);
 
                     throw nvae;
                 }
@@ -3329,164 +4058,164 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("403: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("438:1: rule_attribute : ( salience | no_loop | agenda_group | duration | activation_group | auto_focus | date_effective | date_expires | enabled | ruleflow_group | lock_on_active | dialect );", 35, 0, input);
 
                 throw nvae;
             }
-            switch (alt31) {
+            switch (alt35) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:441:4: salience
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_salience_in_rule_attribute1317);
-                    salience66=salience();
+                    pushFollow(FOLLOW_salience_in_rule_attribute1512);
+                    salience82=salience();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, salience66.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, salience82.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:442:4: no_loop
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_no_loop_in_rule_attribute1323);
-                    no_loop67=no_loop();
+                    pushFollow(FOLLOW_no_loop_in_rule_attribute1518);
+                    no_loop83=no_loop();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, no_loop67.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, no_loop83.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:443:4: agenda_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1330);
-                    agenda_group68=agenda_group();
+                    pushFollow(FOLLOW_agenda_group_in_rule_attribute1525);
+                    agenda_group84=agenda_group();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, agenda_group68.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, agenda_group84.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:4: duration
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_duration_in_rule_attribute1337);
-                    duration69=duration();
+                    pushFollow(FOLLOW_duration_in_rule_attribute1532);
+                    duration85=duration();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, duration69.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, duration85.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:445:4: activation_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_activation_group_in_rule_attribute1344);
-                    activation_group70=activation_group();
+                    pushFollow(FOLLOW_activation_group_in_rule_attribute1539);
+                    activation_group86=activation_group();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, activation_group70.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, activation_group86.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:446:4: auto_focus
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1350);
-                    auto_focus71=auto_focus();
+                    pushFollow(FOLLOW_auto_focus_in_rule_attribute1545);
+                    auto_focus87=auto_focus();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, auto_focus71.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, auto_focus87.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:447:4: date_effective
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_date_effective_in_rule_attribute1356);
-                    date_effective72=date_effective();
+                    pushFollow(FOLLOW_date_effective_in_rule_attribute1551);
+                    date_effective88=date_effective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, date_effective72.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, date_effective88.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:448:4: date_expires
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_date_expires_in_rule_attribute1362);
-                    date_expires73=date_expires();
+                    pushFollow(FOLLOW_date_expires_in_rule_attribute1557);
+                    date_expires89=date_expires();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, date_expires73.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, date_expires89.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:449:4: enabled
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_enabled_in_rule_attribute1368);
-                    enabled74=enabled();
+                    pushFollow(FOLLOW_enabled_in_rule_attribute1563);
+                    enabled90=enabled();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, enabled74.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, enabled90.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:450:4: ruleflow_group
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1374);
-                    ruleflow_group75=ruleflow_group();
+                    pushFollow(FOLLOW_ruleflow_group_in_rule_attribute1569);
+                    ruleflow_group91=ruleflow_group();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, ruleflow_group75.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, ruleflow_group91.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:451:4: lock_on_active
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1380);
-                    lock_on_active76=lock_on_active();
+                    pushFollow(FOLLOW_lock_on_active_in_rule_attribute1575);
+                    lock_on_active92=lock_on_active();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lock_on_active76.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lock_on_active92.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:452:4: dialect
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_dialect_in_rule_attribute1385);
-                    dialect77=dialect();
+                    pushFollow(FOLLOW_dialect_in_rule_attribute1580);
+                    dialect93=dialect();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, dialect77.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, dialect93.getTree());
 
                     }
                     break;
@@ -3518,35 +4247,35 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:455:1: date_effective : date_effective_key STRING ;
     public final date_effective_return date_effective() throws RecognitionException {
         date_effective_return retval = new date_effective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING79=null;
-        date_effective_key_return date_effective_key78 = null;
+        Token STRING95=null;
+        date_effective_key_return date_effective_key94 = null;
 
 
-        Object STRING79_tree=null;
+        Object STRING95_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:2: ( date_effective_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:456:4: date_effective_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_date_effective_key_in_date_effective1397);
-            date_effective_key78=date_effective_key();
+            pushFollow(FOLLOW_date_effective_key_in_date_effective1592);
+            date_effective_key94=date_effective_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_effective_key78.getTree(), root_0);
-            STRING79=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_effective1400); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_effective_key94.getTree(), root_0);
+            STRING95=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_date_effective1595); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING79_tree = (Object)adaptor.create(STRING79);
-            adaptor.addChild(root_0, STRING79_tree);
+            STRING95_tree = (Object)adaptor.create(STRING95);
+            adaptor.addChild(root_0, STRING95_tree);
             }
 
             }
@@ -3574,35 +4303,35 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:459:1: date_expires : date_expires_key STRING ;
     public final date_expires_return date_expires() throws RecognitionException {
         date_expires_return retval = new date_expires_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING81=null;
-        date_expires_key_return date_expires_key80 = null;
+        Token STRING97=null;
+        date_expires_key_return date_expires_key96 = null;
 
 
-        Object STRING81_tree=null;
+        Object STRING97_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:2: ( date_expires_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:460:4: date_expires_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_date_expires_key_in_date_expires1411);
-            date_expires_key80=date_expires_key();
+            pushFollow(FOLLOW_date_expires_key_in_date_expires1606);
+            date_expires_key96=date_expires_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_expires_key80.getTree(), root_0);
-            STRING81=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_date_expires1414); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(date_expires_key96.getTree(), root_0);
+            STRING97=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_date_expires1609); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING81_tree = (Object)adaptor.create(STRING81);
-            adaptor.addChild(root_0, STRING81_tree);
+            STRING97_tree = (Object)adaptor.create(STRING97);
+            adaptor.addChild(root_0, STRING97_tree);
             }
 
             }
@@ -3630,35 +4359,35 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:463:1: enabled : enabled_key BOOL ;
     public final enabled_return enabled() throws RecognitionException {
         enabled_return retval = new enabled_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL83=null;
-        enabled_key_return enabled_key82 = null;
+        Token BOOL99=null;
+        enabled_key_return enabled_key98 = null;
 
 
-        Object BOOL83_tree=null;
+        Object BOOL99_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:2: ( enabled_key BOOL )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:464:4: enabled_key BOOL
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_enabled_key_in_enabled1428);
-            enabled_key82=enabled_key();
+            pushFollow(FOLLOW_enabled_key_in_enabled1623);
+            enabled_key98=enabled_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(enabled_key82.getTree(), root_0);
-            BOOL83=(Token)input.LT(1);
-            match(input,BOOL,FOLLOW_BOOL_in_enabled1431); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(enabled_key98.getTree(), root_0);
+            BOOL99=(Token)input.LT(1);
+            match(input,BOOL,FOLLOW_BOOL_in_enabled1626); if (failed) return retval;
             if ( backtracking==0 ) {
-            BOOL83_tree = (Object)adaptor.create(BOOL83);
-            adaptor.addChild(root_0, BOOL83_tree);
+            BOOL99_tree = (Object)adaptor.create(BOOL99);
+            adaptor.addChild(root_0, BOOL99_tree);
             }
 
             }
@@ -3686,70 +4415,70 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:467:1: salience : salience_key ( INT | paren_chunk ) ;
     public final salience_return salience() throws RecognitionException {
         salience_return retval = new salience_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token INT85=null;
-        salience_key_return salience_key84 = null;
+        Token INT101=null;
+        salience_key_return salience_key100 = null;
 
-        paren_chunk_return paren_chunk86 = null;
+        paren_chunk_return paren_chunk102 = null;
 
 
-        Object INT85_tree=null;
+        Object INT101_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:2: ( salience_key ( INT | paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:4: salience_key ( INT | paren_chunk )
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_salience_key_in_salience1443);
-            salience_key84=salience_key();
+            pushFollow(FOLLOW_salience_key_in_salience1638);
+            salience_key100=salience_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(salience_key84.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:434:3: ( INT | paren_chunk )
-            int alt32=2;
-            int LA32_0 = input.LA(1);
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(salience_key100.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:3: ( INT | paren_chunk )
+            int alt36=2;
+            int LA36_0 = input.LA(1);
 
-            if ( (LA32_0==INT) ) {
-                alt32=1;
+            if ( (LA36_0==INT) ) {
+                alt36=1;
             }
-            else if ( (LA32_0==LEFT_PAREN) ) {
-                alt32=2;
+            else if ( (LA36_0==LEFT_PAREN) ) {
+                alt36=2;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("434:3: ( INT | paren_chunk )", 32, 0, input);
+                    new NoViableAltException("469:3: ( INT | paren_chunk )", 36, 0, input);
 
                 throw nvae;
             }
-            switch (alt32) {
+            switch (alt36) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:469:5: INT
                     {
-                    INT85=(Token)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_salience1450); if (failed) return retval;
+                    INT101=(Token)input.LT(1);
+                    match(input,INT,FOLLOW_INT_in_salience1645); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    INT85_tree = (Object)adaptor.create(INT85);
-                    adaptor.addChild(root_0, INT85_tree);
+                    INT101_tree = (Object)adaptor.create(INT101);
+                    adaptor.addChild(root_0, INT101_tree);
                     }
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:470:5: paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_salience1459);
-                    paren_chunk86=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_salience1654);
+                    paren_chunk102=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk86.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk102.getTree());
 
                     }
                     break;
@@ -3782,46 +4511,46 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:474:1: no_loop : no_loop_key ( BOOL )? ;
     public final no_loop_return no_loop() throws RecognitionException {
         no_loop_return retval = new no_loop_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL88=null;
-        no_loop_key_return no_loop_key87 = null;
+        Token BOOL104=null;
+        no_loop_key_return no_loop_key103 = null;
 
 
-        Object BOOL88_tree=null;
+        Object BOOL104_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:2: ( no_loop_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:4: no_loop_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_no_loop_key_in_no_loop1475);
-            no_loop_key87=no_loop_key();
+            pushFollow(FOLLOW_no_loop_key_in_no_loop1670);
+            no_loop_key103=no_loop_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(no_loop_key87.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:440:17: ( BOOL )?
-            int alt33=2;
-            int LA33_0 = input.LA(1);
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(no_loop_key103.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:17: ( BOOL )?
+            int alt37=2;
+            int LA37_0 = input.LA(1);
 
-            if ( (LA33_0==BOOL) ) {
-                alt33=1;
+            if ( (LA37_0==BOOL) ) {
+                alt37=1;
             }
-            switch (alt33) {
+            switch (alt37) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:475:17: BOOL
                     {
-                    BOOL88=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1478); if (failed) return retval;
+                    BOOL104=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_no_loop1673); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    BOOL88_tree = (Object)adaptor.create(BOOL88);
-                    adaptor.addChild(root_0, BOOL88_tree);
+                    BOOL104_tree = (Object)adaptor.create(BOOL104);
+                    adaptor.addChild(root_0, BOOL104_tree);
                     }
 
                     }
@@ -3855,46 +4584,46 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:478:1: auto_focus : auto_focus_key ( BOOL )? ;
     public final auto_focus_return auto_focus() throws RecognitionException {
         auto_focus_return retval = new auto_focus_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL90=null;
-        auto_focus_key_return auto_focus_key89 = null;
+        Token BOOL106=null;
+        auto_focus_key_return auto_focus_key105 = null;
 
 
-        Object BOOL90_tree=null;
+        Object BOOL106_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:2: ( auto_focus_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:4: auto_focus_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1490);
-            auto_focus_key89=auto_focus_key();
+            pushFollow(FOLLOW_auto_focus_key_in_auto_focus1685);
+            auto_focus_key105=auto_focus_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(auto_focus_key89.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:444:20: ( BOOL )?
-            int alt34=2;
-            int LA34_0 = input.LA(1);
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(auto_focus_key105.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:20: ( BOOL )?
+            int alt38=2;
+            int LA38_0 = input.LA(1);
 
-            if ( (LA34_0==BOOL) ) {
-                alt34=1;
+            if ( (LA38_0==BOOL) ) {
+                alt38=1;
             }
-            switch (alt34) {
+            switch (alt38) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:479:20: BOOL
                     {
-                    BOOL90=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1493); if (failed) return retval;
+                    BOOL106=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_auto_focus1688); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    BOOL90_tree = (Object)adaptor.create(BOOL90);
-                    adaptor.addChild(root_0, BOOL90_tree);
+                    BOOL106_tree = (Object)adaptor.create(BOOL106);
+                    adaptor.addChild(root_0, BOOL106_tree);
                     }
 
                     }
@@ -3928,35 +4657,35 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:482:1: activation_group : activation_group_key STRING ;
     public final activation_group_return activation_group() throws RecognitionException {
         activation_group_return retval = new activation_group_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING92=null;
-        activation_group_key_return activation_group_key91 = null;
+        Token STRING108=null;
+        activation_group_key_return activation_group_key107 = null;
 
 
-        Object STRING92_tree=null;
+        Object STRING108_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:2: ( activation_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:483:4: activation_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_activation_group_key_in_activation_group1507);
-            activation_group_key91=activation_group_key();
+            pushFollow(FOLLOW_activation_group_key_in_activation_group1702);
+            activation_group_key107=activation_group_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(activation_group_key91.getTree(), root_0);
-            STRING92=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_activation_group1510); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(activation_group_key107.getTree(), root_0);
+            STRING108=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_activation_group1705); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING92_tree = (Object)adaptor.create(STRING92);
-            adaptor.addChild(root_0, STRING92_tree);
+            STRING108_tree = (Object)adaptor.create(STRING108);
+            adaptor.addChild(root_0, STRING108_tree);
             }
 
             }
@@ -3984,35 +4713,35 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:486:1: ruleflow_group : ruleflow_group_key STRING ;
     public final ruleflow_group_return ruleflow_group() throws RecognitionException {
         ruleflow_group_return retval = new ruleflow_group_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING94=null;
-        ruleflow_group_key_return ruleflow_group_key93 = null;
+        Token STRING110=null;
+        ruleflow_group_key_return ruleflow_group_key109 = null;
 
 
-        Object STRING94_tree=null;
+        Object STRING110_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:2: ( ruleflow_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:487:4: ruleflow_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1521);
-            ruleflow_group_key93=ruleflow_group_key();
+            pushFollow(FOLLOW_ruleflow_group_key_in_ruleflow_group1716);
+            ruleflow_group_key109=ruleflow_group_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(ruleflow_group_key93.getTree(), root_0);
-            STRING94=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1524); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(ruleflow_group_key109.getTree(), root_0);
+            STRING110=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_ruleflow_group1719); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING94_tree = (Object)adaptor.create(STRING94);
-            adaptor.addChild(root_0, STRING94_tree);
+            STRING110_tree = (Object)adaptor.create(STRING110);
+            adaptor.addChild(root_0, STRING110_tree);
             }
 
             }
@@ -4040,35 +4769,35 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:490:1: agenda_group : agenda_group_key STRING ;
     public final agenda_group_return agenda_group() throws RecognitionException {
         agenda_group_return retval = new agenda_group_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING96=null;
-        agenda_group_key_return agenda_group_key95 = null;
+        Token STRING112=null;
+        agenda_group_key_return agenda_group_key111 = null;
 
 
-        Object STRING96_tree=null;
+        Object STRING112_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:491:2: ( agenda_group_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:491:4: agenda_group_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1535);
-            agenda_group_key95=agenda_group_key();
+            pushFollow(FOLLOW_agenda_group_key_in_agenda_group1730);
+            agenda_group_key111=agenda_group_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(agenda_group_key95.getTree(), root_0);
-            STRING96=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_agenda_group1538); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(agenda_group_key111.getTree(), root_0);
+            STRING112=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_agenda_group1733); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING96_tree = (Object)adaptor.create(STRING96);
-            adaptor.addChild(root_0, STRING96_tree);
+            STRING112_tree = (Object)adaptor.create(STRING112);
+            adaptor.addChild(root_0, STRING112_tree);
             }
 
             }
@@ -4096,35 +4825,35 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:494:1: duration : duration_key INT ;
     public final duration_return duration() throws RecognitionException {
         duration_return retval = new duration_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token INT98=null;
-        duration_key_return duration_key97 = null;
+        Token INT114=null;
+        duration_key_return duration_key113 = null;
 
 
-        Object INT98_tree=null;
+        Object INT114_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:2: ( duration_key INT )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:4: duration_key INT
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_duration_key_in_duration1549);
-            duration_key97=duration_key();
+            pushFollow(FOLLOW_duration_key_in_duration1744);
+            duration_key113=duration_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(duration_key97.getTree(), root_0);
-            INT98=(Token)input.LT(1);
-            match(input,INT,FOLLOW_INT_in_duration1552); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(duration_key113.getTree(), root_0);
+            INT114=(Token)input.LT(1);
+            match(input,INT,FOLLOW_INT_in_duration1747); if (failed) return retval;
             if ( backtracking==0 ) {
-            INT98_tree = (Object)adaptor.create(INT98);
-            adaptor.addChild(root_0, INT98_tree);
+            INT114_tree = (Object)adaptor.create(INT114);
+            adaptor.addChild(root_0, INT114_tree);
             }
 
             }
@@ -4152,35 +4881,35 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:498:1: dialect : dialect_key STRING ;
     public final dialect_return dialect() throws RecognitionException {
         dialect_return retval = new dialect_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token STRING100=null;
-        dialect_key_return dialect_key99 = null;
+        Token STRING116=null;
+        dialect_key_return dialect_key115 = null;
 
 
-        Object STRING100_tree=null;
+        Object STRING116_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:499:2: ( dialect_key STRING )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:499:4: dialect_key STRING
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_dialect_key_in_dialect1566);
-            dialect_key99=dialect_key();
+            pushFollow(FOLLOW_dialect_key_in_dialect1761);
+            dialect_key115=dialect_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(dialect_key99.getTree(), root_0);
-            STRING100=(Token)input.LT(1);
-            match(input,STRING,FOLLOW_STRING_in_dialect1569); if (failed) return retval;
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(dialect_key115.getTree(), root_0);
+            STRING116=(Token)input.LT(1);
+            match(input,STRING,FOLLOW_STRING_in_dialect1764); if (failed) return retval;
             if ( backtracking==0 ) {
-            STRING100_tree = (Object)adaptor.create(STRING100);
-            adaptor.addChild(root_0, STRING100_tree);
+            STRING116_tree = (Object)adaptor.create(STRING116);
+            adaptor.addChild(root_0, STRING116_tree);
             }
 
             }
@@ -4208,46 +4937,46 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:502:1: lock_on_active : lock_on_active_key ( BOOL )? ;
     public final lock_on_active_return lock_on_active() throws RecognitionException {
         lock_on_active_return retval = new lock_on_active_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token BOOL102=null;
-        lock_on_active_key_return lock_on_active_key101 = null;
+        Token BOOL118=null;
+        lock_on_active_key_return lock_on_active_key117 = null;
 
 
-        Object BOOL102_tree=null;
+        Object BOOL118_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:2: ( lock_on_active_key ( BOOL )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:4: lock_on_active_key ( BOOL )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active1587);
-            lock_on_active_key101=lock_on_active_key();
+            pushFollow(FOLLOW_lock_on_active_key_in_lock_on_active1782);
+            lock_on_active_key117=lock_on_active_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(lock_on_active_key101.getTree(), root_0);
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:468:24: ( BOOL )?
-            int alt35=2;
-            int LA35_0 = input.LA(1);
+            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(lock_on_active_key117.getTree(), root_0);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:24: ( BOOL )?
+            int alt39=2;
+            int LA39_0 = input.LA(1);
 
-            if ( (LA35_0==BOOL) ) {
-                alt35=1;
+            if ( (LA39_0==BOOL) ) {
+                alt39=1;
             }
-            switch (alt35) {
+            switch (alt39) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:503:24: BOOL
                     {
-                    BOOL102=(Token)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1590); if (failed) return retval;
+                    BOOL118=(Token)input.LT(1);
+                    match(input,BOOL,FOLLOW_BOOL_in_lock_on_active1785); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    BOOL102_tree = (Object)adaptor.create(BOOL102);
-                    adaptor.addChild(root_0, BOOL102_tree);
+                    BOOL118_tree = (Object)adaptor.create(BOOL118);
+                    adaptor.addChild(root_0, BOOL118_tree);
                     }
 
                     }
@@ -4281,47 +5010,47 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:506:1: normal_lhs_block : ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) ;
     public final normal_lhs_block_return normal_lhs_block() throws RecognitionException {
         normal_lhs_block_return retval = new normal_lhs_block_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_return lhs103 = null;
+        lhs_return lhs119 = null;
 
 
         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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:507:2: ( ( lhs )* -> ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:507:4: ( lhs )*
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:472:4: ( lhs )*
-            loop36:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:507:4: ( lhs )*
+            loop40:
             do {
-                int alt36=2;
-                int LA36_0 = input.LA(1);
+                int alt40=2;
+                int LA40_0 = input.LA(1);
 
-                if ( (LA36_0==ID||LA36_0==LEFT_PAREN) ) {
-                    alt36=1;
+                if ( (LA40_0==ID||LA40_0==LEFT_PAREN) ) {
+                    alt40=1;
                 }
 
 
-                switch (alt36) {
+                switch (alt40) {
             	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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:507:4: lhs
             	    {
-            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1602);
-            	    lhs103=lhs();
+            	    pushFollow(FOLLOW_lhs_in_normal_lhs_block1797);
+            	    lhs119=lhs();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_lhs.add(lhs103.getTree());
+            	    if ( backtracking==0 ) stream_lhs.add(lhs119.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop36;
+            	    break loop40;
                 }
             } while (true);
 
@@ -4337,14 +5066,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 )* )
+            // 508: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:23: ( lhs )*
                 while ( stream_lhs.hasNext() ) {
                     adaptor.addChild(root_1, stream_lhs.next());
 
@@ -4383,28 +5112,28 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:511:1: lhs : lhs_or ;
     public final lhs_return lhs() throws RecognitionException {
         lhs_return retval = new lhs_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_or_return lhs_or104 = null;
+        lhs_or_return lhs_or120 = null;
 
 
 
         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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:511:5: ( lhs_or )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:511:7: lhs_or
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_or_in_lhs1623);
-            lhs_or104=lhs_or();
+            pushFollow(FOLLOW_lhs_or_in_lhs1818);
+            lhs_or120=lhs_or();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or104.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or120.getTree());
 
             }
 
@@ -4431,7 +5160,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:514:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );
     public final lhs_or_return lhs_or() throws RecognitionException {
         lhs_or_return retval = new lhs_or_return();
         retval.start = input.LT(1);
@@ -4439,22 +5168,22 @@
         Object root_0 = null;
 
         Token pipe=null;
-        Token LEFT_PAREN105=null;
-        Token RIGHT_PAREN107=null;
+        Token LEFT_PAREN121=null;
+        Token RIGHT_PAREN123=null;
         or_key_return or = null;
 
         or_key_return value = null;
 
-        lhs_and_return lhs_and106 = null;
+        lhs_and_return lhs_and122 = null;
 
-        lhs_and_return lhs_and108 = null;
+        lhs_and_return lhs_and124 = null;
 
-        lhs_and_return lhs_and109 = null;
+        lhs_and_return lhs_and125 = null;
 
 
         Object pipe_tree=null;
-        Object LEFT_PAREN105_tree=null;
-        Object RIGHT_PAREN107_tree=null;
+        Object LEFT_PAREN121_tree=null;
+        Object RIGHT_PAREN123_tree=null;
         RewriteRuleTokenStream stream_DOUBLE_PIPE=new RewriteRuleTokenStream(adaptor,"token DOUBLE_PIPE");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
@@ -4464,39 +5193,36 @@
         	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 ) )* )
-            int alt40=2;
-            int LA40_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:3: ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* )
+            int alt44=2;
+            int LA44_0 = input.LA(1);
 
-            if ( (LA40_0==LEFT_PAREN) ) {
-                int LA40_1 = input.LA(2);
+            if ( (LA44_0==LEFT_PAREN) ) {
+                int LA44_1 = input.LA(2);
 
-                if ( (LA40_1==LEFT_PAREN) ) {
-                    alt40=2;
-                }
-                else if ( (LA40_1==ID) ) {
+                if ( (LA44_1==ID) ) {
                     switch ( input.LA(3) ) {
                     case DOT:
                     case COLON:
                     case LEFT_SQUARE:
                         {
-                        alt40=2;
+                        alt44=2;
                         }
                         break;
                     case ID:
                         {
-                        int LA40_4 = input.LA(4);
+                        int LA44_4 = input.LA(4);
 
                         if ( (synpred1()) ) {
-                            alt40=1;
+                            alt44=1;
                         }
                         else if ( (true) ) {
-                            alt40=2;
+                            alt44=2;
                         }
                         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("514:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 44, 4, input);
 
                             throw nvae;
                         }
@@ -4504,18 +5230,18 @@
                         break;
                     case LEFT_PAREN:
                         {
-                        int LA40_5 = input.LA(4);
+                        int LA44_5 = input.LA(4);
 
                         if ( (synpred1()) ) {
-                            alt40=1;
+                            alt44=1;
                         }
                         else if ( (true) ) {
-                            alt40=2;
+                            alt44=2;
                         }
                         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("514:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 44, 5, input);
 
                             throw nvae;
                         }
@@ -4524,85 +5250,88 @@
                     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("514:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 44, 3, input);
 
                         throw nvae;
                     }
 
                 }
+                else if ( (LA44_1==LEFT_PAREN) ) {
+                    alt44=2;
+                }
                 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("514:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 44, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA40_0==ID) ) {
-                alt40=2;
+            else if ( (LA44_0==ID) ) {
+                alt44=2;
             }
             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("514:1: lhs_or : ( ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN -> ^( VT_OR_PREFIX[$or.start] ( lhs_and )+ RIGHT_PAREN ) | ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )* );", 44, 0, input);
 
                 throw nvae;
             }
-            switch (alt40) {
+            switch (alt44) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:5: ( LEFT_PAREN or_key )=> LEFT_PAREN or= or_key ( lhs_and )+ RIGHT_PAREN
                     {
-                    LEFT_PAREN105=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or1644); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN105);
+                    LEFT_PAREN121=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_or1839); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN121);
 
-                    pushFollow(FOLLOW_or_key_in_lhs_or1648);
+                    pushFollow(FOLLOW_or_key_in_lhs_or1843);
                     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 )+
-                    int cnt37=0;
-                    loop37:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:48: ( lhs_and )+
+                    int cnt41=0;
+                    loop41:
                     do {
-                        int alt37=2;
-                        int LA37_0 = input.LA(1);
+                        int alt41=2;
+                        int LA41_0 = input.LA(1);
 
-                        if ( (LA37_0==ID||LA37_0==LEFT_PAREN) ) {
-                            alt37=1;
+                        if ( (LA41_0==ID||LA41_0==LEFT_PAREN) ) {
+                            alt41=1;
                         }
 
 
-                        switch (alt37) {
+                        switch (alt41) {
                     	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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:48: lhs_and
                     	    {
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1650);
-                    	    lhs_and106=lhs_and();
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1845);
+                    	    lhs_and122=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and106.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and122.getTree());
 
                     	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt37 >= 1 ) break loop37;
+                    	    if ( cnt41 >= 1 ) break loop41;
                     	    if (backtracking>0) {failed=true; return retval;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(37, input);
+                                    new EarlyExitException(41, input);
                                 throw eee;
                         }
-                        cnt37++;
+                        cnt41++;
                     } while (true);
 
-                    RIGHT_PAREN107=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or1653); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN107);
+                    RIGHT_PAREN123=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_or1848); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN123);
 
 
                     // AST REWRITE
-                    // elements: lhs_and, RIGHT_PAREN
+                    // elements: RIGHT_PAREN, lhs_and
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -4612,9 +5341,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 )
+                    // 518: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:518: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);
@@ -4639,16 +5368,16 @@
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:519:4: ( lhs_and -> lhs_and ) ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
                     {
-                    // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:519:4: ( lhs_and -> lhs_and )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:519:5: lhs_and
                     {
-                    pushFollow(FOLLOW_lhs_and_in_lhs_or1674);
-                    lhs_and108=lhs_and();
+                    pushFollow(FOLLOW_lhs_and_in_lhs_or1869);
+                    lhs_and124=lhs_and();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_and.add(lhs_and108.getTree());
+                    if ( backtracking==0 ) stream_lhs_and.add(lhs_and124.getTree());
 
                     // AST REWRITE
                     // elements: lhs_and
@@ -4661,7 +5390,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 484:13: -> lhs_and
+                    // 519:13: -> lhs_and
                     {
                         adaptor.addChild(root_0, stream_lhs_and.next());
 
@@ -4671,58 +5400,58 @@
 
                     }
 
-                    // /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 ) )*
-                    loop39:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:3: ( ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and -> ^( VT_OR_INFIX[orToken] $lhs_or lhs_and ) )*
+                    loop43:
                     do {
-                        int alt39=2;
-                        int LA39_0 = input.LA(1);
+                        int alt43=2;
+                        int LA43_0 = input.LA(1);
 
-                        if ( (LA39_0==ID) ) {
-                            int LA39_2 = input.LA(2);
+                        if ( (LA43_0==ID) ) {
+                            int LA43_2 = input.LA(2);
 
                             if ( ((synpred2()&&(validateIdentifierKey(DroolsSoftKeywords.OR)))) ) {
-                                alt39=1;
+                                alt43=1;
                             }
 
 
                         }
-                        else if ( (LA39_0==DOUBLE_PIPE) ) {
-                            int LA39_3 = input.LA(2);
+                        else if ( (LA43_0==DOUBLE_PIPE) ) {
+                            int LA43_3 = input.LA(2);
 
                             if ( (synpred2()) ) {
-                                alt39=1;
+                                alt43=1;
                             }
 
 
                         }
 
 
-                        switch (alt39) {
+                        switch (alt43) {
                     	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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:5: ( or_key | DOUBLE_PIPE )=> (value= or_key | pipe= DOUBLE_PIPE ) lhs_and
                     	    {
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:485:28: (value= or_key | pipe= DOUBLE_PIPE )
-                    	    int alt38=2;
-                    	    int LA38_0 = input.LA(1);
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:28: (value= or_key | pipe= DOUBLE_PIPE )
+                    	    int alt42=2;
+                    	    int LA42_0 = input.LA(1);
 
-                    	    if ( (LA38_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
-                    	        alt38=1;
+                    	    if ( (LA42_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
+                    	        alt42=1;
                     	    }
-                    	    else if ( (LA38_0==DOUBLE_PIPE) ) {
-                    	        alt38=2;
+                    	    else if ( (LA42_0==DOUBLE_PIPE) ) {
+                    	        alt42=2;
                     	    }
                     	    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("520:28: (value= or_key | pipe= DOUBLE_PIPE )", 42, 0, input);
 
                     	        throw nvae;
                     	    }
-                    	    switch (alt38) {
+                    	    switch (alt42) {
                     	        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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:29: value= or_key
                     	            {
-                    	            pushFollow(FOLLOW_or_key_in_lhs_or1696);
+                    	            pushFollow(FOLLOW_or_key_in_lhs_or1891);
                     	            value=or_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -4734,10 +5463,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:69: pipe= DOUBLE_PIPE
                     	            {
                     	            pipe=(Token)input.LT(1);
-                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1703); if (failed) return retval;
+                    	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_lhs_or1898); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
                     	            if ( backtracking==0 ) {
@@ -4749,11 +5478,11 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1708);
-                    	    lhs_and109=lhs_and();
+                    	    pushFollow(FOLLOW_lhs_and_in_lhs_or1903);
+                    	    lhs_and125=lhs_and();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and109.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_and.add(lhs_and125.getTree());
 
                     	    // AST REWRITE
                     	    // elements: lhs_and, lhs_or
@@ -4766,9 +5495,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 )
+                    	    // 521: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:521: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);
@@ -4787,7 +5516,7 @@
                     	    break;
 
                     	default :
-                    	    break loop39;
+                    	    break loop43;
                         }
                     } while (true);
 
@@ -4819,7 +5548,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:524:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );
     public final lhs_and_return lhs_and() throws RecognitionException {
         lhs_and_return retval = new lhs_and_return();
         retval.start = input.LT(1);
@@ -4827,22 +5556,22 @@
         Object root_0 = null;
 
         Token amper=null;
-        Token LEFT_PAREN110=null;
-        Token RIGHT_PAREN112=null;
+        Token LEFT_PAREN126=null;
+        Token RIGHT_PAREN128=null;
         and_key_return and = null;
 
         and_key_return value = null;
 
-        lhs_unary_return lhs_unary111 = null;
+        lhs_unary_return lhs_unary127 = null;
 
-        lhs_unary_return lhs_unary113 = null;
+        lhs_unary_return lhs_unary129 = null;
 
-        lhs_unary_return lhs_unary114 = null;
+        lhs_unary_return lhs_unary130 = null;
 
 
         Object amper_tree=null;
-        Object LEFT_PAREN110_tree=null;
-        Object RIGHT_PAREN112_tree=null;
+        Object LEFT_PAREN126_tree=null;
+        Object RIGHT_PAREN128_tree=null;
         RewriteRuleTokenStream stream_DOUBLE_AMPER=new RewriteRuleTokenStream(adaptor,"token DOUBLE_AMPER");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
@@ -4852,61 +5581,58 @@
         	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 ) )* )
-            int alt44=2;
-            int LA44_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:3: ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* )
+            int alt48=2;
+            int LA48_0 = input.LA(1);
 
-            if ( (LA44_0==LEFT_PAREN) ) {
-                int LA44_1 = input.LA(2);
+            if ( (LA48_0==LEFT_PAREN) ) {
+                int LA48_1 = input.LA(2);
 
-                if ( (LA44_1==LEFT_PAREN) ) {
-                    alt44=2;
-                }
-                else if ( (LA44_1==ID) ) {
+                if ( (LA48_1==ID) ) {
                     switch ( input.LA(3) ) {
                     case DOT:
                     case COLON:
                     case LEFT_SQUARE:
                         {
-                        alt44=2;
+                        alt48=2;
                         }
                         break;
                     case LEFT_PAREN:
                         {
                         switch ( input.LA(4) ) {
-                        case ID:
+                        case LEFT_PAREN:
                             {
-                            int LA44_6 = input.LA(5);
+                            int LA48_6 = input.LA(5);
 
                             if ( (synpred3()) ) {
-                                alt44=1;
+                                alt48=1;
                             }
                             else if ( (true) ) {
-                                alt44=2;
+                                alt48=2;
                             }
                             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("524:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 6, input);
 
                                 throw nvae;
                             }
                             }
                             break;
-                        case LEFT_PAREN:
+                        case ID:
                             {
-                            int LA44_7 = input.LA(5);
+                            int LA48_7 = input.LA(5);
 
                             if ( (synpred3()) ) {
-                                alt44=1;
+                                alt48=1;
                             }
                             else if ( (true) ) {
-                                alt44=2;
+                                alt48=2;
                             }
                             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("524:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 7, input);
 
                                 throw nvae;
                             }
@@ -4919,6 +5645,7 @@
                         case VT_LABEL:
                         case VT_QUERY_ID:
                         case VT_TEMPLATE_ID:
+                        case VT_TYPE_DECLARE_ID:
                         case VT_RULE_ID:
                         case VT_ENTRYPOINT_ID:
                         case VT_SLOT_ID:
@@ -4928,6 +5655,7 @@
                         case VT_CURLY_CHUNK:
                         case VT_SQUARE_CHUNK:
                         case VT_PAREN_CHUNK:
+                        case VT_BEHAVIOR:
                         case VT_AND_IMPLICIT:
                         case VT_AND_PREFIX:
                         case VT_OR_PREFIX:
@@ -5000,11 +5728,14 @@
                         case STRING:
                         case COMMA:
                         case RIGHT_PAREN:
+                        case AT:
                         case COLON:
+                        case EQUALS:
                         case BOOL:
                         case INT:
                         case DOUBLE_PIPE:
                         case DOUBLE_AMPER:
+                        case OVER:
                         case ARROW:
                         case EQUAL:
                         case GREATER:
@@ -5031,13 +5762,13 @@
                         case C_STYLE_SINGLE_LINE_COMMENT:
                         case MULTI_LINE_COMMENT:
                             {
-                            alt44=2;
+                            alt48=2;
                             }
                             break;
                         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("524:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 4, input);
 
                             throw nvae;
                         }
@@ -5046,18 +5777,18 @@
                         break;
                     case ID:
                         {
-                        int LA44_5 = input.LA(4);
+                        int LA48_5 = input.LA(4);
 
                         if ( (synpred3()) ) {
-                            alt44=1;
+                            alt48=1;
                         }
                         else if ( (true) ) {
-                            alt44=2;
+                            alt48=2;
                         }
                         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("524:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 5, input);
 
                             throw nvae;
                         }
@@ -5066,85 +5797,88 @@
                     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("524:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 3, input);
 
                         throw nvae;
                     }
 
                 }
+                else if ( (LA48_1==LEFT_PAREN) ) {
+                    alt48=2;
+                }
                 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("524:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA44_0==ID) ) {
-                alt44=2;
+            else if ( (LA48_0==ID) ) {
+                alt48=2;
             }
             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("524:1: lhs_and : ( ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN -> ^( VT_AND_PREFIX[$and.start] ( lhs_unary )+ RIGHT_PAREN ) | ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )* );", 48, 0, input);
 
                 throw nvae;
             }
-            switch (alt44) {
+            switch (alt48) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:5: ( LEFT_PAREN and_key )=> LEFT_PAREN and= and_key ( lhs_unary )+ RIGHT_PAREN
                     {
-                    LEFT_PAREN110=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and1746); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN110);
+                    LEFT_PAREN126=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_and1941); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN126);
 
-                    pushFollow(FOLLOW_and_key_in_lhs_and1750);
+                    pushFollow(FOLLOW_and_key_in_lhs_and1945);
                     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 )+
-                    int cnt41=0;
-                    loop41:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:51: ( lhs_unary )+
+                    int cnt45=0;
+                    loop45:
                     do {
-                        int alt41=2;
-                        int LA41_0 = input.LA(1);
+                        int alt45=2;
+                        int LA45_0 = input.LA(1);
 
-                        if ( (LA41_0==ID||LA41_0==LEFT_PAREN) ) {
-                            alt41=1;
+                        if ( (LA45_0==ID||LA45_0==LEFT_PAREN) ) {
+                            alt45=1;
                         }
 
 
-                        switch (alt41) {
+                        switch (alt45) {
                     	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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:51: lhs_unary
                     	    {
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1752);
-                    	    lhs_unary111=lhs_unary();
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1947);
+                    	    lhs_unary127=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary111.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary127.getTree());
 
                     	    }
                     	    break;
 
                     	default :
-                    	    if ( cnt41 >= 1 ) break loop41;
+                    	    if ( cnt45 >= 1 ) break loop45;
                     	    if (backtracking>0) {failed=true; return retval;}
                                 EarlyExitException eee =
-                                    new EarlyExitException(41, input);
+                                    new EarlyExitException(45, input);
                                 throw eee;
                         }
-                        cnt41++;
+                        cnt45++;
                     } while (true);
 
-                    RIGHT_PAREN112=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and1755); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN112);
+                    RIGHT_PAREN128=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_and1950); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN128);
 
 
                     // AST REWRITE
-                    // elements: lhs_unary, RIGHT_PAREN
+                    // elements: RIGHT_PAREN, lhs_unary
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -5154,9 +5888,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 )
+                    // 528: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:528: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);
@@ -5181,16 +5915,16 @@
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:4: ( lhs_unary -> lhs_unary ) ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
                     {
-                    // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:4: ( lhs_unary -> lhs_unary )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:529:5: lhs_unary
                     {
-                    pushFollow(FOLLOW_lhs_unary_in_lhs_and1776);
-                    lhs_unary113=lhs_unary();
+                    pushFollow(FOLLOW_lhs_unary_in_lhs_and1971);
+                    lhs_unary129=lhs_unary();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary113.getTree());
+                    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary129.getTree());
 
                     // AST REWRITE
                     // elements: lhs_unary
@@ -5203,7 +5937,7 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 494:15: -> lhs_unary
+                    // 529:15: -> lhs_unary
                     {
                         adaptor.addChild(root_0, stream_lhs_unary.next());
 
@@ -5213,58 +5947,58 @@
 
                     }
 
-                    // /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 ) )*
-                    loop43:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:3: ( ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary -> ^( VT_AND_INFIX[andToken] $lhs_and lhs_unary ) )*
+                    loop47:
                     do {
-                        int alt43=2;
-                        int LA43_0 = input.LA(1);
+                        int alt47=2;
+                        int LA47_0 = input.LA(1);
 
-                        if ( (LA43_0==ID) ) {
-                            int LA43_2 = input.LA(2);
+                        if ( (LA47_0==ID) ) {
+                            int LA47_2 = input.LA(2);
 
                             if ( ((synpred4()&&(validateIdentifierKey(DroolsSoftKeywords.AND)))) ) {
-                                alt43=1;
+                                alt47=1;
                             }
 
 
                         }
-                        else if ( (LA43_0==DOUBLE_AMPER) ) {
-                            int LA43_3 = input.LA(2);
+                        else if ( (LA47_0==DOUBLE_AMPER) ) {
+                            int LA47_3 = input.LA(2);
 
                             if ( (synpred4()) ) {
-                                alt43=1;
+                                alt47=1;
                             }
 
 
                         }
 
 
-                        switch (alt43) {
+                        switch (alt47) {
                     	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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:5: ( and_key | DOUBLE_AMPER )=> (value= and_key | amper= DOUBLE_AMPER ) lhs_unary
                     	    {
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:495:30: (value= and_key | amper= DOUBLE_AMPER )
-                    	    int alt42=2;
-                    	    int LA42_0 = input.LA(1);
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:30: (value= and_key | amper= DOUBLE_AMPER )
+                    	    int alt46=2;
+                    	    int LA46_0 = input.LA(1);
 
-                    	    if ( (LA42_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.AND)))) {
-                    	        alt42=1;
+                    	    if ( (LA46_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.AND)))) {
+                    	        alt46=1;
                     	    }
-                    	    else if ( (LA42_0==DOUBLE_AMPER) ) {
-                    	        alt42=2;
+                    	    else if ( (LA46_0==DOUBLE_AMPER) ) {
+                    	        alt46=2;
                     	    }
                     	    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("530:30: (value= and_key | amper= DOUBLE_AMPER )", 46, 0, input);
 
                     	        throw nvae;
                     	    }
-                    	    switch (alt42) {
+                    	    switch (alt46) {
                     	        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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:31: value= and_key
                     	            {
-                    	            pushFollow(FOLLOW_and_key_in_lhs_and1798);
+                    	            pushFollow(FOLLOW_and_key_in_lhs_and1993);
                     	            value=and_key();
                     	            _fsp--;
                     	            if (failed) return retval;
@@ -5276,10 +6010,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:73: amper= DOUBLE_AMPER
                     	            {
                     	            amper=(Token)input.LT(1);
-                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and1805); if (failed) return retval;
+                    	            match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_lhs_and2000); if (failed) return retval;
                     	            if ( backtracking==0 ) stream_DOUBLE_AMPER.add(amper);
 
                     	            if ( backtracking==0 ) {
@@ -5291,14 +6025,14 @@
 
                     	    }
 
-                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and1810);
-                    	    lhs_unary114=lhs_unary();
+                    	    pushFollow(FOLLOW_lhs_unary_in_lhs_and2005);
+                    	    lhs_unary130=lhs_unary();
                     	    _fsp--;
                     	    if (failed) return retval;
-                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary114.getTree());
+                    	    if ( backtracking==0 ) stream_lhs_unary.add(lhs_unary130.getTree());
 
                     	    // AST REWRITE
-                    	    // elements: lhs_unary, lhs_and
+                    	    // elements: lhs_and, lhs_unary
                     	    // token labels: 
                     	    // rule labels: retval
                     	    // token list labels: 
@@ -5308,9 +6042,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 )
+                    	    // 531: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:531: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);
@@ -5329,7 +6063,7 @@
                     	    break;
 
                     	default :
-                    	    break loop43;
+                    	    break loop47;
                         }
                     } while (true);
 
@@ -5361,174 +6095,174 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:534:1: lhs_unary options {backtrack=true; } : ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? ;
     public final lhs_unary_return lhs_unary() throws RecognitionException {
         lhs_unary_return retval = new lhs_unary_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN119=null;
-        Token RIGHT_PAREN121=null;
-        Token SEMICOLON123=null;
-        lhs_exist_return lhs_exist115 = null;
+        Token LEFT_PAREN135=null;
+        Token RIGHT_PAREN137=null;
+        Token SEMICOLON139=null;
+        lhs_exist_return lhs_exist131 = null;
 
-        lhs_not_return lhs_not116 = null;
+        lhs_not_return lhs_not132 = null;
 
-        lhs_eval_return lhs_eval117 = null;
+        lhs_eval_return lhs_eval133 = null;
 
-        lhs_forall_return lhs_forall118 = null;
+        lhs_forall_return lhs_forall134 = null;
 
-        lhs_or_return lhs_or120 = null;
+        lhs_or_return lhs_or136 = null;
 
-        pattern_source_return pattern_source122 = null;
+        pattern_source_return pattern_source138 = null;
 
 
-        Object LEFT_PAREN119_tree=null;
-        Object RIGHT_PAREN121_tree=null;
-        Object SEMICOLON123_tree=null;
+        Object LEFT_PAREN135_tree=null;
+        Object RIGHT_PAREN137_tree=null;
+        Object SEMICOLON139_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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:2: ( ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source ) ( ( SEMICOLON )=> SEMICOLON )?
             {
             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 )
-            int alt45=6;
-            int LA45_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )
+            int alt49=6;
+            int LA49_0 = input.LA(1);
 
-            if ( (LA45_0==ID) ) {
-                int LA45_1 = input.LA(2);
+            if ( (LA49_0==ID) ) {
+                int LA49_1 = input.LA(2);
 
                 if ( ((validateIdentifierKey(DroolsSoftKeywords.EXISTS))) ) {
-                    alt45=1;
+                    alt49=1;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
-                    alt45=2;
+                    alt49=2;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.EVAL))) ) {
-                    alt45=3;
+                    alt49=3;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.FORALL))) ) {
-                    alt45=4;
+                    alt49=4;
                 }
                 else if ( (true) ) {
-                    alt45=6;
+                    alt49=6;
                 }
                 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("536:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 49, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA45_0==LEFT_PAREN) ) {
-                alt45=5;
+            else if ( (LA49_0==LEFT_PAREN) ) {
+                alt49=5;
             }
             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("536:4: ( lhs_exist | lhs_not | lhs_eval | lhs_forall | LEFT_PAREN lhs_or RIGHT_PAREN | pattern_source )", 49, 0, input);
 
                 throw nvae;
             }
-            switch (alt45) {
+            switch (alt49) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:536:6: lhs_exist
                     {
-                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary1848);
-                    lhs_exist115=lhs_exist();
+                    pushFollow(FOLLOW_lhs_exist_in_lhs_unary2043);
+                    lhs_exist131=lhs_exist();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_exist115.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_exist131.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:537:5: lhs_not
                     {
-                    pushFollow(FOLLOW_lhs_not_in_lhs_unary1854);
-                    lhs_not116=lhs_not();
+                    pushFollow(FOLLOW_lhs_not_in_lhs_unary2049);
+                    lhs_not132=lhs_not();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not116.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_not132.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:538:5: lhs_eval
                     {
-                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary1860);
-                    lhs_eval117=lhs_eval();
+                    pushFollow(FOLLOW_lhs_eval_in_lhs_unary2055);
+                    lhs_eval133=lhs_eval();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_eval117.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_eval133.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:539:5: lhs_forall
                     {
-                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary1866);
-                    lhs_forall118=lhs_forall();
+                    pushFollow(FOLLOW_lhs_forall_in_lhs_unary2061);
+                    lhs_forall134=lhs_forall();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_forall118.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_forall134.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:540:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN119=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary1872); if (failed) return retval;
-                    pushFollow(FOLLOW_lhs_or_in_lhs_unary1875);
-                    lhs_or120=lhs_or();
+                    LEFT_PAREN135=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_unary2067); if (failed) return retval;
+                    pushFollow(FOLLOW_lhs_or_in_lhs_unary2070);
+                    lhs_or136=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or120.getTree());
-                    RIGHT_PAREN121=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary1877); if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, lhs_or136.getTree());
+                    RIGHT_PAREN137=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_unary2072); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    RIGHT_PAREN121_tree = (Object)adaptor.create(RIGHT_PAREN121);
-                    adaptor.addChild(root_0, RIGHT_PAREN121_tree);
+                    RIGHT_PAREN137_tree = (Object)adaptor.create(RIGHT_PAREN137);
+                    adaptor.addChild(root_0, RIGHT_PAREN137_tree);
                     }
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:541:5: pattern_source
                     {
-                    pushFollow(FOLLOW_pattern_source_in_lhs_unary1883);
-                    pattern_source122=pattern_source();
+                    pushFollow(FOLLOW_pattern_source_in_lhs_unary2078);
+                    pattern_source138=pattern_source();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, pattern_source122.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, pattern_source138.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:508:3: ( ( SEMICOLON )=> SEMICOLON )?
-            int alt46=2;
-            int LA46_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:3: ( ( SEMICOLON )=> SEMICOLON )?
+            int alt50=2;
+            int LA50_0 = input.LA(1);
 
-            if ( (LA46_0==SEMICOLON) ) {
-                int LA46_1 = input.LA(2);
+            if ( (LA50_0==SEMICOLON) ) {
+                int LA50_1 = input.LA(2);
 
                 if ( (synpred5()) ) {
-                    alt46=1;
+                    alt50=1;
                 }
             }
-            switch (alt46) {
+            switch (alt50) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:4: ( SEMICOLON )=> SEMICOLON
                     {
-                    SEMICOLON123=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary1897); if (failed) return retval;
+                    SEMICOLON139=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_lhs_unary2092); if (failed) return retval;
 
                     }
                     break;
@@ -5561,82 +6295,82 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:546:1: lhs_exist : exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
     public final lhs_exist_return lhs_exist() throws RecognitionException {
         lhs_exist_return retval = new lhs_exist_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN126=null;
-        Token RIGHT_PAREN128=null;
-        exists_key_return exists_key124 = null;
+        Token LEFT_PAREN142=null;
+        Token RIGHT_PAREN144=null;
+        exists_key_return exists_key140 = null;
 
-        lhs_or_return lhs_or125 = null;
+        lhs_or_return lhs_or141 = null;
 
-        lhs_or_return lhs_or127 = null;
+        lhs_or_return lhs_or143 = null;
 
-        lhs_pattern_return lhs_pattern129 = null;
+        lhs_pattern_return lhs_pattern145 = null;
 
 
-        Object LEFT_PAREN126_tree=null;
-        Object RIGHT_PAREN128_tree=null;
+        Object LEFT_PAREN142_tree=null;
+        Object RIGHT_PAREN144_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         RewriteRuleSubtreeStream stream_exists_key=new RewriteRuleSubtreeStream(adaptor,"rule exists_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:547:2: ( exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( exists_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:547:4: exists_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             {
-            pushFollow(FOLLOW_exists_key_in_lhs_exist1911);
-            exists_key124=exists_key();
+            pushFollow(FOLLOW_exists_key_in_lhs_exist2106);
+            exists_key140=exists_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_exists_key.add(exists_key124.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 )
-            int alt47=3;
-            alt47 = dfa47.predict(input);
-            switch (alt47) {
+            if ( backtracking==0 ) stream_exists_key.add(exists_key140.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            int alt51=3;
+            alt51 = dfa51.predict(input);
+            switch (alt51) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:12: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1935);
-                    lhs_or125=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2130);
+                    lhs_or141=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or125.getTree());
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or141.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:549:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN126=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist1942); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN126);
+                    LEFT_PAREN142=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_exist2137); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN142);
 
-                    pushFollow(FOLLOW_lhs_or_in_lhs_exist1944);
-                    lhs_or127=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_exist2139);
+                    lhs_or143=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or127.getTree());
-                    RIGHT_PAREN128=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist1946); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN128);
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or143.getTree());
+                    RIGHT_PAREN144=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_exist2141); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN144);
 
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:550:12: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist1959);
-                    lhs_pattern129=lhs_pattern();
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_exist2154);
+                    lhs_pattern145=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern129.getTree());
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern145.getTree());
 
                     }
                     break;
@@ -5645,7 +6379,7 @@
 
 
             // AST REWRITE
-            // elements: RIGHT_PAREN, lhs_pattern, lhs_or, exists_key
+            // elements: lhs_or, RIGHT_PAREN, exists_key, lhs_pattern
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -5655,26 +6389,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 )? )
+            // 552: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:552:47: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -5713,82 +6447,82 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:1: lhs_not : not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) ;
     public final lhs_not_return lhs_not() throws RecognitionException {
         lhs_not_return retval = new lhs_not_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN132=null;
-        Token RIGHT_PAREN134=null;
-        not_key_return not_key130 = null;
+        Token LEFT_PAREN148=null;
+        Token RIGHT_PAREN150=null;
+        not_key_return not_key146 = null;
 
-        lhs_or_return lhs_or131 = null;
+        lhs_or_return lhs_or147 = null;
 
-        lhs_or_return lhs_or133 = null;
+        lhs_or_return lhs_or149 = null;
 
-        lhs_pattern_return lhs_pattern135 = null;
+        lhs_pattern_return lhs_pattern151 = null;
 
 
-        Object LEFT_PAREN132_tree=null;
-        Object RIGHT_PAREN134_tree=null;
+        Object LEFT_PAREN148_tree=null;
+        Object RIGHT_PAREN150_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_lhs_or=new RewriteRuleSubtreeStream(adaptor,"rule lhs_or");
         RewriteRuleSubtreeStream stream_not_key=new RewriteRuleSubtreeStream(adaptor,"rule not_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:9: ( not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern ) -> ^( not_key ( lhs_or )? ( lhs_pattern )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:11: not_key ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
             {
-            pushFollow(FOLLOW_not_key_in_lhs_not2005);
-            not_key130=not_key();
+            pushFollow(FOLLOW_not_key_in_lhs_not2200);
+            not_key146=not_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_not_key.add(not_key130.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 )
-            int alt48=3;
-            alt48 = dfa48.predict(input);
-            switch (alt48) {
+            if ( backtracking==0 ) stream_not_key.add(not_key146.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )
+            int alt52=3;
+            alt52 = dfa52.predict(input);
+            switch (alt52) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:5: ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or
                     {
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not2022);
-                    lhs_or131=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not2217);
+                    lhs_or147=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or131.getTree());
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or147.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:557:5: LEFT_PAREN lhs_or RIGHT_PAREN
                     {
-                    LEFT_PAREN132=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not2029); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN132);
+                    LEFT_PAREN148=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_not2224); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN148);
 
-                    pushFollow(FOLLOW_lhs_or_in_lhs_not2031);
-                    lhs_or133=lhs_or();
+                    pushFollow(FOLLOW_lhs_or_in_lhs_not2226);
+                    lhs_or149=lhs_or();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or133.getTree());
-                    RIGHT_PAREN134=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not2033); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN134);
+                    if ( backtracking==0 ) stream_lhs_or.add(lhs_or149.getTree());
+                    RIGHT_PAREN150=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_not2228); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN150);
 
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:558:6: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not2041);
-                    lhs_pattern135=lhs_pattern();
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs_not2236);
+                    lhs_pattern151=lhs_pattern();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern135.getTree());
+                    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern151.getTree());
 
                     }
                     break;
@@ -5797,7 +6531,7 @@
 
 
             // AST REWRITE
-            // elements: lhs_or, RIGHT_PAREN, not_key, lhs_pattern
+            // elements: RIGHT_PAREN, lhs_pattern, not_key, lhs_or
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -5807,26 +6541,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 )? )
+            // 559: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:559:44: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -5865,7 +6599,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:562:1: lhs_eval : ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) ;
     public final lhs_eval_return lhs_eval() throws RecognitionException {
         lhs_eval_return retval = new lhs_eval_return();
         retval.start = input.LT(1);
@@ -5880,15 +6614,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563:2: (ev= eval_key pc= paren_chunk -> ^( eval_key paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:563:4: ev= eval_key pc= paren_chunk
             {
-            pushFollow(FOLLOW_eval_key_in_lhs_eval2080);
+            pushFollow(FOLLOW_eval_key_in_lhs_eval2275);
             ev=eval_key();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_eval_key.add(ev.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_lhs_eval2084);
+            pushFollow(FOLLOW_paren_chunk_in_lhs_eval2279);
             pc=paren_chunk();
             _fsp--;
             if (failed) return retval;
@@ -5909,9 +6643,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 )
+            // 566: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:6: ^( eval_key paren_chunk )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_eval_key.nextNode(), root_1);
@@ -5950,81 +6684,81 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:569:1: lhs_forall : forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) ;
     public final lhs_forall_return lhs_forall() throws RecognitionException {
         lhs_forall_return retval = new lhs_forall_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN137=null;
-        Token RIGHT_PAREN139=null;
-        forall_key_return forall_key136 = null;
+        Token LEFT_PAREN153=null;
+        Token RIGHT_PAREN155=null;
+        forall_key_return forall_key152 = null;
 
-        lhs_pattern_return lhs_pattern138 = null;
+        lhs_pattern_return lhs_pattern154 = null;
 
 
-        Object LEFT_PAREN137_tree=null;
-        Object RIGHT_PAREN139_tree=null;
+        Object LEFT_PAREN153_tree=null;
+        Object RIGHT_PAREN155_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_forall_key=new RewriteRuleSubtreeStream(adaptor,"rule forall_key");
         RewriteRuleSubtreeStream stream_lhs_pattern=new RewriteRuleSubtreeStream(adaptor,"rule lhs_pattern");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:2: ( forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN -> ^( forall_key ( lhs_pattern )+ RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:4: forall_key LEFT_PAREN ( lhs_pattern )+ RIGHT_PAREN
             {
-            pushFollow(FOLLOW_forall_key_in_lhs_forall2108);
-            forall_key136=forall_key();
+            pushFollow(FOLLOW_forall_key_in_lhs_forall2303);
+            forall_key152=forall_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_forall_key.add(forall_key136.getTree());
-            LEFT_PAREN137=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2110); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN137);
+            if ( backtracking==0 ) stream_forall_key.add(forall_key152.getTree());
+            LEFT_PAREN153=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_lhs_forall2305); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN153);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:535:26: ( lhs_pattern )+
-            int cnt49=0;
-            loop49:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:26: ( lhs_pattern )+
+            int cnt53=0;
+            loop53:
             do {
-                int alt49=2;
-                int LA49_0 = input.LA(1);
+                int alt53=2;
+                int LA53_0 = input.LA(1);
 
-                if ( (LA49_0==ID) ) {
-                    alt49=1;
+                if ( (LA53_0==ID) ) {
+                    alt53=1;
                 }
 
 
-                switch (alt49) {
+                switch (alt53) {
             	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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:570:26: lhs_pattern
             	    {
-            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2112);
-            	    lhs_pattern138=lhs_pattern();
+            	    pushFollow(FOLLOW_lhs_pattern_in_lhs_forall2307);
+            	    lhs_pattern154=lhs_pattern();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern138.getTree());
+            	    if ( backtracking==0 ) stream_lhs_pattern.add(lhs_pattern154.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    if ( cnt49 >= 1 ) break loop49;
+            	    if ( cnt53 >= 1 ) break loop53;
             	    if (backtracking>0) {failed=true; return retval;}
                         EarlyExitException eee =
-                            new EarlyExitException(49, input);
+                            new EarlyExitException(53, input);
                         throw eee;
                 }
-                cnt49++;
+                cnt53++;
             } while (true);
 
-            RIGHT_PAREN139=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall2115); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN139);
+            RIGHT_PAREN155=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_lhs_forall2310); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN155);
 
 
             // AST REWRITE
-            // elements: forall_key, lhs_pattern, RIGHT_PAREN
+            // elements: forall_key, RIGHT_PAREN, lhs_pattern
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6034,9 +6768,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 )
+            // 571: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:571:6: ^( forall_key ( lhs_pattern )+ RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_forall_key.nextNode(), root_1);
@@ -6083,152 +6817,176 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:574:1: pattern_source options {backtrack=true; } : lhs_pattern ( over_clause )? ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? ;
     public final pattern_source_return pattern_source() throws RecognitionException {
         pattern_source_return retval = new pattern_source_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        lhs_pattern_return lhs_pattern140 = null;
+        lhs_pattern_return lhs_pattern156 = null;
 
-        from_key_return from_key141 = null;
+        over_clause_return over_clause157 = null;
 
-        accumulate_statement_return accumulate_statement142 = null;
+        from_key_return from_key158 = null;
 
-        collect_statement_return collect_statement143 = null;
+        accumulate_statement_return accumulate_statement159 = null;
 
-        entrypoint_statement_return entrypoint_statement144 = null;
+        collect_statement_return collect_statement160 = null;
 
-        from_source_return from_source145 = null;
+        entrypoint_statement_return entrypoint_statement161 = null;
 
+        from_source_return from_source162 = null;
 
 
+
         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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:2: ( lhs_pattern ( over_clause )? ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:576:4: lhs_pattern ( over_clause )? ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2147);
-            lhs_pattern140=lhs_pattern();
+            pushFollow(FOLLOW_lhs_pattern_in_pattern_source2342);
+            lhs_pattern156=lhs_pattern();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern140.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 ) )?
-            int alt51=2;
-            int LA51_0 = input.LA(1);
+            if ( backtracking==0 ) adaptor.addChild(root_0, lhs_pattern156.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:3: ( over_clause )?
+            int alt54=2;
+            int LA54_0 = input.LA(1);
 
-            if ( (LA51_0==ID) ) {
-                int LA51_1 = input.LA(2);
+            if ( (LA54_0==OVER) ) {
+                alt54=1;
+            }
+            switch (alt54) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:577:3: over_clause
+                    {
+                    pushFollow(FOLLOW_over_clause_in_pattern_source2346);
+                    over_clause157=over_clause();
+                    _fsp--;
+                    if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, over_clause157.getTree());
 
-                if ( (LA51_1==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                    int LA51_3 = input.LA(3);
+                    }
+                    break;
 
-                    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(DroolsSoftKeywords.FROM)))) {
-                        alt51=1;
+            }
+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:578:3: ( from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source ) )?
+            int alt56=2;
+            int LA56_0 = input.LA(1);
+
+            if ( (LA56_0==ID) ) {
+                int LA56_1 = input.LA(2);
+
+                if ( (LA56_1==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                    int LA56_3 = input.LA(3);
+
+                    if ( (LA56_3==SEMICOLON||LA56_3==END||(LA56_3>=COMMA && LA56_3<=RIGHT_PAREN)||(LA56_3>=DOUBLE_PIPE && LA56_3<=DOUBLE_AMPER)||LA56_3==THEN||LA56_3==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
+                        alt56=1;
                     }
-                    else if ( (LA51_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
-                        int LA51_6 = input.LA(4);
+                    else if ( (LA56_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                        int LA56_6 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                            alt51=1;
+                            alt56=1;
                         }
                     }
-                    else if ( (LA51_3==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                        int LA51_7 = input.LA(4);
+                    else if ( (LA56_3==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                        int LA56_7 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                            alt51=1;
+                            alt56=1;
                         }
                     }
-                    else if ( (LA51_3==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
-                        int LA51_8 = input.LA(4);
+                    else if ( (LA56_3==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                        int LA56_8 = input.LA(4);
 
-                        if ( (LA51_8==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                            int LA51_10 = input.LA(5);
+                        if ( (LA56_8==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
+                            int LA56_10 = input.LA(5);
 
-                            if ( (LA51_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                                int LA51_11 = input.LA(6);
+                            if ( (LA56_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                                int LA56_11 = input.LA(6);
 
-                                if ( (LA51_11==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                                    int LA51_14 = input.LA(7);
+                                if ( (LA56_11==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
+                                    int LA56_14 = input.LA(7);
 
-                                    if ( (LA51_14==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
-                                        int LA51_16 = input.LA(8);
+                                    if ( (LA56_14==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                                        int LA56_16 = input.LA(8);
 
                                         if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                                            alt51=1;
+                                            alt56=1;
                                         }
                                     }
-                                    else if ( ((LA51_14>=SEMICOLON && LA51_14<=DOT)||LA51_14==END||(LA51_14>=COMMA && LA51_14<=RIGHT_PAREN)||(LA51_14>=DOUBLE_PIPE && LA51_14<=DOUBLE_AMPER)||LA51_14==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
-                                        alt51=1;
+                                    else if ( ((LA56_14>=SEMICOLON && LA56_14<=DOT)||LA56_14==END||(LA56_14>=COMMA && LA56_14<=RIGHT_PAREN)||(LA56_14>=DOUBLE_PIPE && LA56_14<=DOUBLE_AMPER)||LA56_14==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
+                                        alt56=1;
                                     }
                                 }
-                                else if ( ((LA51_11>=VT_COMPILATION_UNIT && LA51_11<=LEFT_SQUARE)||(LA51_11>=THEN && LA51_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
-                                    alt51=1;
+                                else if ( ((LA56_11>=VT_COMPILATION_UNIT && LA56_11<=LEFT_SQUARE)||(LA56_11>=THEN && LA56_11<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
+                                    alt56=1;
                                 }
                             }
-                            else if ( (LA51_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
-                                int LA51_12 = input.LA(6);
+                            else if ( (LA56_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
+                                int LA56_12 = input.LA(6);
 
                                 if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                                    alt51=1;
+                                    alt56=1;
                                 }
                             }
-                            else if ( (LA51_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.OR))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))))) {
-                                int LA51_13 = input.LA(6);
+                            else if ( (LA56_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                                int LA56_13 = input.LA(6);
 
-                                if ( (LA51_13==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-                                    int LA51_15 = input.LA(7);
+                                if ( (LA56_13==ID) && (((validateIdentifierKey(DroolsSoftKeywords.NOT))||(validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.FROM))||(validateIdentifierKey(DroolsSoftKeywords.EXISTS))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+                                    int LA56_15 = input.LA(7);
 
                                     if ( ((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
-                                        alt51=1;
+                                        alt56=1;
                                     }
                                 }
                             }
-                            else if ( ((LA51_10>=SEMICOLON && LA51_10<=ID)||LA51_10==END||(LA51_10>=COMMA && LA51_10<=RIGHT_PAREN)||(LA51_10>=DOUBLE_PIPE && LA51_10<=DOUBLE_AMPER)||LA51_10==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
-                                alt51=1;
+                            else if ( ((LA56_10>=SEMICOLON && LA56_10<=ID)||LA56_10==END||(LA56_10>=COMMA && LA56_10<=RIGHT_PAREN)||(LA56_10>=DOUBLE_PIPE && LA56_10<=DOUBLE_AMPER)||LA56_10==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.FROM)))) {
+                                alt56=1;
                             }
                         }
                     }
                 }
             }
-            switch (alt51) {
+            switch (alt56) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:579:4: from_key ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
                     {
-                    pushFollow(FOLLOW_from_key_in_pattern_source2156);
-                    from_key141=from_key();
+                    pushFollow(FOLLOW_from_key_in_pattern_source2356);
+                    from_key158=from_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key141.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 )
-                    int alt50=4;
-                    int LA50_0 = input.LA(1);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(from_key158.getTree(), root_0);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )
+                    int alt55=4;
+                    int LA55_0 = input.LA(1);
 
-                    if ( (LA50_0==ID) ) {
-                        int LA50_1 = input.LA(2);
+                    if ( (LA55_0==ID) ) {
+                        int LA55_1 = input.LA(2);
 
-                        if ( (LA50_1==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.ENTRY) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.POINT)))) {
-                            alt50=3;
+                        if ( (LA55_1==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.ENTRY) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.POINT)))) {
+                            alt55=3;
                         }
-                        else if ( (LA50_1==LEFT_PAREN) ) {
+                        else if ( (LA55_1==LEFT_PAREN) ) {
                             switch ( input.LA(3) ) {
                             case LEFT_PAREN:
                                 {
-                                int LA50_5 = input.LA(4);
+                                int LA55_5 = input.LA(4);
 
                                 if ( ((validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE))) ) {
-                                    alt50=1;
+                                    alt55=1;
                                 }
                                 else if ( (true) ) {
-                                    alt50=4;
+                                    alt55=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("580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 5, input);
 
                                     throw nvae;
                                 }
@@ -6236,21 +6994,21 @@
                                 break;
                             case ID:
                                 {
-                                int LA50_6 = input.LA(4);
+                                int LA55_6 = input.LA(4);
 
                                 if ( ((validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE))) ) {
-                                    alt50=1;
+                                    alt55=1;
                                 }
                                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.COLLECT))) ) {
-                                    alt50=2;
+                                    alt55=2;
                                 }
                                 else if ( (true) ) {
-                                    alt50=4;
+                                    alt55=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("580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 6, input);
 
                                     throw nvae;
                                 }
@@ -6263,6 +7021,7 @@
                             case VT_LABEL:
                             case VT_QUERY_ID:
                             case VT_TEMPLATE_ID:
+                            case VT_TYPE_DECLARE_ID:
                             case VT_RULE_ID:
                             case VT_ENTRYPOINT_ID:
                             case VT_SLOT_ID:
@@ -6272,6 +7031,7 @@
                             case VT_CURLY_CHUNK:
                             case VT_SQUARE_CHUNK:
                             case VT_PAREN_CHUNK:
+                            case VT_BEHAVIOR:
                             case VT_AND_IMPLICIT:
                             case VT_AND_PREFIX:
                             case VT_OR_PREFIX:
@@ -6344,11 +7104,14 @@
                             case STRING:
                             case COMMA:
                             case RIGHT_PAREN:
+                            case AT:
                             case COLON:
+                            case EQUALS:
                             case BOOL:
                             case INT:
                             case DOUBLE_PIPE:
                             case DOUBLE_AMPER:
+                            case OVER:
                             case ARROW:
                             case EQUAL:
                             case GREATER:
@@ -6375,25 +7138,25 @@
                             case C_STYLE_SINGLE_LINE_COMMENT:
                             case MULTI_LINE_COMMENT:
                                 {
-                                alt50=4;
+                                alt55=4;
                                 }
                                 break;
                             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("580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 3, input);
 
                                 throw nvae;
                             }
 
                         }
-                        else if ( ((LA50_1>=SEMICOLON && LA50_1<=DOT)||LA50_1==END||(LA50_1>=COMMA && LA50_1<=RIGHT_PAREN)||(LA50_1>=DOUBLE_PIPE && LA50_1<=DOUBLE_AMPER)||LA50_1==THEN) ) {
-                            alt50=4;
+                        else if ( ((LA55_1>=SEMICOLON && LA55_1<=DOT)||LA55_1==END||(LA55_1>=COMMA && LA55_1<=RIGHT_PAREN)||(LA55_1>=DOUBLE_PIPE && LA55_1<=DOUBLE_AMPER)||LA55_1==THEN) ) {
+                            alt55=4;
                         }
                         else {
                             if (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("580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 1, input);
 
                             throw nvae;
                         }
@@ -6401,52 +7164,52 @@
                     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("580:11: ( accumulate_statement | collect_statement | entrypoint_statement | from_source )", 55, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt50) {
+                    switch (alt55) {
                         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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:580:14: accumulate_statement
                             {
-                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2172);
-                            accumulate_statement142=accumulate_statement();
+                            pushFollow(FOLLOW_accumulate_statement_in_pattern_source2372);
+                            accumulate_statement159=accumulate_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, accumulate_statement142.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, accumulate_statement159.getTree());
 
                             }
                             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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:581:15: collect_statement
                             {
-                            pushFollow(FOLLOW_collect_statement_in_pattern_source2188);
-                            collect_statement143=collect_statement();
+                            pushFollow(FOLLOW_collect_statement_in_pattern_source2388);
+                            collect_statement160=collect_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, collect_statement143.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, collect_statement160.getTree());
 
                             }
                             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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:582:15: entrypoint_statement
                             {
-                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2205);
-                            entrypoint_statement144=entrypoint_statement();
+                            pushFollow(FOLLOW_entrypoint_statement_in_pattern_source2405);
+                            entrypoint_statement161=entrypoint_statement();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, entrypoint_statement144.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, entrypoint_statement161.getTree());
 
                             }
                             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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:583:15: from_source
                             {
-                            pushFollow(FOLLOW_from_source_in_pattern_source2221);
-                            from_source145=from_source();
+                            pushFollow(FOLLOW_from_source_in_pattern_source2421);
+                            from_source162=from_source();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, from_source145.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, from_source162.getTree());
 
                             }
                             break;
@@ -6479,34 +7242,232 @@
     }
     // $ANTLR end pattern_source
 
+    public static class over_clause_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start over_clause
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:588:1: over_clause : OVER over_elements ( COMMA over_elements )* ;
+    public final over_clause_return over_clause() throws RecognitionException {
+        over_clause_return retval = new over_clause_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token OVER163=null;
+        Token COMMA165=null;
+        over_elements_return over_elements164 = null;
+
+        over_elements_return over_elements166 = null;
+
+
+        Object OVER163_tree=null;
+        Object COMMA165_tree=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:2: ( OVER over_elements ( COMMA over_elements )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:4: OVER over_elements ( COMMA over_elements )*
+            {
+            root_0 = (Object)adaptor.nil();
+
+            OVER163=(Token)input.LT(1);
+            match(input,OVER,FOLLOW_OVER_in_over_clause2449); if (failed) return retval;
+            if ( backtracking==0 ) {
+            OVER163_tree = (Object)adaptor.create(OVER163);
+            root_0 = (Object)adaptor.becomeRoot(OVER163_tree, root_0);
+            }
+            pushFollow(FOLLOW_over_elements_in_over_clause2452);
+            over_elements164=over_elements();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) adaptor.addChild(root_0, over_elements164.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:24: ( COMMA over_elements )*
+            loop57:
+            do {
+                int alt57=2;
+                int LA57_0 = input.LA(1);
+
+                if ( (LA57_0==COMMA) ) {
+                    int LA57_2 = input.LA(2);
+
+                    if ( (LA57_2==ID) ) {
+                        int LA57_3 = input.LA(3);
+
+                        if ( (LA57_3==COLON) ) {
+                            alt57=1;
+                        }
+
+
+                    }
+
+
+                }
+
+
+                switch (alt57) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:589:25: COMMA over_elements
+            	    {
+            	    COMMA165=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_over_clause2455); if (failed) return retval;
+            	    pushFollow(FOLLOW_over_elements_in_over_clause2458);
+            	    over_elements166=over_elements();
+            	    _fsp--;
+            	    if (failed) return retval;
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, over_elements166.getTree());
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop57;
+                }
+            } while (true);
+
+
+            }
+
+            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 over_clause
+
+    public static class over_elements_return extends ParserRuleReturnScope {
+        Object tree;
+        public Object getTree() { return tree; }
+    };
+
+    // $ANTLR start over_elements
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:592:1: over_elements : ID COLON ID paren_chunk -> ^( VT_BEHAVIOR ID ID paren_chunk ) ;
+    public final over_elements_return over_elements() throws RecognitionException {
+        over_elements_return retval = new over_elements_return();
+        retval.start = input.LT(1);
+
+        Object root_0 = null;
+
+        Token ID167=null;
+        Token COLON168=null;
+        Token ID169=null;
+        paren_chunk_return paren_chunk170 = null;
+
+
+        Object ID167_tree=null;
+        Object COLON168_tree=null;
+        Object ID169_tree=null;
+        RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
+        RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
+        RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:2: ( ID COLON ID paren_chunk -> ^( VT_BEHAVIOR ID ID paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:593:4: ID COLON ID paren_chunk
+            {
+            ID167=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_over_elements2471); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID167);
+
+            COLON168=(Token)input.LT(1);
+            match(input,COLON,FOLLOW_COLON_in_over_elements2473); if (failed) return retval;
+            if ( backtracking==0 ) stream_COLON.add(COLON168);
+
+            ID169=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_over_elements2475); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID169);
+
+            pushFollow(FOLLOW_paren_chunk_in_over_elements2477);
+            paren_chunk170=paren_chunk();
+            _fsp--;
+            if (failed) return retval;
+            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk170.getTree());
+
+            // AST REWRITE
+            // elements: ID, paren_chunk, 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();
+            // 594:2: -> ^( VT_BEHAVIOR ID ID paren_chunk )
+            {
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:5: ^( VT_BEHAVIOR ID ID paren_chunk )
+                {
+                Object root_1 = (Object)adaptor.nil();
+                root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_BEHAVIOR, "VT_BEHAVIOR"), root_1);
+
+                adaptor.addChild(root_1, stream_ID.next());
+                adaptor.addChild(root_1, stream_ID.next());
+                adaptor.addChild(root_1, stream_paren_chunk.next());
+
+                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 over_elements
+
     public static class accumulate_statement_return extends ParserRuleReturnScope {
         Object tree;
         public Object getTree() { return tree; }
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:597:1: accumulate_statement : accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) ;
     public final accumulate_statement_return accumulate_statement() throws RecognitionException {
         accumulate_statement_return retval = new accumulate_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN147=null;
-        Token COMMA149=null;
-        Token RIGHT_PAREN152=null;
-        accumulate_key_return accumulate_key146 = null;
+        Token LEFT_PAREN172=null;
+        Token COMMA174=null;
+        Token RIGHT_PAREN177=null;
+        accumulate_key_return accumulate_key171 = null;
 
-        lhs_or_return lhs_or148 = null;
+        lhs_or_return lhs_or173 = null;
 
-        accumulate_init_clause_return accumulate_init_clause150 = null;
+        accumulate_init_clause_return accumulate_init_clause175 = null;
 
-        accumulate_id_clause_return accumulate_id_clause151 = null;
+        accumulate_id_clause_return accumulate_id_clause176 = null;
 
 
-        Object LEFT_PAREN147_tree=null;
-        Object COMMA149_tree=null;
-        Object RIGHT_PAREN152_tree=null;
+        Object LEFT_PAREN172_tree=null;
+        Object COMMA174_tree=null;
+        Object RIGHT_PAREN177_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
@@ -6515,37 +7476,37 @@
         RewriteRuleSubtreeStream stream_accumulate_id_clause=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_id_clause");
         RewriteRuleSubtreeStream stream_accumulate_key=new RewriteRuleSubtreeStream(adaptor,"rule accumulate_key");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:598:2: ( accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN -> ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:598:4: accumulate_key LEFT_PAREN lhs_or ( COMMA )? ( accumulate_init_clause | accumulate_id_clause ) RIGHT_PAREN
             {
-            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2249);
-            accumulate_key146=accumulate_key();
+            pushFollow(FOLLOW_accumulate_key_in_accumulate_statement2501);
+            accumulate_key171=accumulate_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key146.getTree());
-            LEFT_PAREN147=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2253); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN147);
+            if ( backtracking==0 ) stream_accumulate_key.add(accumulate_key171.getTree());
+            LEFT_PAREN172=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_accumulate_statement2505); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN172);
 
-            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2255);
-            lhs_or148=lhs_or();
+            pushFollow(FOLLOW_lhs_or_in_accumulate_statement2507);
+            lhs_or173=lhs_or();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_lhs_or.add(lhs_or148.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:554:21: ( COMMA )?
-            int alt52=2;
-            int LA52_0 = input.LA(1);
+            if ( backtracking==0 ) stream_lhs_or.add(lhs_or173.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:599:21: ( COMMA )?
+            int alt58=2;
+            int LA58_0 = input.LA(1);
 
-            if ( (LA52_0==COMMA) ) {
-                alt52=1;
+            if ( (LA58_0==COMMA) ) {
+                alt58=1;
             }
-            switch (alt52) {
+            switch (alt58) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:599:21: COMMA
                     {
-                    COMMA149=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2257); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA149);
+                    COMMA174=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_statement2509); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA174);
 
 
                     }
@@ -6553,42 +7514,42 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:555:3: ( accumulate_init_clause | accumulate_id_clause )
-            int alt53=2;
-            alt53 = dfa53.predict(input);
-            switch (alt53) {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600:3: ( accumulate_init_clause | accumulate_id_clause )
+            int alt59=2;
+            alt59 = dfa59.predict(input);
+            switch (alt59) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:600:5: accumulate_init_clause
                     {
-                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2265);
-                    accumulate_init_clause150=accumulate_init_clause();
+                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_statement2517);
+                    accumulate_init_clause175=accumulate_init_clause();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accumulate_init_clause.add(accumulate_init_clause150.getTree());
+                    if ( backtracking==0 ) stream_accumulate_init_clause.add(accumulate_init_clause175.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:601:5: accumulate_id_clause
                     {
-                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2271);
-                    accumulate_id_clause151=accumulate_id_clause();
+                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_statement2523);
+                    accumulate_id_clause176=accumulate_id_clause();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accumulate_id_clause.add(accumulate_id_clause151.getTree());
+                    if ( backtracking==0 ) stream_accumulate_id_clause.add(accumulate_id_clause176.getTree());
 
                     }
                     break;
 
             }
 
-            RIGHT_PAREN152=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2279); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN152);
+            RIGHT_PAREN177=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_accumulate_statement2531); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN177);
 
 
             // AST REWRITE
-            // elements: accumulate_id_clause, lhs_or, accumulate_key, RIGHT_PAREN, accumulate_init_clause
+            // elements: lhs_or, accumulate_init_clause, RIGHT_PAREN, accumulate_key, accumulate_id_clause
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6598,21 +7559,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 )
+            // 604: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:6: ^( accumulate_key lhs_or ( accumulate_init_clause )? ( accumulate_id_clause )? RIGHT_PAREN )
                 {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:604:54: ( accumulate_id_clause )?
                 if ( stream_accumulate_id_clause.hasNext() ) {
                     adaptor.addChild(root_1, stream_accumulate_id_clause.next());
 
@@ -6652,16 +7613,16 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:607:1: accumulate_init_clause : init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) ;
     public final accumulate_init_clause_return accumulate_init_clause() throws RecognitionException {
         accumulate_init_clause_return retval = new accumulate_init_clause_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COMMA154=null;
-        Token COMMA156=null;
-        Token COMMA158=null;
+        Token COMMA179=null;
+        Token COMMA181=null;
+        Token COMMA183=null;
         paren_chunk_return pc1 = null;
 
         paren_chunk_return pc2 = null;
@@ -6670,18 +7631,18 @@
 
         paren_chunk_return pc4 = null;
 
-        init_key_return init_key153 = null;
+        init_key_return init_key178 = null;
 
-        action_key_return action_key155 = null;
+        action_key_return action_key180 = null;
 
-        reverse_key_return reverse_key157 = null;
+        reverse_key_return reverse_key182 = null;
 
-        result_key_return result_key159 = null;
+        result_key_return result_key184 = null;
 
 
-        Object COMMA154_tree=null;
-        Object COMMA156_tree=null;
-        Object COMMA158_tree=null;
+        Object COMMA179_tree=null;
+        Object COMMA181_tree=null;
+        Object COMMA183_tree=null;
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleSubtreeStream stream_reverse_key=new RewriteRuleSubtreeStream(adaptor,"rule reverse_key");
         RewriteRuleSubtreeStream stream_result_key=new RewriteRuleSubtreeStream(adaptor,"rule result_key");
@@ -6689,33 +7650,33 @@
         RewriteRuleSubtreeStream stream_action_key=new RewriteRuleSubtreeStream(adaptor,"rule action_key");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:2: ( init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:608:4: init_key pc1= paren_chunk ( COMMA )? action_key pc2= paren_chunk ( COMMA )? ( reverse_key pc3= paren_chunk ( COMMA )? )? result_key pc4= paren_chunk
             {
-            pushFollow(FOLLOW_init_key_in_accumulate_init_clause2308);
-            init_key153=init_key();
+            pushFollow(FOLLOW_init_key_in_accumulate_init_clause2560);
+            init_key178=init_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_init_key.add(init_key153.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2313);
+            if ( backtracking==0 ) stream_init_key.add(init_key178.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2565);
             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 )?
-            int alt54=2;
-            int LA54_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609:18: ( COMMA )?
+            int alt60=2;
+            int LA60_0 = input.LA(1);
 
-            if ( (LA54_0==COMMA) ) {
-                alt54=1;
+            if ( (LA60_0==COMMA) ) {
+                alt60=1;
             }
-            switch (alt54) {
+            switch (alt60) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:609:18: COMMA
                     {
-                    COMMA154=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2315); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA154);
+                    COMMA179=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2567); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA179);
 
 
                     }
@@ -6723,30 +7684,30 @@
 
             }
 
-            pushFollow(FOLLOW_action_key_in_accumulate_init_clause2319);
-            action_key155=action_key();
+            pushFollow(FOLLOW_action_key_in_accumulate_init_clause2571);
+            action_key180=action_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_action_key.add(action_key155.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2323);
+            if ( backtracking==0 ) stream_action_key.add(action_key180.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2575);
             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 )?
-            int alt55=2;
-            int LA55_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:610:29: ( COMMA )?
+            int alt61=2;
+            int LA61_0 = input.LA(1);
 
-            if ( (LA55_0==COMMA) ) {
-                alt55=1;
+            if ( (LA61_0==COMMA) ) {
+                alt61=1;
             }
-            switch (alt55) {
+            switch (alt61) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:610:29: COMMA
                     {
-                    COMMA156=(Token)input.LT(1);
-                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2325); if (failed) return retval;
-                    if ( backtracking==0 ) stream_COMMA.add(COMMA156);
+                    COMMA181=(Token)input.LT(1);
+                    match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2577); if (failed) return retval;
+                    if ( backtracking==0 ) stream_COMMA.add(COMMA181);
 
 
                     }
@@ -6754,37 +7715,37 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:566:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
-            int alt57=2;
-            alt57 = dfa57.predict(input);
-            switch (alt57) {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?
+            int alt63=2;
+            alt63 = dfa63.predict(input);
+            switch (alt63) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:4: reverse_key pc3= paren_chunk ( COMMA )?
                     {
-                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2331);
-                    reverse_key157=reverse_key();
+                    pushFollow(FOLLOW_reverse_key_in_accumulate_init_clause2583);
+                    reverse_key182=reverse_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_reverse_key.add(reverse_key157.getTree());
-                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2335);
+                    if ( backtracking==0 ) stream_reverse_key.add(reverse_key182.getTree());
+                    pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2587);
                     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 )?
-                    int alt56=2;
-                    int LA56_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:32: ( COMMA )?
+                    int alt62=2;
+                    int LA62_0 = input.LA(1);
 
-                    if ( (LA56_0==COMMA) ) {
-                        alt56=1;
+                    if ( (LA62_0==COMMA) ) {
+                        alt62=1;
                     }
-                    switch (alt56) {
+                    switch (alt62) {
                         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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:611:32: COMMA
                             {
-                            COMMA158=(Token)input.LT(1);
-                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2337); if (failed) return retval;
-                            if ( backtracking==0 ) stream_COMMA.add(COMMA158);
+                            COMMA183=(Token)input.LT(1);
+                            match(input,COMMA,FOLLOW_COMMA_in_accumulate_init_clause2589); if (failed) return retval;
+                            if ( backtracking==0 ) stream_COMMA.add(COMMA183);
 
 
                             }
@@ -6798,40 +7759,40 @@
 
             }
 
-            pushFollow(FOLLOW_result_key_in_accumulate_init_clause2343);
-            result_key159=result_key();
+            pushFollow(FOLLOW_result_key_in_accumulate_init_clause2595);
+            result_key184=result_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_result_key.add(result_key159.getTree());
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2347);
+            if ( backtracking==0 ) stream_result_key.add(result_key184.getTree());
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_init_clause2599);
             pc4=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(pc4.getTree());
 
             // AST REWRITE
-            // elements: pc3, pc2, action_key, pc1, pc4, init_key, result_key, reverse_key
+            // elements: pc1, pc4, action_key, pc2, init_key, result_key, pc3, reverse_key
             // token labels: 
-            // rule labels: pc2, pc4, pc3, pc1, retval
+            // rule labels: pc2, pc3, pc4, pc1, retval
             // token list labels: 
             // rule list labels: 
             if ( backtracking==0 ) {
             retval.tree = root_0;
             RewriteRuleSubtreeStream stream_pc2=new RewriteRuleSubtreeStream(adaptor,"token pc2",pc2!=null?pc2.tree:null);
-            RewriteRuleSubtreeStream stream_pc4=new RewriteRuleSubtreeStream(adaptor,"token pc4",pc4!=null?pc4.tree:null);
             RewriteRuleSubtreeStream stream_pc3=new RewriteRuleSubtreeStream(adaptor,"token pc3",pc3!=null?pc3.tree:null);
+            RewriteRuleSubtreeStream stream_pc4=new RewriteRuleSubtreeStream(adaptor,"token pc4",pc4!=null?pc4.tree:null);
             RewriteRuleSubtreeStream stream_pc1=new RewriteRuleSubtreeStream(adaptor,"token pc1",pc1!=null?pc1.tree:null);
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 568:2: -> ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
+            // 613: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:5: ^( VT_ACCUMULATE_INIT_CLAUSE ^( init_key $pc1) ^( action_key $pc2) ( ^( reverse_key $pc3) )? ^( result_key $pc4) )
                 {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:33: ^( init_key $pc1)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_init_key.nextNode(), root_2);
@@ -6840,7 +7801,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:50: ^( action_key $pc2)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_action_key.nextNode(), root_2);
@@ -6849,9 +7810,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:69: ^( reverse_key $pc3)
                     {
                     Object root_2 = (Object)adaptor.nil();
                     root_2 = (Object)adaptor.becomeRoot(stream_reverse_key.nextNode(), root_2);
@@ -6864,7 +7825,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:613:90: ^( result_key $pc4)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_result_key.nextNode(), root_2);
@@ -6906,7 +7867,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:616:1: accumulate_id_clause : id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) ;
     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);
@@ -6921,21 +7882,21 @@
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:2: (id= ID text= paren_chunk -> ^( VT_ACCUMULATE_ID_CLAUSE ID paren_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:617:4: id= ID text= paren_chunk
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_id_clause2396); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause2648); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
-            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause2400);
+            pushFollow(FOLLOW_paren_chunk_in_accumulate_id_clause2652);
             text=paren_chunk();
             _fsp--;
             if (failed) return retval;
             if ( backtracking==0 ) stream_paren_chunk.add(text.getTree());
 
             // AST REWRITE
-            // elements: paren_chunk, ID
+            // elements: ID, paren_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -6945,9 +7906,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 )
+            // 618: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:618: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);
@@ -6987,51 +7948,51 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:621:1: collect_statement : collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) ;
     public final collect_statement_return collect_statement() throws RecognitionException {
         collect_statement_return retval = new collect_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN161=null;
-        Token RIGHT_PAREN163=null;
-        collect_key_return collect_key160 = null;
+        Token LEFT_PAREN186=null;
+        Token RIGHT_PAREN188=null;
+        collect_key_return collect_key185 = null;
 
-        pattern_source_return pattern_source162 = null;
+        pattern_source_return pattern_source187 = null;
 
 
-        Object LEFT_PAREN161_tree=null;
-        Object RIGHT_PAREN163_tree=null;
+        Object LEFT_PAREN186_tree=null;
+        Object RIGHT_PAREN188_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_collect_key=new RewriteRuleSubtreeStream(adaptor,"rule collect_key");
         RewriteRuleSubtreeStream stream_pattern_source=new RewriteRuleSubtreeStream(adaptor,"rule pattern_source");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:2: ( collect_key LEFT_PAREN pattern_source RIGHT_PAREN -> ^( collect_key pattern_source RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:622:4: collect_key LEFT_PAREN pattern_source RIGHT_PAREN
             {
-            pushFollow(FOLLOW_collect_key_in_collect_statement2422);
-            collect_key160=collect_key();
+            pushFollow(FOLLOW_collect_key_in_collect_statement2674);
+            collect_key185=collect_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_collect_key.add(collect_key160.getTree());
-            LEFT_PAREN161=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2426); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN161);
+            if ( backtracking==0 ) stream_collect_key.add(collect_key185.getTree());
+            LEFT_PAREN186=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_collect_statement2678); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN186);
 
-            pushFollow(FOLLOW_pattern_source_in_collect_statement2428);
-            pattern_source162=pattern_source();
+            pushFollow(FOLLOW_pattern_source_in_collect_statement2680);
+            pattern_source187=pattern_source();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_pattern_source.add(pattern_source162.getTree());
-            RIGHT_PAREN163=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2430); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN163);
+            if ( backtracking==0 ) stream_pattern_source.add(pattern_source187.getTree());
+            RIGHT_PAREN188=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_collect_statement2682); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN188);
 
 
             // AST REWRITE
-            // elements: collect_key, pattern_source, RIGHT_PAREN
+            // elements: RIGHT_PAREN, pattern_source, collect_key
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7041,9 +8002,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 )
+            // 624: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:624:5: ^( collect_key pattern_source RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_collect_key.nextNode(), root_1);
@@ -7083,37 +8044,37 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:1: entrypoint_statement : entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) ;
     public final entrypoint_statement_return entrypoint_statement() throws RecognitionException {
         entrypoint_statement_return retval = new entrypoint_statement_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        entry_point_key_return entry_point_key164 = null;
+        entry_point_key_return entry_point_key189 = null;
 
-        entrypoint_id_return entrypoint_id165 = null;
+        entrypoint_id_return entrypoint_id190 = null;
 
 
         RewriteRuleSubtreeStream stream_entrypoint_id=new RewriteRuleSubtreeStream(adaptor,"rule entrypoint_id");
         RewriteRuleSubtreeStream stream_entry_point_key=new RewriteRuleSubtreeStream(adaptor,"rule entry_point_key");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:2: ( entry_point_key entrypoint_id -> ^( entry_point_key entrypoint_id ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:628:4: entry_point_key entrypoint_id
             {
-            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2452);
-            entry_point_key164=entry_point_key();
+            pushFollow(FOLLOW_entry_point_key_in_entrypoint_statement2704);
+            entry_point_key189=entry_point_key();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key164.getTree());
-            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement2454);
-            entrypoint_id165=entrypoint_id();
+            if ( backtracking==0 ) stream_entry_point_key.add(entry_point_key189.getTree());
+            pushFollow(FOLLOW_entrypoint_id_in_entrypoint_statement2706);
+            entrypoint_id190=entrypoint_id();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_entrypoint_id.add(entrypoint_id165.getTree());
+            if ( backtracking==0 ) stream_entrypoint_id.add(entrypoint_id190.getTree());
 
             // AST REWRITE
-            // elements: entrypoint_id, entry_point_key
+            // elements: entry_point_key, entrypoint_id
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7123,9 +8084,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 )
+            // 629: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:629:5: ^( entry_point_key entrypoint_id )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_entry_point_key.nextNode(), root_1);
@@ -7164,7 +8125,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:632:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );
     public final entrypoint_id_return entrypoint_id() throws RecognitionException {
         entrypoint_id_return retval = new entrypoint_id_return();
         retval.start = input.LT(1);
@@ -7178,29 +8139,29 @@
         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] )
-            int alt58=2;
-            int LA58_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:2: (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] )
+            int alt64=2;
+            int LA64_0 = input.LA(1);
 
-            if ( (LA58_0==ID) ) {
-                alt58=1;
+            if ( (LA64_0==ID) ) {
+                alt64=1;
             }
-            else if ( (LA58_0==STRING) ) {
-                alt58=2;
+            else if ( (LA64_0==STRING) ) {
+                alt64=2;
             }
             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("632:1: entrypoint_id : (value= ID -> VT_ENTRYPOINT_ID[$value] | value= STRING -> VT_ENTRYPOINT_ID[$value] );", 64, 0, input);
 
                 throw nvae;
             }
-            switch (alt58) {
+            switch (alt64) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:633:5: value= ID
                     {
                     value=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_entrypoint_id2477); if (failed) return retval;
+                    match(input,ID,FOLLOW_ID_in_entrypoint_id2729); if (failed) return retval;
                     if ( backtracking==0 ) stream_ID.add(value);
 
 
@@ -7215,7 +8176,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]
+                    // 633:14: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -7226,10 +8187,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:5: value= STRING
                     {
                     value=(Token)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id2490); if (failed) return retval;
+                    match(input,STRING,FOLLOW_STRING_in_entrypoint_id2742); if (failed) return retval;
                     if ( backtracking==0 ) stream_STRING.add(value);
 
 
@@ -7244,7 +8205,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]
+                    // 634:18: -> VT_ENTRYPOINT_ID[$value]
                     {
                         adaptor.addChild(root_0, adaptor.create(VT_ENTRYPOINT_ID, value));
 
@@ -7279,64 +8240,39 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:637:1: from_source : ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) ;
     public final from_source_return from_source() throws RecognitionException {
         from_source_return retval = new from_source_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token ID166=null;
+        Token ID191=null;
         paren_chunk_return args = null;
 
-        expression_chain_return expression_chain167 = null;
+        expression_chain_return expression_chain192 = null;
 
 
-        Object ID166_tree=null;
+        Object ID191_tree=null;
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:2: ( ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )? -> ^( VT_FROM_SOURCE ID ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:4: ID ( ( LEFT_PAREN )=>args= paren_chunk )? ( expression_chain )?
             {
-            ID166=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_source2506); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID166);
+            ID191=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_from_source2758); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID191);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:594:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
-            int alt59=2;
-            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) {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:3: ( ( LEFT_PAREN )=>args= paren_chunk )?
+            int alt65=2;
+            alt65 = dfa65.predict(input);
+            switch (alt65) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:5: ( LEFT_PAREN )=>args= paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_from_source2519);
+                    pushFollow(FOLLOW_paren_chunk_in_from_source2771);
                     args=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
@@ -7347,22 +8283,22 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:595:3: ( expression_chain )?
-            int alt60=2;
-            int LA60_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:640:3: ( expression_chain )?
+            int alt66=2;
+            int LA66_0 = input.LA(1);
 
-            if ( (LA60_0==DOT) ) {
-                alt60=1;
+            if ( (LA66_0==DOT) ) {
+                alt66=1;
             }
-            switch (alt60) {
+            switch (alt66) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:640:3: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_from_source2526);
-                    expression_chain167=expression_chain();
+                    pushFollow(FOLLOW_expression_chain_in_from_source2778);
+                    expression_chain192=expression_chain();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain167.getTree());
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain192.getTree());
 
                     }
                     break;
@@ -7381,21 +8317,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 )? )
+            // 641: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:641: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:641: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:641:38: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -7434,7 +8370,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:644:1: expression_chain : startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) ;
     public final expression_chain_return expression_chain() throws RecognitionException {
         expression_chain_return retval = new expression_chain_return();
         retval.start = input.LT(1);
@@ -7442,106 +8378,78 @@
         Object root_0 = null;
 
         Token startToken=null;
-        Token ID168=null;
-        square_chunk_return square_chunk169 = null;
+        Token ID193=null;
+        square_chunk_return square_chunk194 = null;
 
-        paren_chunk_return paren_chunk170 = null;
+        paren_chunk_return paren_chunk195 = null;
 
-        expression_chain_return expression_chain171 = null;
+        expression_chain_return expression_chain196 = null;
 
 
         Object startToken_tree=null;
-        Object ID168_tree=null;
+        Object ID193_tree=null;
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
         RewriteRuleSubtreeStream stream_square_chunk=new RewriteRuleSubtreeStream(adaptor,"rule square_chunk");
         RewriteRuleSubtreeStream stream_expression_chain=new RewriteRuleSubtreeStream(adaptor,"rule expression_chain");
         RewriteRuleSubtreeStream stream_paren_chunk=new RewriteRuleSubtreeStream(adaptor,"rule paren_chunk");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:645:2: (startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )? -> ^( VT_EXPRESSION_CHAIN[$startToken] ID ( square_chunk )? ( paren_chunk )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:3: startToken= DOT ID ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )? ( expression_chain )?
             {
             startToken=(Token)input.LT(1);
-            match(input,DOT,FOLLOW_DOT_in_expression_chain2558); if (failed) return retval;
+            match(input,DOT,FOLLOW_DOT_in_expression_chain2810); if (failed) return retval;
             if ( backtracking==0 ) stream_DOT.add(startToken);
 
-            ID168=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_expression_chain2560); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID168);
+            ID193=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_expression_chain2812); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID193);
 
-            // /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 )?
-            int alt61=3;
-            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) {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?
+            int alt67=3;
+            alt67 = dfa67.predict(input);
+            switch (alt67) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:6: ( LEFT_SQUARE )=> square_chunk
                     {
-                    pushFollow(FOLLOW_square_chunk_in_expression_chain2580);
-                    square_chunk169=square_chunk();
+                    pushFollow(FOLLOW_square_chunk_in_expression_chain2832);
+                    square_chunk194=square_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_square_chunk.add(square_chunk169.getTree());
+                    if ( backtracking==0 ) stream_square_chunk.add(square_chunk194.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:6: ( LEFT_PAREN )=> paren_chunk
                     {
-                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2602);
-                    paren_chunk170=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_expression_chain2854);
+                    paren_chunk195=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk170.getTree());
+                    if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk195.getTree());
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:607:4: ( expression_chain )?
-            int alt62=2;
-            int LA62_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:652:4: ( expression_chain )?
+            int alt68=2;
+            int LA68_0 = input.LA(1);
 
-            if ( (LA62_0==DOT) ) {
-                alt62=1;
+            if ( (LA68_0==DOT) ) {
+                alt68=1;
             }
-            switch (alt62) {
+            switch (alt68) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:652:4: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain2613);
-                    expression_chain171=expression_chain();
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain2865);
+                    expression_chain196=expression_chain();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain171.getTree());
+                    if ( backtracking==0 ) stream_expression_chain.add(expression_chain196.getTree());
 
                     }
                     break;
@@ -7550,7 +8458,7 @@
 
 
             // AST REWRITE
-            // elements: square_chunk, paren_chunk, ID, expression_chain
+            // elements: expression_chain, ID, paren_chunk, square_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -7560,27 +8468,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 )? )
+            // 653: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:653: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:653: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:653: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:653:72: ( expression_chain )?
                 if ( stream_expression_chain.hasNext() ) {
                     adaptor.addChild(root_1, stream_expression_chain.next());
 
@@ -7619,38 +8527,38 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );
     public final lhs_pattern_return lhs_pattern() throws RecognitionException {
         lhs_pattern_return retval = new lhs_pattern_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        fact_binding_return fact_binding172 = null;
+        fact_binding_return fact_binding197 = null;
 
-        fact_return fact173 = null;
+        fact_return fact198 = null;
 
 
         RewriteRuleSubtreeStream stream_fact_binding=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding");
         RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:612:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
-            int alt63=2;
-            int LA63_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:2: ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) )
+            int alt69=2;
+            int LA69_0 = input.LA(1);
 
-            if ( (LA63_0==ID) ) {
-                int LA63_1 = input.LA(2);
+            if ( (LA69_0==ID) ) {
+                int LA69_1 = input.LA(2);
 
-                if ( (LA63_1==COLON) ) {
-                    alt63=1;
+                if ( (LA69_1==COLON) ) {
+                    alt69=1;
                 }
-                else if ( (LA63_1==DOT||LA63_1==LEFT_PAREN||LA63_1==LEFT_SQUARE) ) {
-                    alt63=2;
+                else if ( (LA69_1==DOT||LA69_1==LEFT_PAREN||LA69_1==LEFT_SQUARE) ) {
+                    alt69=2;
                 }
                 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("656:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 69, 1, input);
 
                     throw nvae;
                 }
@@ -7658,19 +8566,19 @@
             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("656:1: lhs_pattern : ( fact_binding -> ^( VT_PATTERN fact_binding ) | fact -> ^( VT_PATTERN fact ) );", 69, 0, input);
 
                 throw nvae;
             }
-            switch (alt63) {
+            switch (alt69) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:4: fact_binding
                     {
-                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2646);
-                    fact_binding172=fact_binding();
+                    pushFollow(FOLLOW_fact_binding_in_lhs_pattern2898);
+                    fact_binding197=fact_binding();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact_binding.add(fact_binding172.getTree());
+                    if ( backtracking==0 ) stream_fact_binding.add(fact_binding197.getTree());
 
                     // AST REWRITE
                     // elements: fact_binding
@@ -7683,9 +8591,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 )
+                    // 657: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:20: ^( VT_PATTERN fact_binding )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -7702,13 +8610,13 @@
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:658:4: fact
                     {
-                    pushFollow(FOLLOW_fact_in_lhs_pattern2659);
-                    fact173=fact();
+                    pushFollow(FOLLOW_fact_in_lhs_pattern2911);
+                    fact198=fact();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact.add(fact173.getTree());
+                    if ( backtracking==0 ) stream_fact.add(fact198.getTree());
 
                     // AST REWRITE
                     // elements: fact
@@ -7721,9 +8629,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 613:9: -> ^( VT_PATTERN fact )
+                    // 658: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:658:12: ^( VT_PATTERN fact )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN, "VT_PATTERN"), root_1);
@@ -7764,82 +8672,82 @@
     };
 
     // $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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:661:1: fact_binding : label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) ;
     public final fact_binding_return fact_binding() throws RecognitionException {
         fact_binding_return retval = new fact_binding_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN176=null;
-        Token RIGHT_PAREN178=null;
-        label_return label174 = null;
+        Token LEFT_PAREN201=null;
+        Token RIGHT_PAREN203=null;
+        label_return label199 = null;
 
-        fact_return fact175 = null;
+        fact_return fact200 = null;
 
-        fact_binding_expression_return fact_binding_expression177 = null;
+        fact_binding_expression_return fact_binding_expression202 = null;
 
 
-        Object LEFT_PAREN176_tree=null;
-        Object RIGHT_PAREN178_tree=null;
+        Object LEFT_PAREN201_tree=null;
+        Object RIGHT_PAREN203_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_label=new RewriteRuleSubtreeStream(adaptor,"rule label");
         RewriteRuleSubtreeStream stream_fact_binding_expression=new RewriteRuleSubtreeStream(adaptor,"rule fact_binding_expression");
         RewriteRuleSubtreeStream stream_fact=new RewriteRuleSubtreeStream(adaptor,"rule fact");
         try {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:3: ( label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN ) -> ^( VT_FACT_BINDING label ( fact )? ( fact_binding_expression )? ( RIGHT_PAREN )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:662:5: label ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
             {
-            pushFollow(FOLLOW_label_in_fact_binding2679);
-            label174=label();
+            pushFollow(FOLLOW_label_in_fact_binding2931);
+            label199=label();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_label.add(label174.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 )
-            int alt64=2;
-            int LA64_0 = input.LA(1);
+            if ( backtracking==0 ) stream_label.add(label199.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )
+            int alt70=2;
+            int LA70_0 = input.LA(1);
 
-            if ( (LA64_0==ID) ) {
-                alt64=1;
+            if ( (LA70_0==ID) ) {
+                alt70=1;
             }
-            else if ( (LA64_0==LEFT_PAREN) ) {
-                alt64=2;
+            else if ( (LA70_0==LEFT_PAREN) ) {
+                alt70=2;
             }
             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("663:3: ( fact | LEFT_PAREN fact_binding_expression RIGHT_PAREN )", 70, 0, input);
 
                 throw nvae;
             }
-            switch (alt64) {
+            switch (alt70) {
                 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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:663:5: fact
                     {
-                    pushFollow(FOLLOW_fact_in_fact_binding2685);
-                    fact175=fact();
+                    pushFollow(FOLLOW_fact_in_fact_binding2937);
+                    fact200=fact();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact.add(fact175.getTree());
+                    if ( backtracking==0 ) stream_fact.add(fact200.getTree());
 
                     }
                     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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:6: LEFT_PAREN fact_binding_expression RIGHT_PAREN
                     {
-                    LEFT_PAREN176=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2692); if (failed) return retval;
-                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN176);
+                    LEFT_PAREN201=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact_binding2944); if (failed) return retval;
+                    if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN201);
 
-                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding2694);
-                    fact_binding_expression177=fact_binding_expression();
+                    pushFollow(FOLLOW_fact_binding_expression_in_fact_binding2946);
+                    fact_binding_expression202=fact_binding_expression();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression177.getTree());
-                    RIGHT_PAREN178=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding2696); if (failed) return retval;
-                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN178);
+                    if ( backtracking==0 ) stream_fact_binding_expression.add(fact_binding_expression202.getTree());
+                    RIGHT_PAREN203=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact_binding2948); if (failed) return retval;
+                    if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN203);
 
 
                     }
@@ -7859,27 +8767,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 )? )
+            // 666: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:666:61: ( RIGHT_PAREN )?
                 if ( stream_RIGHT_PAREN.hasNext() ) {
                     adaptor.addChild(root_1, stream_RIGHT_PAREN.next());
 
@@ -7918,7 +8826,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:669:1: fact_binding_expression : ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* ;
     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);
@@ -7928,9 +8836,9 @@
         Token pipe=null;
         or_key_return value = null;
 
-        fact_return fact179 = null;
+        fact_return fact204 = null;
 
-        fact_return fact180 = null;
+        fact_return fact205 = null;
 
 
         Object pipe_tree=null;
@@ -7941,17 +8849,17 @@
         	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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:3: ( ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:5: ( fact -> fact ) ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
             {
-            // /Users/porcelli/Documents/dev/drools/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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:5: ( fact -> fact )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:6: fact
             {
-            pushFollow(FOLLOW_fact_in_fact_binding_expression2735);
-            fact179=fact();
+            pushFollow(FOLLOW_fact_in_fact_binding_expression2987);
+            fact204=fact();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_fact.add(fact179.getTree());
+            if ( backtracking==0 ) stream_fact.add(fact204.getTree());
 
             // AST REWRITE
             // elements: fact
@@ -7964,7 +8872,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 627:11: -> fact
+            // 672:11: -> fact
             {
                 adaptor.addChild(root_0, stream_fact.next());
 
@@ -7974,46 +8882,46 @@
 
             }
 
-            // /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 ) )*
-            loop66:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:20: ( (value= or_key | pipe= DOUBLE_PIPE ) fact -> ^( VT_FACT_OR[orToken] $fact_binding_expression fact ) )*
+            loop72:
             do {
-                int alt66=2;
-                int LA66_0 = input.LA(1);
+                int alt72=2;
+                int LA72_0 = input.LA(1);
 
-                if ( (LA66_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
-                    alt66=1;
+                if ( (LA72_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
+                    alt72=1;
                 }
-                else if ( (LA66_0==DOUBLE_PIPE) ) {
-                    alt66=1;
+                else if ( (LA72_0==DOUBLE_PIPE) ) {
+                    alt72=1;
                 }
 
 
-                switch (alt66) {
+                switch (alt72) {
             	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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:22: (value= or_key | pipe= DOUBLE_PIPE ) fact
             	    {
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:627:22: (value= or_key | pipe= DOUBLE_PIPE )
-            	    int alt65=2;
-            	    int LA65_0 = input.LA(1);
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:22: (value= or_key | pipe= DOUBLE_PIPE )
+            	    int alt71=2;
+            	    int LA71_0 = input.LA(1);
 
-            	    if ( (LA65_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
-            	        alt65=1;
+            	    if ( (LA71_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
+            	        alt71=1;
             	    }
-            	    else if ( (LA65_0==DOUBLE_PIPE) ) {
-            	        alt65=2;
+            	    else if ( (LA71_0==DOUBLE_PIPE) ) {
+            	        alt71=2;
             	    }
             	    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("672:22: (value= or_key | pipe= DOUBLE_PIPE )", 71, 0, input);
 
             	        throw nvae;
             	    }
-            	    switch (alt65) {
+            	    switch (alt71) {
             	        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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:23: value= or_key
             	            {
-            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression2747);
+            	            pushFollow(FOLLOW_or_key_in_fact_binding_expression2999);
             	            value=or_key();
             	            _fsp--;
             	            if (failed) return retval;
@@ -8025,10 +8933,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:672:62: pipe= DOUBLE_PIPE
             	            {
             	            pipe=(Token)input.LT(1);
-            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2753); if (failed) return retval;
+            	            match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3005); if (failed) return retval;
             	            if ( backtracking==0 ) stream_DOUBLE_PIPE.add(pipe);
 
             	            if ( backtracking==0 ) {
@@ -8040,14 +8948,14 @@
 
             	    }
 
-            	    pushFollow(FOLLOW_fact_in_fact_binding_expression2758);
-            	    fact180=fact();
+            	    pushFollow(FOLLOW_fact_in_fact_binding_expression3010);
+            	    fact205=fact();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_fact.add(fact180.getTree());
+            	    if ( backtracking==0 ) stream_fact.add(fact205.getTree());
 
             	    // AST REWRITE
-            	    // elements: fact_binding_expression, fact
+            	    // elements: fact, fact_binding_expression
             	    // token labels: 
             	    // rule labels: retval
             	    // token list labels: 
@@ -8057,9 +8965,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 )
+            	    // 673: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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:673: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);
@@ -8078,7 +8986,7 @@
             	    break;
 
             	default :
-            	    break loop66;
+            	    break loop72;
                 }
             } while (true);
 
@@ -8108,65 +9016,65 @@
     };
 
     // $ANTLR start fact
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:631:1: fact : pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:676:1: fact : pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) ;
     public final fact_return fact() throws RecognitionException {
         fact_return retval = new fact_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN182=null;
-        Token RIGHT_PAREN184=null;
-        pattern_type_return pattern_type181 = null;
+        Token LEFT_PAREN207=null;
+        Token RIGHT_PAREN209=null;
+        pattern_type_return pattern_type206 = null;
 
-        constraints_return constraints183 = null;
+        constraints_return constraints208 = null;
 
 
-        Object LEFT_PAREN182_tree=null;
-        Object RIGHT_PAREN184_tree=null;
+        Object LEFT_PAREN207_tree=null;
+        Object RIGHT_PAREN209_tree=null;
         RewriteRuleTokenStream stream_LEFT_PAREN=new RewriteRuleTokenStream(adaptor,"token LEFT_PAREN");
         RewriteRuleTokenStream stream_RIGHT_PAREN=new RewriteRuleTokenStream(adaptor,"token RIGHT_PAREN");
         RewriteRuleSubtreeStream stream_pattern_type=new RewriteRuleSubtreeStream(adaptor,"rule pattern_type");
         RewriteRuleSubtreeStream stream_constraints=new RewriteRuleSubtreeStream(adaptor,"rule constraints");
          pushParaphrases(DroolsParaphareseTypes.PATTERN); 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634: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:634:4: pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:2: ( pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:4: pattern_type LEFT_PAREN ( constraints )? RIGHT_PAREN
             {
-            pushFollow(FOLLOW_pattern_type_in_fact2798);
-            pattern_type181=pattern_type();
+            pushFollow(FOLLOW_pattern_type_in_fact3050);
+            pattern_type206=pattern_type();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_pattern_type.add(pattern_type181.getTree());
-            LEFT_PAREN182=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact2800); if (failed) return retval;
-            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN182);
+            if ( backtracking==0 ) stream_pattern_type.add(pattern_type206.getTree());
+            LEFT_PAREN207=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_fact3052); if (failed) return retval;
+            if ( backtracking==0 ) stream_LEFT_PAREN.add(LEFT_PAREN207);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:28: ( constraints )?
-            int alt67=2;
-            int LA67_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:28: ( constraints )?
+            int alt73=2;
+            int LA73_0 = input.LA(1);
 
-            if ( (LA67_0==ID||LA67_0==LEFT_PAREN) ) {
-                alt67=1;
+            if ( (LA73_0==ID||LA73_0==LEFT_PAREN) ) {
+                alt73=1;
             }
-            switch (alt67) {
+            switch (alt73) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:634:28: constraints
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:28: constraints
                     {
-                    pushFollow(FOLLOW_constraints_in_fact2802);
-                    constraints183=constraints();
+                    pushFollow(FOLLOW_constraints_in_fact3054);
+                    constraints208=constraints();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_constraints.add(constraints183.getTree());
+                    if ( backtracking==0 ) stream_constraints.add(constraints208.getTree());
 
                     }
                     break;
 
             }
 
-            RIGHT_PAREN184=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact2805); if (failed) return retval;
-            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN184);
+            RIGHT_PAREN209=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_fact3057); if (failed) return retval;
+            if ( backtracking==0 ) stream_RIGHT_PAREN.add(RIGHT_PAREN209);
 
 
             // AST REWRITE
@@ -8180,15 +9088,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 635:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
+            // 680:2: -> ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:5: ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:5: ^( VT_FACT pattern_type ( constraints )? RIGHT_PAREN )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FACT, "VT_FACT"), root_1);
 
                 adaptor.addChild(root_1, stream_pattern_type.next());
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:635:28: ( constraints )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:680:28: ( constraints )?
                 if ( stream_constraints.hasNext() ) {
                     adaptor.addChild(root_1, stream_constraints.next());
 
@@ -8231,60 +9139,60 @@
     };
 
     // $ANTLR start constraints
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:638:1: constraints : constraint ( COMMA constraint )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:683:1: constraints : constraint ( COMMA constraint )* ;
     public final constraints_return constraints() throws RecognitionException {
         constraints_return retval = new constraints_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token COMMA186=null;
-        constraint_return constraint185 = null;
+        Token COMMA211=null;
+        constraint_return constraint210 = null;
 
-        constraint_return constraint187 = null;
+        constraint_return constraint212 = null;
 
 
-        Object COMMA186_tree=null;
+        Object COMMA211_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:2: ( constraint ( COMMA constraint )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:4: constraint ( COMMA constraint )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:2: ( constraint ( COMMA constraint )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:4: constraint ( COMMA constraint )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_in_constraints2830);
-            constraint185=constraint();
+            pushFollow(FOLLOW_constraint_in_constraints3082);
+            constraint210=constraint();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, constraint185.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:15: ( COMMA constraint )*
-            loop68:
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint210.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:15: ( COMMA constraint )*
+            loop74:
             do {
-                int alt68=2;
-                int LA68_0 = input.LA(1);
+                int alt74=2;
+                int LA74_0 = input.LA(1);
 
-                if ( (LA68_0==COMMA) ) {
-                    alt68=1;
+                if ( (LA74_0==COMMA) ) {
+                    alt74=1;
                 }
 
 
-                switch (alt68) {
+                switch (alt74) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:17: COMMA constraint
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:684:17: COMMA constraint
             	    {
-            	    COMMA186=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_constraints2834); if (failed) return retval;
-            	    pushFollow(FOLLOW_constraint_in_constraints2837);
-            	    constraint187=constraint();
+            	    COMMA211=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_constraints3086); if (failed) return retval;
+            	    pushFollow(FOLLOW_constraint_in_constraints3089);
+            	    constraint212=constraint();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint187.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint212.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop68;
+            	    break loop74;
                 }
             } while (true);
 
@@ -8314,28 +9222,28 @@
     };
 
     // $ANTLR start constraint
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:642:1: constraint : or_constr ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:687:1: constraint : or_constr ;
     public final constraint_return constraint() throws RecognitionException {
         constraint_return retval = new constraint_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        or_constr_return or_constr188 = null;
+        or_constr_return or_constr213 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:643:2: ( or_constr )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:643:4: or_constr
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:2: ( or_constr )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:688:4: or_constr
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_or_constr_in_constraint2851);
-            or_constr188=or_constr();
+            pushFollow(FOLLOW_or_constr_in_constraint3103);
+            or_constr213=or_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, or_constr188.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, or_constr213.getTree());
 
             }
 
@@ -8362,64 +9270,64 @@
     };
 
     // $ANTLR start or_constr
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:646:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:1: or_constr : and_constr ( DOUBLE_PIPE and_constr )* ;
     public final or_constr_return or_constr() throws RecognitionException {
         or_constr_return retval = new or_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_PIPE190=null;
-        and_constr_return and_constr189 = null;
+        Token DOUBLE_PIPE215=null;
+        and_constr_return and_constr214 = null;
 
-        and_constr_return and_constr191 = null;
+        and_constr_return and_constr216 = null;
 
 
-        Object DOUBLE_PIPE190_tree=null;
+        Object DOUBLE_PIPE215_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:4: and_constr ( DOUBLE_PIPE and_constr )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:2: ( and_constr ( DOUBLE_PIPE and_constr )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: and_constr ( DOUBLE_PIPE and_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_constr_in_or_constr2862);
-            and_constr189=and_constr();
+            pushFollow(FOLLOW_and_constr_in_or_constr3114);
+            and_constr214=and_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, and_constr189.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:15: ( DOUBLE_PIPE and_constr )*
-            loop69:
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_constr214.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:15: ( DOUBLE_PIPE and_constr )*
+            loop75:
             do {
-                int alt69=2;
-                int LA69_0 = input.LA(1);
+                int alt75=2;
+                int LA75_0 = input.LA(1);
 
-                if ( (LA69_0==DOUBLE_PIPE) ) {
-                    alt69=1;
+                if ( (LA75_0==DOUBLE_PIPE) ) {
+                    alt75=1;
                 }
 
 
-                switch (alt69) {
+                switch (alt75) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:647:17: DOUBLE_PIPE and_constr
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:17: DOUBLE_PIPE and_constr
             	    {
-            	    DOUBLE_PIPE190=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr2866); if (failed) return retval;
+            	    DOUBLE_PIPE215=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_constr3118); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_PIPE190_tree = (Object)adaptor.create(DOUBLE_PIPE190);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE190_tree, root_0);
+            	    DOUBLE_PIPE215_tree = (Object)adaptor.create(DOUBLE_PIPE215);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE215_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_and_constr_in_or_constr2869);
-            	    and_constr191=and_constr();
+            	    pushFollow(FOLLOW_and_constr_in_or_constr3121);
+            	    and_constr216=and_constr();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_constr191.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_constr216.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop69;
+            	    break loop75;
                 }
             } while (true);
 
@@ -8449,64 +9357,64 @@
     };
 
     // $ANTLR start and_constr
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:1: and_constr : unary_constr ( DOUBLE_AMPER unary_constr )* ;
     public final and_constr_return and_constr() throws RecognitionException {
         and_constr_return retval = new and_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_AMPER193=null;
-        unary_constr_return unary_constr192 = null;
+        Token DOUBLE_AMPER218=null;
+        unary_constr_return unary_constr217 = null;
 
-        unary_constr_return unary_constr194 = null;
+        unary_constr_return unary_constr219 = null;
 
 
-        Object DOUBLE_AMPER193_tree=null;
+        Object DOUBLE_AMPER218_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:4: unary_constr ( DOUBLE_AMPER unary_constr )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:2: ( unary_constr ( DOUBLE_AMPER unary_constr )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:4: unary_constr ( DOUBLE_AMPER unary_constr )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_unary_constr_in_and_constr2884);
-            unary_constr192=unary_constr();
+            pushFollow(FOLLOW_unary_constr_in_and_constr3136);
+            unary_constr217=unary_constr();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr192.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:17: ( DOUBLE_AMPER unary_constr )*
-            loop70:
+            if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr217.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:17: ( DOUBLE_AMPER unary_constr )*
+            loop76:
             do {
-                int alt70=2;
-                int LA70_0 = input.LA(1);
+                int alt76=2;
+                int LA76_0 = input.LA(1);
 
-                if ( (LA70_0==DOUBLE_AMPER) ) {
-                    alt70=1;
+                if ( (LA76_0==DOUBLE_AMPER) ) {
+                    alt76=1;
                 }
 
 
-                switch (alt70) {
+                switch (alt76) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:651:19: DOUBLE_AMPER unary_constr
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:19: DOUBLE_AMPER unary_constr
             	    {
-            	    DOUBLE_AMPER193=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr2888); if (failed) return retval;
+            	    DOUBLE_AMPER218=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_constr3140); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_AMPER193_tree = (Object)adaptor.create(DOUBLE_AMPER193);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER193_tree, root_0);
+            	    DOUBLE_AMPER218_tree = (Object)adaptor.create(DOUBLE_AMPER218);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER218_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_unary_constr_in_and_constr2891);
-            	    unary_constr194=unary_constr();
+            	    pushFollow(FOLLOW_unary_constr_in_and_constr3143);
+            	    unary_constr219=unary_constr();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr194.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, unary_constr219.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop70;
+            	    break loop76;
                 }
             } while (true);
 
@@ -8536,51 +9444,51 @@
     };
 
     // $ANTLR start unary_constr
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:654:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );
     public final unary_constr_return unary_constr() throws RecognitionException {
         unary_constr_return retval = new unary_constr_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN198=null;
-        Token RIGHT_PAREN200=null;
-        eval_key_return eval_key195 = null;
+        Token LEFT_PAREN223=null;
+        Token RIGHT_PAREN225=null;
+        eval_key_return eval_key220 = null;
 
-        paren_chunk_return paren_chunk196 = null;
+        paren_chunk_return paren_chunk221 = null;
 
-        field_constraint_return field_constraint197 = null;
+        field_constraint_return field_constraint222 = null;
 
-        or_constr_return or_constr199 = null;
+        or_constr_return or_constr224 = null;
 
 
-        Object LEFT_PAREN198_tree=null;
-        Object RIGHT_PAREN200_tree=null;
+        Object LEFT_PAREN223_tree=null;
+        Object RIGHT_PAREN225_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:2: ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN )
-            int alt71=3;
-            int LA71_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:2: ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN )
+            int alt77=3;
+            int LA77_0 = input.LA(1);
 
-            if ( (LA71_0==ID) ) {
-                int LA71_1 = input.LA(2);
+            if ( (LA77_0==ID) ) {
+                int LA77_1 = input.LA(2);
 
-                if ( ((LA71_1>=ID && LA71_1<=DOT)||LA71_1==COLON||(LA71_1>=EQUAL && LA71_1<=GRAVE_ACCENT)||LA71_1==LEFT_SQUARE) ) {
-                    alt71=2;
+                if ( ((LA77_1>=ID && LA77_1<=DOT)||LA77_1==COLON||(LA77_1>=EQUAL && LA77_1<=GRAVE_ACCENT)||LA77_1==LEFT_SQUARE) ) {
+                    alt77=2;
                 }
-                else if ( (LA71_1==LEFT_PAREN) ) {
-                    int LA71_14 = input.LA(3);
+                else if ( (LA77_1==LEFT_PAREN) ) {
+                    int LA77_14 = input.LA(3);
 
                     if ( ((validateIdentifierKey(DroolsSoftKeywords.EVAL))) ) {
-                        alt71=1;
+                        alt77=1;
                     }
                     else if ( (true) ) {
-                        alt71=2;
+                        alt77=2;
                     }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("654:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 71, 14, input);
+                            new NoViableAltException("699:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 14, input);
 
                         throw nvae;
                     }
@@ -8588,70 +9496,70 @@
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("654:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 71, 1, input);
+                        new NoViableAltException("699:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 1, input);
 
                     throw nvae;
                 }
             }
-            else if ( (LA71_0==LEFT_PAREN) ) {
-                alt71=3;
+            else if ( (LA77_0==LEFT_PAREN) ) {
+                alt77=3;
             }
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("654:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 71, 0, input);
+                    new NoViableAltException("699:1: unary_constr options {k=2; } : ( eval_key paren_chunk | field_constraint | LEFT_PAREN or_constr RIGHT_PAREN );", 77, 0, input);
 
                 throw nvae;
             }
-            switch (alt71) {
+            switch (alt77) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:656:4: eval_key paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:4: eval_key paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_eval_key_in_unary_constr2912);
-                    eval_key195=eval_key();
+                    pushFollow(FOLLOW_eval_key_in_unary_constr3164);
+                    eval_key220=eval_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(eval_key195.getTree(), root_0);
-                    pushFollow(FOLLOW_paren_chunk_in_unary_constr2915);
-                    paren_chunk196=paren_chunk();
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(eval_key220.getTree(), root_0);
+                    pushFollow(FOLLOW_paren_chunk_in_unary_constr3167);
+                    paren_chunk221=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk196.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk221.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:657:4: field_constraint
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:702:4: field_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_field_constraint_in_unary_constr2920);
-                    field_constraint197=field_constraint();
+                    pushFollow(FOLLOW_field_constraint_in_unary_constr3172);
+                    field_constraint222=field_constraint();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, field_constraint197.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, field_constraint222.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:658:4: LEFT_PAREN or_constr RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:703:4: LEFT_PAREN or_constr RIGHT_PAREN
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    LEFT_PAREN198=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr2925); if (failed) return retval;
-                    pushFollow(FOLLOW_or_constr_in_unary_constr2928);
-                    or_constr199=or_constr();
+                    LEFT_PAREN223=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_unary_constr3177); if (failed) return retval;
+                    pushFollow(FOLLOW_or_constr_in_unary_constr3180);
+                    or_constr224=or_constr();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, or_constr199.getTree());
-                    RIGHT_PAREN200=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr2930); if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, or_constr224.getTree());
+                    RIGHT_PAREN225=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_unary_constr3182); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    RIGHT_PAREN200_tree = (Object)adaptor.create(RIGHT_PAREN200);
-                    adaptor.addChild(root_0, RIGHT_PAREN200_tree);
+                    RIGHT_PAREN225_tree = (Object)adaptor.create(RIGHT_PAREN225);
+                    adaptor.addChild(root_0, RIGHT_PAREN225_tree);
                     }
 
                     }
@@ -8681,7 +9589,7 @@
     };
 
     // $ANTLR start field_constraint
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:661:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:706:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );
     public final field_constraint_return field_constraint() throws RecognitionException {
         field_constraint_return retval = new field_constraint_return();
         retval.start = input.LT(1);
@@ -8689,17 +9597,17 @@
         Object root_0 = null;
 
         Token arw=null;
-        label_return label201 = null;
+        label_return label226 = null;
 
-        accessor_path_return accessor_path202 = null;
+        accessor_path_return accessor_path227 = null;
 
-        or_restr_connective_return or_restr_connective203 = null;
+        or_restr_connective_return or_restr_connective228 = null;
 
-        paren_chunk_return paren_chunk204 = null;
+        paren_chunk_return paren_chunk229 = null;
 
-        accessor_path_return accessor_path205 = null;
+        accessor_path_return accessor_path230 = null;
 
-        or_restr_connective_return or_restr_connective206 = null;
+        or_restr_connective_return or_restr_connective231 = null;
 
 
         Object arw_tree=null;
@@ -8712,23 +9620,23 @@
         	boolean isArrow = false;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664: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);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:3: ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) )
+            int alt79=2;
+            int LA79_0 = input.LA(1);
 
-            if ( (LA73_0==ID) ) {
-                int LA73_1 = input.LA(2);
+            if ( (LA79_0==ID) ) {
+                int LA79_1 = input.LA(2);
 
-                if ( (LA73_1==COLON) ) {
-                    alt73=1;
+                if ( (LA79_1==COLON) ) {
+                    alt79=1;
                 }
-                else if ( ((LA73_1>=ID && LA73_1<=DOT)||LA73_1==LEFT_PAREN||(LA73_1>=EQUAL && LA73_1<=GRAVE_ACCENT)||LA73_1==LEFT_SQUARE) ) {
-                    alt73=2;
+                else if ( ((LA79_1>=ID && LA79_1<=DOT)||LA79_1==LEFT_PAREN||(LA79_1>=EQUAL && LA79_1<=GRAVE_ACCENT)||LA79_1==LEFT_SQUARE) ) {
+                    alt79=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("661: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("706:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 79, 1, input);
 
                     throw nvae;
                 }
@@ -8736,58 +9644,58 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("661: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("706:1: field_constraint : ( label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )? -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )? -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) ) | accessor_path or_restr_connective -> ^( VT_FIELD accessor_path or_restr_connective ) );", 79, 0, input);
 
                 throw nvae;
             }
-            switch (alt73) {
+            switch (alt79) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:5: label accessor_path ( or_restr_connective | arw= ARROW paren_chunk )?
                     {
-                    pushFollow(FOLLOW_label_in_field_constraint2944);
-                    label201=label();
+                    pushFollow(FOLLOW_label_in_field_constraint3196);
+                    label226=label();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_label.add(label201.getTree());
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint2946);
-                    accessor_path202=accessor_path();
+                    if ( backtracking==0 ) stream_label.add(label226.getTree());
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint3198);
+                    accessor_path227=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path202.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:25: ( or_restr_connective | arw= ARROW paren_chunk )?
-                    int alt72=3;
-                    int LA72_0 = input.LA(1);
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path227.getTree());
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:25: ( or_restr_connective | arw= ARROW paren_chunk )?
+                    int alt78=3;
+                    int LA78_0 = input.LA(1);
 
-                    if ( (LA72_0==ID||LA72_0==LEFT_PAREN||(LA72_0>=EQUAL && LA72_0<=GRAVE_ACCENT)) ) {
-                        alt72=1;
+                    if ( (LA78_0==ID||LA78_0==LEFT_PAREN||(LA78_0>=EQUAL && LA78_0<=GRAVE_ACCENT)) ) {
+                        alt78=1;
                     }
-                    else if ( (LA72_0==ARROW) ) {
-                        alt72=2;
+                    else if ( (LA78_0==ARROW) ) {
+                        alt78=2;
                     }
-                    switch (alt72) {
+                    switch (alt78) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:27: or_restr_connective
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:27: or_restr_connective
                             {
-                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint2950);
-                            or_restr_connective203=or_restr_connective();
+                            pushFollow(FOLLOW_or_restr_connective_in_field_constraint3202);
+                            or_restr_connective228=or_restr_connective();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective203.getTree());
+                            if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective228.getTree());
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:664:49: arw= ARROW paren_chunk
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:49: arw= ARROW paren_chunk
                             {
                             arw=(Token)input.LT(1);
-                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint2956); if (failed) return retval;
+                            match(input,ARROW,FOLLOW_ARROW_in_field_constraint3208); if (failed) return retval;
                             if ( backtracking==0 ) stream_ARROW.add(arw);
 
-                            pushFollow(FOLLOW_paren_chunk_in_field_constraint2958);
-                            paren_chunk204=paren_chunk();
+                            pushFollow(FOLLOW_paren_chunk_in_field_constraint3210);
+                            paren_chunk229=paren_chunk();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk204.getTree());
+                            if ( backtracking==0 ) stream_paren_chunk.add(paren_chunk229.getTree());
                             if ( backtracking==0 ) {
                               isArrow = true;
                             }
@@ -8799,7 +9707,7 @@
 
 
                     // AST REWRITE
-                    // elements: accessor_path, label, paren_chunk, label, or_restr_connective, accessor_path
+                    // elements: paren_chunk, or_restr_connective, accessor_path, accessor_path, label, label
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -8809,15 +9717,15 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 665:3: -> {isArrow}? ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) ) ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                    // 710: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:665:17: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ) )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710: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:665:39: ^( VT_FIELD accessor_path )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:39: ^( VT_FIELD accessor_path )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_2);
@@ -8829,9 +9737,9 @@
 
                         adaptor.addChild(root_0, root_1);
                         }
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:665:66: ( ^( VK_EVAL[$arw] paren_chunk ) )?
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710: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:665:66: ^( VK_EVAL[$arw] paren_chunk )
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:66: ^( VK_EVAL[$arw] paren_chunk )
                             {
                             Object root_1 = (Object)adaptor.nil();
                             root_1 = (Object)adaptor.becomeRoot(adaptor.create(VK_EVAL, arw), root_1);
@@ -8845,21 +9753,21 @@
                         stream_paren_chunk.reset();
 
                     }
-                    else // 666:3: -> ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                    else // 711: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:666:6: ^( VT_BIND_FIELD label ^( VT_FIELD accessor_path ( or_restr_connective )? ) )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711: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:666:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711:28: ^( VT_FIELD accessor_path ( or_restr_connective )? )
                         {
                         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:666:53: ( or_restr_connective )?
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:711:53: ( or_restr_connective )?
                         if ( stream_or_restr_connective.hasNext() ) {
                             adaptor.addChild(root_2, stream_or_restr_connective.next());
 
@@ -8879,21 +9787,21 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:667:4: accessor_path or_restr_connective
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:712:4: accessor_path or_restr_connective
                     {
-                    pushFollow(FOLLOW_accessor_path_in_field_constraint3012);
-                    accessor_path205=accessor_path();
+                    pushFollow(FOLLOW_accessor_path_in_field_constraint3264);
+                    accessor_path230=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path205.getTree());
-                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint3014);
-                    or_restr_connective206=or_restr_connective();
+                    if ( backtracking==0 ) stream_accessor_path.add(accessor_path230.getTree());
+                    pushFollow(FOLLOW_or_restr_connective_in_field_constraint3266);
+                    or_restr_connective231=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective206.getTree());
+                    if ( backtracking==0 ) stream_or_restr_connective.add(or_restr_connective231.getTree());
 
                     // AST REWRITE
-                    // elements: accessor_path, or_restr_connective
+                    // elements: or_restr_connective, accessor_path
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -8903,9 +9811,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 668:3: -> ^( VT_FIELD accessor_path or_restr_connective )
+                    // 713:3: -> ^( VT_FIELD accessor_path or_restr_connective )
                     {
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:668:6: ^( VT_FIELD accessor_path or_restr_connective )
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:6: ^( VT_FIELD accessor_path or_restr_connective )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_FIELD, "VT_FIELD"), root_1);
@@ -8947,7 +9855,7 @@
     };
 
     // $ANTLR start label
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:671:1: label : value= ID COLON -> VT_LABEL[$value] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:1: label : value= ID COLON -> VT_LABEL[$value] ;
     public final label_return label() throws RecognitionException {
         label_return retval = new label_return();
         retval.start = input.LT(1);
@@ -8955,24 +9863,24 @@
         Object root_0 = null;
 
         Token value=null;
-        Token COLON207=null;
+        Token COLON232=null;
 
         Object value_tree=null;
-        Object COLON207_tree=null;
+        Object COLON232_tree=null;
         RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:671:7: (value= ID COLON -> VT_LABEL[$value] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:671:9: value= ID COLON
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:7: (value= ID COLON -> VT_LABEL[$value] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:9: value= ID COLON
             {
             value=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_label3038); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_label3290); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(value);
 
-            COLON207=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_label3040); if (failed) return retval;
-            if ( backtracking==0 ) stream_COLON.add(COLON207);
+            COLON232=(Token)input.LT(1);
+            match(input,COLON,FOLLOW_COLON_in_label3292); if (failed) return retval;
+            if ( backtracking==0 ) stream_COLON.add(COLON232);
 
 
             // AST REWRITE
@@ -8986,7 +9894,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 671:24: -> VT_LABEL[$value]
+            // 716:24: -> VT_LABEL[$value]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_LABEL, value));
 
@@ -9019,58 +9927,58 @@
     };
 
     // $ANTLR start or_restr_connective
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:674:1: or_restr_connective : and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:1: or_restr_connective : and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )* ;
     public final or_restr_connective_return or_restr_connective() throws RecognitionException {
         or_restr_connective_return retval = new or_restr_connective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_PIPE209=null;
-        and_restr_connective_return and_restr_connective208 = null;
+        Token DOUBLE_PIPE234=null;
+        and_restr_connective_return and_restr_connective233 = null;
 
-        and_restr_connective_return and_restr_connective210 = null;
+        and_restr_connective_return and_restr_connective235 = null;
 
 
-        Object DOUBLE_PIPE209_tree=null;
+        Object DOUBLE_PIPE234_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:2: ( and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:4: and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:2: ( and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:4: and_restr_connective ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3056);
-            and_restr_connective208=and_restr_connective();
+            pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3308);
+            and_restr_connective233=and_restr_connective();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective208.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:25: ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*
-            loop74:
+            if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective233.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:25: ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*
+            loop80:
             do {
-                int alt74=2;
-                alt74 = dfa74.predict(input);
-                switch (alt74) {
+                int alt80=2;
+                alt80 = dfa80.predict(input);
+                switch (alt80) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:26: ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:26: ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective
             	    {
-            	    DOUBLE_PIPE209=(Token)input.LT(1);
-            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective3064); if (failed) return retval;
+            	    DOUBLE_PIPE234=(Token)input.LT(1);
+            	    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_or_restr_connective3316); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_PIPE209_tree = (Object)adaptor.create(DOUBLE_PIPE209);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE209_tree, root_0);
+            	    DOUBLE_PIPE234_tree = (Object)adaptor.create(DOUBLE_PIPE234);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_PIPE234_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3067);
-            	    and_restr_connective210=and_restr_connective();
+            	    pushFollow(FOLLOW_and_restr_connective_in_or_restr_connective3319);
+            	    and_restr_connective235=and_restr_connective();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective210.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, and_restr_connective235.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop74;
+            	    break loop80;
                 }
             } while (true);
 
@@ -9100,58 +10008,58 @@
     };
 
     // $ANTLR start and_restr_connective
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:678:1: and_restr_connective : constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:723:1: and_restr_connective : constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )* ;
     public final and_restr_connective_return and_restr_connective() throws RecognitionException {
         and_restr_connective_return retval = new and_restr_connective_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token DOUBLE_AMPER212=null;
-        constraint_expression_return constraint_expression211 = null;
+        Token DOUBLE_AMPER237=null;
+        constraint_expression_return constraint_expression236 = null;
 
-        constraint_expression_return constraint_expression213 = null;
+        constraint_expression_return constraint_expression238 = null;
 
 
-        Object DOUBLE_AMPER212_tree=null;
+        Object DOUBLE_AMPER237_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:2: ( constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:4: constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:2: ( constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:4: constraint_expression ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3082);
-            constraint_expression211=constraint_expression();
+            pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3334);
+            constraint_expression236=constraint_expression();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression211.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:26: ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*
-            loop75:
+            if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression236.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:26: ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*
+            loop81:
             do {
-                int alt75=2;
-                alt75 = dfa75.predict(input);
-                switch (alt75) {
+                int alt81=2;
+                alt81 = dfa81.predict(input);
+                switch (alt81) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:27: ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:27: ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression
             	    {
-            	    DOUBLE_AMPER212=(Token)input.LT(1);
-            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective3090); if (failed) return retval;
+            	    DOUBLE_AMPER237=(Token)input.LT(1);
+            	    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_and_restr_connective3342); if (failed) return retval;
             	    if ( backtracking==0 ) {
-            	    DOUBLE_AMPER212_tree = (Object)adaptor.create(DOUBLE_AMPER212);
-            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER212_tree, root_0);
+            	    DOUBLE_AMPER237_tree = (Object)adaptor.create(DOUBLE_AMPER237);
+            	    root_0 = (Object)adaptor.becomeRoot(DOUBLE_AMPER237_tree, root_0);
             	    }
-            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3093);
-            	    constraint_expression213=constraint_expression();
+            	    pushFollow(FOLLOW_constraint_expression_in_and_restr_connective3345);
+            	    constraint_expression238=constraint_expression();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression213.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, constraint_expression238.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop75;
+            	    break loop81;
                 }
             } while (true);
 
@@ -9181,86 +10089,89 @@
     };
 
     // $ANTLR start constraint_expression
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );
     public final constraint_expression_return constraint_expression() throws RecognitionException {
         constraint_expression_return retval = new constraint_expression_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN216=null;
-        Token RIGHT_PAREN218=null;
-        compound_operator_return compound_operator214 = null;
+        Token LEFT_PAREN241=null;
+        Token RIGHT_PAREN243=null;
+        compound_operator_return compound_operator239 = null;
 
-        simple_operator_return simple_operator215 = null;
+        simple_operator_return simple_operator240 = null;
 
-        or_restr_connective_return or_restr_connective217 = null;
+        or_restr_connective_return or_restr_connective242 = null;
 
 
-        Object LEFT_PAREN216_tree=null;
-        Object RIGHT_PAREN218_tree=null;
+        Object LEFT_PAREN241_tree=null;
+        Object RIGHT_PAREN243_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN )
-            int alt76=3;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:3: ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN )
+            int alt82=3;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                int LA76_1 = input.LA(2);
+                int LA82_1 = input.LA(2);
 
-                if ( (LA76_1==ID) ) {
-                    int LA76_10 = input.LA(3);
+                if ( (LA82_1==ID) ) {
+                    int LA82_10 = input.LA(3);
 
-                    if ( (LA76_10==ID||LA76_10==STRING||(LA76_10>=BOOL && LA76_10<=INT)||(LA76_10>=FLOAT && LA76_10<=NULL)) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                        alt76=2;
-                    }
-                    else if ( (LA76_10==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                        int LA76_16 = input.LA(4);
+                    if ( (LA82_10==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                        int LA82_14 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
-                            alt76=1;
+                            alt82=1;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
-                            alt76=2;
+                            alt82=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 16, input);
+                                new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 14, input);
 
                             throw nvae;
                         }
                     }
-                    else if ( (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 ( (LA82_10==ID||LA82_10==STRING||(LA82_10>=BOOL && LA82_10<=INT)||(LA82_10>=FLOAT && LA82_10<=NULL)) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                        alt82=2;
                     }
+                    else if ( (LA82_10==DOT||(LA82_10>=COMMA && LA82_10<=RIGHT_PAREN)||(LA82_10>=DOUBLE_PIPE && LA82_10<=DOUBLE_AMPER)||LA82_10==LEFT_SQUARE) ) {
+                        alt82=2;
+                    }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 10, input);
+                            new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 10, input);
 
                         throw nvae;
                     }
                 }
-                else if ( (LA76_1==STRING||(LA76_1>=BOOL && LA76_1<=INT)||(LA76_1>=FLOAT && LA76_1<=NULL)) ) {
-                    alt76=2;
+                else if ( (LA82_1==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                    alt82=2;
                 }
-                else if ( (LA76_1==LEFT_PAREN) ) {
+                else if ( (LA82_1==STRING||(LA82_1>=BOOL && LA82_1<=INT)||(LA82_1>=FLOAT && LA82_1<=NULL)) ) {
+                    alt82=2;
+                }
+                else if ( (LA82_1==LEFT_PAREN) ) {
                     switch ( input.LA(3) ) {
                     case ID:
                         {
-                        int LA76_23 = input.LA(4);
+                        int LA82_23 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt76=1;
+                            alt82=1;
                         }
                         else if ( (true) ) {
-                            alt76=2;
+                            alt82=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 23, input);
+                                new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 23, input);
 
                             throw nvae;
                         }
@@ -9272,18 +10183,18 @@
                     case FLOAT:
                     case NULL:
                         {
-                        int LA76_24 = input.LA(4);
+                        int LA82_24 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt76=1;
+                            alt82=1;
                         }
                         else if ( (true) ) {
-                            alt76=2;
+                            alt82=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 24, input);
+                                new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 24, input);
 
                             throw nvae;
                         }
@@ -9291,18 +10202,18 @@
                         break;
                     case LEFT_PAREN:
                         {
-                        int LA76_25 = input.LA(4);
+                        int LA82_25 = input.LA(4);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
-                            alt76=1;
+                            alt82=1;
                         }
                         else if ( (true) ) {
-                            alt76=2;
+                            alt82=2;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 25, input);
+                                new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 25, input);
 
                             throw nvae;
                         }
@@ -9315,6 +10226,7 @@
                     case VT_LABEL:
                     case VT_QUERY_ID:
                     case VT_TEMPLATE_ID:
+                    case VT_TYPE_DECLARE_ID:
                     case VT_RULE_ID:
                     case VT_ENTRYPOINT_ID:
                     case VT_SLOT_ID:
@@ -9324,6 +10236,7 @@
                     case VT_CURLY_CHUNK:
                     case VT_SQUARE_CHUNK:
                     case VT_PAREN_CHUNK:
+                    case VT_BEHAVIOR:
                     case VT_AND_IMPLICIT:
                     case VT_AND_PREFIX:
                     case VT_OR_PREFIX:
@@ -9395,9 +10308,12 @@
                     case END:
                     case COMMA:
                     case RIGHT_PAREN:
+                    case AT:
                     case COLON:
+                    case EQUALS:
                     case DOUBLE_PIPE:
                     case DOUBLE_AMPER:
+                    case OVER:
                     case ARROW:
                     case EQUAL:
                     case GREATER:
@@ -9422,25 +10338,22 @@
                     case C_STYLE_SINGLE_LINE_COMMENT:
                     case MULTI_LINE_COMMENT:
                         {
-                        alt76=2;
+                        alt82=2;
                         }
                         break;
                     default:
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 12, input);
+                            new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 13, input);
 
                         throw nvae;
                     }
 
                 }
-                else if ( (LA76_1==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                    alt76=2;
-                }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 1, input);
+                        new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 1, input);
 
                     throw nvae;
                 }
@@ -9454,66 +10367,66 @@
             case NOT_EQUAL:
             case GRAVE_ACCENT:
                 {
-                alt76=2;
+                alt82=2;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt76=3;
+                alt82=3;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("682:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 76, 0, input);
+                    new NoViableAltException("727:1: constraint_expression options {k=3; } : ( compound_operator | simple_operator | LEFT_PAREN or_restr_connective RIGHT_PAREN );", 82, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt76) {
+            switch (alt82) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:685:5: compound_operator
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:5: compound_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_compound_operator_in_constraint_expression3115);
-                    compound_operator214=compound_operator();
+                    pushFollow(FOLLOW_compound_operator_in_constraint_expression3367);
+                    compound_operator239=compound_operator();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, compound_operator214.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, compound_operator239.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:686:4: simple_operator
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:4: simple_operator
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_simple_operator_in_constraint_expression3120);
-                    simple_operator215=simple_operator();
+                    pushFollow(FOLLOW_simple_operator_in_constraint_expression3372);
+                    simple_operator240=simple_operator();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, simple_operator215.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, simple_operator240.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:687:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:732:4: LEFT_PAREN or_restr_connective RIGHT_PAREN
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    LEFT_PAREN216=(Token)input.LT(1);
-                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression3125); if (failed) return retval;
-                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression3128);
-                    or_restr_connective217=or_restr_connective();
+                    LEFT_PAREN241=(Token)input.LT(1);
+                    match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_constraint_expression3377); if (failed) return retval;
+                    pushFollow(FOLLOW_or_restr_connective_in_constraint_expression3380);
+                    or_restr_connective242=or_restr_connective();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, or_restr_connective217.getTree());
-                    RIGHT_PAREN218=(Token)input.LT(1);
-                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression3130); if (failed) return retval;
+                    if ( backtracking==0 ) adaptor.addChild(root_0, or_restr_connective242.getTree());
+                    RIGHT_PAREN243=(Token)input.LT(1);
+                    match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_constraint_expression3382); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    RIGHT_PAREN218_tree = (Object)adaptor.create(RIGHT_PAREN218);
-                    adaptor.addChild(root_0, RIGHT_PAREN218_tree);
+                    RIGHT_PAREN243_tree = (Object)adaptor.create(RIGHT_PAREN243);
+                    adaptor.addChild(root_0, RIGHT_PAREN243_tree);
                     }
 
                     }
@@ -9543,133 +10456,133 @@
     };
 
     // $ANTLR start simple_operator
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:690:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:1: simple_operator : ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value ;
     public final simple_operator_return simple_operator() throws RecognitionException {
         simple_operator_return retval = new simple_operator_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token EQUAL219=null;
-        Token GREATER220=null;
-        Token GREATER_EQUAL221=null;
-        Token LESS222=null;
-        Token LESS_EQUAL223=null;
-        Token NOT_EQUAL224=null;
-        Token ID230=null;
-        Token GRAVE_ACCENT231=null;
-        Token ID232=null;
-        Token ID239=null;
-        Token GRAVE_ACCENT240=null;
-        Token ID241=null;
-        not_key_return not_key225 = null;
+        Token EQUAL244=null;
+        Token GREATER245=null;
+        Token GREATER_EQUAL246=null;
+        Token LESS247=null;
+        Token LESS_EQUAL248=null;
+        Token NOT_EQUAL249=null;
+        Token ID255=null;
+        Token GRAVE_ACCENT256=null;
+        Token ID257=null;
+        Token ID264=null;
+        Token GRAVE_ACCENT265=null;
+        Token ID266=null;
+        not_key_return not_key250 = null;
 
-        contains_key_return contains_key226 = null;
+        contains_key_return contains_key251 = null;
 
-        soundslike_key_return soundslike_key227 = null;
+        soundslike_key_return soundslike_key252 = null;
 
-        matches_key_return matches_key228 = null;
+        matches_key_return matches_key253 = null;
 
-        memberof_key_return memberof_key229 = null;
+        memberof_key_return memberof_key254 = null;
 
-        square_chunk_return square_chunk233 = null;
+        square_chunk_return square_chunk258 = null;
 
-        contains_key_return contains_key234 = null;
+        contains_key_return contains_key259 = null;
 
-        excludes_key_return excludes_key235 = null;
+        excludes_key_return excludes_key260 = null;
 
-        matches_key_return matches_key236 = null;
+        matches_key_return matches_key261 = null;
 
-        soundslike_key_return soundslike_key237 = null;
+        soundslike_key_return soundslike_key262 = null;
 
-        memberof_key_return memberof_key238 = null;
+        memberof_key_return memberof_key263 = null;
 
-        square_chunk_return square_chunk242 = null;
+        square_chunk_return square_chunk267 = null;
 
-        expression_value_return expression_value243 = null;
+        expression_value_return expression_value268 = null;
 
 
-        Object EQUAL219_tree=null;
-        Object GREATER220_tree=null;
-        Object GREATER_EQUAL221_tree=null;
-        Object LESS222_tree=null;
-        Object LESS_EQUAL223_tree=null;
-        Object NOT_EQUAL224_tree=null;
-        Object ID230_tree=null;
-        Object GRAVE_ACCENT231_tree=null;
-        Object ID232_tree=null;
-        Object ID239_tree=null;
-        Object GRAVE_ACCENT240_tree=null;
-        Object ID241_tree=null;
+        Object EQUAL244_tree=null;
+        Object GREATER245_tree=null;
+        Object GREATER_EQUAL246_tree=null;
+        Object LESS247_tree=null;
+        Object LESS_EQUAL248_tree=null;
+        Object NOT_EQUAL249_tree=null;
+        Object ID255_tree=null;
+        Object GRAVE_ACCENT256_tree=null;
+        Object ID257_tree=null;
+        Object ID264_tree=null;
+        Object GRAVE_ACCENT265_tree=null;
+        Object ID266_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:2: ( ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) expression_value
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
-            int alt78=14;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
+            int alt84=14;
             switch ( input.LA(1) ) {
             case EQUAL:
                 {
-                alt78=1;
+                alt84=1;
                 }
                 break;
             case GREATER:
                 {
-                alt78=2;
+                alt84=2;
                 }
                 break;
             case GREATER_EQUAL:
                 {
-                alt78=3;
+                alt84=3;
                 }
                 break;
             case LESS:
                 {
-                alt78=4;
+                alt84=4;
                 }
                 break;
             case LESS_EQUAL:
                 {
-                alt78=5;
+                alt84=5;
                 }
                 break;
             case NOT_EQUAL:
                 {
-                alt78=6;
+                alt84=6;
                 }
                 break;
             case ID:
                 {
-                int LA78_7 = input.LA(2);
+                int LA84_7 = input.LA(2);
 
-                if ( (LA78_7==ID||LA78_7==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                    alt78=7;
+                if ( (LA84_7==ID||LA84_7==GRAVE_ACCENT) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                    alt84=7;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))) ) {
-                    alt78=8;
+                    alt84=8;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))) ) {
-                    alt78=9;
+                    alt84=9;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.MATCHES))) ) {
-                    alt78=10;
+                    alt84=10;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))) ) {
-                    alt78=11;
+                    alt84=11;
                 }
                 else if ( ((validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))) ) {
-                    alt78=12;
+                    alt84=12;
                 }
                 else if ( (true) ) {
-                    alt78=13;
+                    alt84=13;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("691:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 78, 7, input);
+                        new NoViableAltException("736:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 84, 7, input);
 
                     throw nvae;
                 }
@@ -9677,211 +10590,211 @@
                 break;
             case GRAVE_ACCENT:
                 {
-                alt78=14;
+                alt84=14;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("691:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 78, 0, input);
+                    new NoViableAltException("736:4: ( EQUAL | GREATER | GREATER_EQUAL | LESS | LESS_EQUAL | NOT_EQUAL | not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk ) | contains_key | excludes_key | matches_key | soundslike_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 84, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt78) {
+            switch (alt84) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:691:5: EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:5: EQUAL
                     {
-                    EQUAL219=(Token)input.LT(1);
-                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator3142); if (failed) return retval;
+                    EQUAL244=(Token)input.LT(1);
+                    match(input,EQUAL,FOLLOW_EQUAL_in_simple_operator3394); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    EQUAL219_tree = (Object)adaptor.create(EQUAL219);
-                    root_0 = (Object)adaptor.becomeRoot(EQUAL219_tree, root_0);
+                    EQUAL244_tree = (Object)adaptor.create(EQUAL244);
+                    root_0 = (Object)adaptor.becomeRoot(EQUAL244_tree, root_0);
                     }
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:692:4: GREATER
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:737:4: GREATER
                     {
-                    GREATER220=(Token)input.LT(1);
-                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator3148); if (failed) return retval;
+                    GREATER245=(Token)input.LT(1);
+                    match(input,GREATER,FOLLOW_GREATER_in_simple_operator3400); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    GREATER220_tree = (Object)adaptor.create(GREATER220);
-                    root_0 = (Object)adaptor.becomeRoot(GREATER220_tree, root_0);
+                    GREATER245_tree = (Object)adaptor.create(GREATER245);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER245_tree, root_0);
                     }
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:693:4: GREATER_EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:738:4: GREATER_EQUAL
                     {
-                    GREATER_EQUAL221=(Token)input.LT(1);
-                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator3154); if (failed) return retval;
+                    GREATER_EQUAL246=(Token)input.LT(1);
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_simple_operator3406); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    GREATER_EQUAL221_tree = (Object)adaptor.create(GREATER_EQUAL221);
-                    root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL221_tree, root_0);
+                    GREATER_EQUAL246_tree = (Object)adaptor.create(GREATER_EQUAL246);
+                    root_0 = (Object)adaptor.becomeRoot(GREATER_EQUAL246_tree, root_0);
                     }
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:694:4: LESS
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:4: LESS
                     {
-                    LESS222=(Token)input.LT(1);
-                    match(input,LESS,FOLLOW_LESS_in_simple_operator3160); if (failed) return retval;
+                    LESS247=(Token)input.LT(1);
+                    match(input,LESS,FOLLOW_LESS_in_simple_operator3412); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    LESS222_tree = (Object)adaptor.create(LESS222);
-                    root_0 = (Object)adaptor.becomeRoot(LESS222_tree, root_0);
+                    LESS247_tree = (Object)adaptor.create(LESS247);
+                    root_0 = (Object)adaptor.becomeRoot(LESS247_tree, root_0);
                     }
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:695:4: LESS_EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:4: LESS_EQUAL
                     {
-                    LESS_EQUAL223=(Token)input.LT(1);
-                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3166); if (failed) return retval;
+                    LESS_EQUAL248=(Token)input.LT(1);
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_simple_operator3418); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    LESS_EQUAL223_tree = (Object)adaptor.create(LESS_EQUAL223);
-                    root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL223_tree, root_0);
+                    LESS_EQUAL248_tree = (Object)adaptor.create(LESS_EQUAL248);
+                    root_0 = (Object)adaptor.becomeRoot(LESS_EQUAL248_tree, root_0);
                     }
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:696:4: NOT_EQUAL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:741:4: NOT_EQUAL
                     {
-                    NOT_EQUAL224=(Token)input.LT(1);
-                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3172); if (failed) return retval;
+                    NOT_EQUAL249=(Token)input.LT(1);
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_simple_operator3424); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    NOT_EQUAL224_tree = (Object)adaptor.create(NOT_EQUAL224);
-                    root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL224_tree, root_0);
+                    NOT_EQUAL249_tree = (Object)adaptor.create(NOT_EQUAL249);
+                    root_0 = (Object)adaptor.becomeRoot(NOT_EQUAL249_tree, root_0);
                     }
 
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:4: not_key ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
                     {
-                    pushFollow(FOLLOW_not_key_in_simple_operator3178);
-                    not_key225=not_key();
+                    pushFollow(FOLLOW_not_key_in_simple_operator3430);
+                    not_key250=not_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key225.getTree());
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
-                    int alt77=6;
-                    int LA77_0 = input.LA(1);
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key250.getTree());
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )
+                    int alt83=6;
+                    int LA83_0 = input.LA(1);
 
-                    if ( (LA77_0==ID) ) {
-                        int LA77_1 = input.LA(2);
+                    if ( (LA83_0==ID) ) {
+                        int LA83_1 = input.LA(2);
 
                         if ( ((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))) ) {
-                            alt77=1;
+                            alt83=1;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))) ) {
-                            alt77=2;
+                            alt83=2;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.MATCHES))) ) {
-                            alt77=3;
+                            alt83=3;
                         }
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))) ) {
-                            alt77=4;
+                            alt83=4;
                         }
                         else if ( (true) ) {
-                            alt77=5;
+                            alt83=5;
                         }
                         else {
                             if (backtracking>0) {failed=true; return retval;}
                             NoViableAltException nvae =
-                                new NoViableAltException("697:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 77, 1, input);
+                                new NoViableAltException("742:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 83, 1, input);
 
                             throw nvae;
                         }
                     }
-                    else if ( (LA77_0==GRAVE_ACCENT) ) {
-                        alt77=6;
+                    else if ( (LA83_0==GRAVE_ACCENT) ) {
+                        alt83=6;
                     }
                     else {
                         if (backtracking>0) {failed=true; return retval;}
                         NoViableAltException nvae =
-                            new NoViableAltException("697:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 77, 0, input);
+                            new NoViableAltException("742:12: ( contains_key | soundslike_key | matches_key | memberof_key | ID | GRAVE_ACCENT ID square_chunk )", 83, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt77) {
+                    switch (alt83) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:13: contains_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:13: contains_key
                             {
-                            pushFollow(FOLLOW_contains_key_in_simple_operator3181);
-                            contains_key226=contains_key();
+                            pushFollow(FOLLOW_contains_key_in_simple_operator3433);
+                            contains_key251=contains_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key226.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key251.getTree(), root_0);
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:27: soundslike_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:27: soundslike_key
                             {
-                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3184);
-                            soundslike_key227=soundslike_key();
+                            pushFollow(FOLLOW_soundslike_key_in_simple_operator3436);
+                            soundslike_key252=soundslike_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key227.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key252.getTree(), root_0);
 
                             }
                             break;
                         case 3 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:43: matches_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:43: matches_key
                             {
-                            pushFollow(FOLLOW_matches_key_in_simple_operator3187);
-                            matches_key228=matches_key();
+                            pushFollow(FOLLOW_matches_key_in_simple_operator3439);
+                            matches_key253=matches_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key228.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key253.getTree(), root_0);
 
                             }
                             break;
                         case 4 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:56: memberof_key
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:56: memberof_key
                             {
-                            pushFollow(FOLLOW_memberof_key_in_simple_operator3190);
-                            memberof_key229=memberof_key();
+                            pushFollow(FOLLOW_memberof_key_in_simple_operator3442);
+                            memberof_key254=memberof_key();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key229.getTree(), root_0);
+                            if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key254.getTree(), root_0);
 
                             }
                             break;
                         case 5 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:71: ID
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:71: ID
                             {
-                            ID230=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator3194); if (failed) return retval;
+                            ID255=(Token)input.LT(1);
+                            match(input,ID,FOLLOW_ID_in_simple_operator3446); if (failed) return retval;
                             if ( backtracking==0 ) {
-                            ID230_tree = (Object)adaptor.create(ID230);
-                            root_0 = (Object)adaptor.becomeRoot(ID230_tree, root_0);
+                            ID255_tree = (Object)adaptor.create(ID255);
+                            root_0 = (Object)adaptor.becomeRoot(ID255_tree, root_0);
                             }
 
                             }
                             break;
                         case 6 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:697:77: GRAVE_ACCENT ID square_chunk
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:742:77: GRAVE_ACCENT ID square_chunk
                             {
-                            GRAVE_ACCENT231=(Token)input.LT(1);
-                            match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3199); if (failed) return retval;
-                            ID232=(Token)input.LT(1);
-                            match(input,ID,FOLLOW_ID_in_simple_operator3202); if (failed) return retval;
+                            GRAVE_ACCENT256=(Token)input.LT(1);
+                            match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3451); if (failed) return retval;
+                            ID257=(Token)input.LT(1);
+                            match(input,ID,FOLLOW_ID_in_simple_operator3454); if (failed) return retval;
                             if ( backtracking==0 ) {
-                            ID232_tree = (Object)adaptor.create(ID232);
-                            root_0 = (Object)adaptor.becomeRoot(ID232_tree, root_0);
+                            ID257_tree = (Object)adaptor.create(ID257);
+                            root_0 = (Object)adaptor.becomeRoot(ID257_tree, root_0);
                             }
-                            pushFollow(FOLLOW_square_chunk_in_simple_operator3205);
-                            square_chunk233=square_chunk();
+                            pushFollow(FOLLOW_square_chunk_in_simple_operator3457);
+                            square_chunk258=square_chunk();
                             _fsp--;
                             if (failed) return retval;
-                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk233.getTree());
+                            if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk258.getTree());
 
                             }
                             break;
@@ -9892,99 +10805,99 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:698:4: contains_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:4: contains_key
                     {
-                    pushFollow(FOLLOW_contains_key_in_simple_operator3211);
-                    contains_key234=contains_key();
+                    pushFollow(FOLLOW_contains_key_in_simple_operator3463);
+                    contains_key259=contains_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key234.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(contains_key259.getTree(), root_0);
 
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:699:4: excludes_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:4: excludes_key
                     {
-                    pushFollow(FOLLOW_excludes_key_in_simple_operator3217);
-                    excludes_key235=excludes_key();
+                    pushFollow(FOLLOW_excludes_key_in_simple_operator3469);
+                    excludes_key260=excludes_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key235.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(excludes_key260.getTree(), root_0);
 
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:700:4: matches_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:4: matches_key
                     {
-                    pushFollow(FOLLOW_matches_key_in_simple_operator3223);
-                    matches_key236=matches_key();
+                    pushFollow(FOLLOW_matches_key_in_simple_operator3475);
+                    matches_key261=matches_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key236.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(matches_key261.getTree(), root_0);
 
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:701:4: soundslike_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:746:4: soundslike_key
                     {
-                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3229);
-                    soundslike_key237=soundslike_key();
+                    pushFollow(FOLLOW_soundslike_key_in_simple_operator3481);
+                    soundslike_key262=soundslike_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key237.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(soundslike_key262.getTree(), root_0);
 
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:702:4: memberof_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:747:4: memberof_key
                     {
-                    pushFollow(FOLLOW_memberof_key_in_simple_operator3235);
-                    memberof_key238=memberof_key();
+                    pushFollow(FOLLOW_memberof_key_in_simple_operator3487);
+                    memberof_key263=memberof_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key238.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(memberof_key263.getTree(), root_0);
 
                     }
                     break;
                 case 13 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:703:4: ID
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:748:4: ID
                     {
-                    ID239=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator3241); if (failed) return retval;
+                    ID264=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_simple_operator3493); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    ID239_tree = (Object)adaptor.create(ID239);
-                    root_0 = (Object)adaptor.becomeRoot(ID239_tree, root_0);
+                    ID264_tree = (Object)adaptor.create(ID264);
+                    root_0 = (Object)adaptor.becomeRoot(ID264_tree, root_0);
                     }
 
                     }
                     break;
                 case 14 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:704:4: GRAVE_ACCENT ID square_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:4: GRAVE_ACCENT ID square_chunk
                     {
-                    GRAVE_ACCENT240=(Token)input.LT(1);
-                    match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3247); if (failed) return retval;
-                    ID241=(Token)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_simple_operator3250); if (failed) return retval;
+                    GRAVE_ACCENT265=(Token)input.LT(1);
+                    match(input,GRAVE_ACCENT,FOLLOW_GRAVE_ACCENT_in_simple_operator3499); if (failed) return retval;
+                    ID266=(Token)input.LT(1);
+                    match(input,ID,FOLLOW_ID_in_simple_operator3502); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    ID241_tree = (Object)adaptor.create(ID241);
-                    root_0 = (Object)adaptor.becomeRoot(ID241_tree, root_0);
+                    ID266_tree = (Object)adaptor.create(ID266);
+                    root_0 = (Object)adaptor.becomeRoot(ID266_tree, root_0);
                     }
-                    pushFollow(FOLLOW_square_chunk_in_simple_operator3253);
-                    square_chunk242=square_chunk();
+                    pushFollow(FOLLOW_square_chunk_in_simple_operator3505);
+                    square_chunk267=square_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk242.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk267.getTree());
 
                     }
                     break;
 
             }
 
-            pushFollow(FOLLOW_expression_value_in_simple_operator3257);
-            expression_value243=expression_value();
+            pushFollow(FOLLOW_expression_value_in_simple_operator3509);
+            expression_value268=expression_value();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value243.getTree());
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value268.getTree());
 
             }
 
@@ -10011,54 +10924,54 @@
     };
 
     // $ANTLR start compound_operator
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:709:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:754:1: compound_operator : ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN ;
     public final compound_operator_return compound_operator() throws RecognitionException {
         compound_operator_return retval = new compound_operator_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token LEFT_PAREN247=null;
-        Token COMMA249=null;
-        Token RIGHT_PAREN251=null;
-        in_key_return in_key244 = null;
+        Token LEFT_PAREN272=null;
+        Token COMMA274=null;
+        Token RIGHT_PAREN276=null;
+        in_key_return in_key269 = null;
 
-        not_key_return not_key245 = null;
+        not_key_return not_key270 = null;
 
-        in_key_return in_key246 = null;
+        in_key_return in_key271 = null;
 
-        expression_value_return expression_value248 = null;
+        expression_value_return expression_value273 = null;
 
-        expression_value_return expression_value250 = null;
+        expression_value_return expression_value275 = null;
 
 
-        Object LEFT_PAREN247_tree=null;
-        Object COMMA249_tree=null;
-        Object RIGHT_PAREN251_tree=null;
+        Object LEFT_PAREN272_tree=null;
+        Object COMMA274_tree=null;
+        Object RIGHT_PAREN276_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710: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:710:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:2: ( ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:4: ( in_key | not_key in_key ) LEFT_PAREN expression_value ( COMMA expression_value )* RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:4: ( in_key | not_key in_key )
-            int alt79=2;
-            int LA79_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:4: ( in_key | not_key in_key )
+            int alt85=2;
+            int LA85_0 = input.LA(1);
 
-            if ( (LA79_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IN))||(validateIdentifierKey(DroolsSoftKeywords.NOT))))) {
-                int LA79_1 = input.LA(2);
+            if ( (LA85_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IN))||(validateIdentifierKey(DroolsSoftKeywords.NOT))))) {
+                int LA85_1 = input.LA(2);
 
-                if ( (LA79_1==ID) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
-                    alt79=2;
+                if ( (LA85_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.IN)))) {
+                    alt85=1;
                 }
-                else if ( (LA79_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.IN)))) {
-                    alt79=1;
+                else if ( (LA85_1==ID) && ((validateIdentifierKey(DroolsSoftKeywords.NOT)))) {
+                    alt85=2;
                 }
                 else {
                     if (backtracking>0) {failed=true; return retval;}
                     NoViableAltException nvae =
-                        new NoViableAltException("710:4: ( in_key | not_key in_key )", 79, 1, input);
+                        new NoViableAltException("755:4: ( in_key | not_key in_key )", 85, 1, input);
 
                     throw nvae;
                 }
@@ -10066,84 +10979,84 @@
             else {
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("710:4: ( in_key | not_key in_key )", 79, 0, input);
+                    new NoViableAltException("755:4: ( in_key | not_key in_key )", 85, 0, input);
 
                 throw nvae;
             }
-            switch (alt79) {
+            switch (alt85) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:6: in_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:6: in_key
                     {
-                    pushFollow(FOLLOW_in_key_in_compound_operator3272);
-                    in_key244=in_key();
+                    pushFollow(FOLLOW_in_key_in_compound_operator3524);
+                    in_key269=in_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key244.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key269.getTree(), root_0);
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:16: not_key in_key
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:16: not_key in_key
                     {
-                    pushFollow(FOLLOW_not_key_in_compound_operator3277);
-                    not_key245=not_key();
+                    pushFollow(FOLLOW_not_key_in_compound_operator3529);
+                    not_key270=not_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key245.getTree());
-                    pushFollow(FOLLOW_in_key_in_compound_operator3279);
-                    in_key246=in_key();
+                    if ( backtracking==0 ) adaptor.addChild(root_0, not_key270.getTree());
+                    pushFollow(FOLLOW_in_key_in_compound_operator3531);
+                    in_key271=in_key();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key246.getTree(), root_0);
+                    if ( backtracking==0 ) root_0 = (Object)adaptor.becomeRoot(in_key271.getTree(), root_0);
 
                     }
                     break;
 
             }
 
-            LEFT_PAREN247=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3284); if (failed) return retval;
-            pushFollow(FOLLOW_expression_value_in_compound_operator3287);
-            expression_value248=expression_value();
+            LEFT_PAREN272=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_compound_operator3536); if (failed) return retval;
+            pushFollow(FOLLOW_expression_value_in_compound_operator3539);
+            expression_value273=expression_value();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value248.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:63: ( COMMA expression_value )*
-            loop80:
+            if ( backtracking==0 ) adaptor.addChild(root_0, expression_value273.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:63: ( COMMA expression_value )*
+            loop86:
             do {
-                int alt80=2;
-                int LA80_0 = input.LA(1);
+                int alt86=2;
+                int LA86_0 = input.LA(1);
 
-                if ( (LA80_0==COMMA) ) {
-                    alt80=1;
+                if ( (LA86_0==COMMA) ) {
+                    alt86=1;
                 }
 
 
-                switch (alt80) {
+                switch (alt86) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:710:65: COMMA expression_value
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:755:65: COMMA expression_value
             	    {
-            	    COMMA249=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3291); if (failed) return retval;
-            	    pushFollow(FOLLOW_expression_value_in_compound_operator3294);
-            	    expression_value250=expression_value();
+            	    COMMA274=(Token)input.LT(1);
+            	    match(input,COMMA,FOLLOW_COMMA_in_compound_operator3543); if (failed) return retval;
+            	    pushFollow(FOLLOW_expression_value_in_compound_operator3546);
+            	    expression_value275=expression_value();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value250.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, expression_value275.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop80;
+            	    break loop86;
                 }
             } while (true);
 
-            RIGHT_PAREN251=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3299); if (failed) return retval;
+            RIGHT_PAREN276=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_compound_operator3551); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_PAREN251_tree = (Object)adaptor.create(RIGHT_PAREN251);
-            adaptor.addChild(root_0, RIGHT_PAREN251_tree);
+            RIGHT_PAREN276_tree = (Object)adaptor.create(RIGHT_PAREN276);
+            adaptor.addChild(root_0, RIGHT_PAREN276_tree);
             }
 
             }
@@ -10171,28 +11084,28 @@
     };
 
     // $ANTLR start expression_value
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:713:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:758:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );
     public final expression_value_return expression_value() throws RecognitionException {
         expression_value_return retval = new expression_value_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        accessor_path_return accessor_path252 = null;
+        accessor_path_return accessor_path277 = null;
 
-        literal_constraint_return literal_constraint253 = null;
+        literal_constraint_return literal_constraint278 = null;
 
-        paren_chunk_return paren_chunk254 = null;
+        paren_chunk_return paren_chunk279 = null;
 
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:2: ( accessor_path | literal_constraint | paren_chunk )
-            int alt81=3;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:2: ( accessor_path | literal_constraint | paren_chunk )
+            int alt87=3;
             switch ( input.LA(1) ) {
             case ID:
                 {
-                alt81=1;
+                alt87=1;
                 }
                 break;
             case STRING:
@@ -10201,59 +11114,59 @@
             case FLOAT:
             case NULL:
                 {
-                alt81=2;
+                alt87=2;
                 }
                 break;
             case LEFT_PAREN:
                 {
-                alt81=3;
+                alt87=3;
                 }
                 break;
             default:
                 if (backtracking>0) {failed=true; return retval;}
                 NoViableAltException nvae =
-                    new NoViableAltException("713:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 81, 0, input);
+                    new NoViableAltException("758:1: expression_value : ( accessor_path | literal_constraint | paren_chunk );", 87, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt81) {
+            switch (alt87) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:714:4: accessor_path
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:759:4: accessor_path
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_accessor_path_in_expression_value3310);
-                    accessor_path252=accessor_path();
+                    pushFollow(FOLLOW_accessor_path_in_expression_value3562);
+                    accessor_path277=accessor_path();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path252.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, accessor_path277.getTree());
 
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:715:4: literal_constraint
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:760:4: literal_constraint
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_literal_constraint_in_expression_value3315);
-                    literal_constraint253=literal_constraint();
+                    pushFollow(FOLLOW_literal_constraint_in_expression_value3567);
+                    literal_constraint278=literal_constraint();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint253.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, literal_constraint278.getTree());
 
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:716:4: paren_chunk
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:4: paren_chunk
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_paren_chunk_in_expression_value3321);
-                    paren_chunk254=paren_chunk();
+                    pushFollow(FOLLOW_paren_chunk_in_expression_value3573);
+                    paren_chunk279=paren_chunk();
                     _fsp--;
                     if (failed) return retval;
-                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk254.getTree());
+                    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk279.getTree());
 
                     }
                     break;
@@ -10282,27 +11195,27 @@
     };
 
     // $ANTLR start literal_constraint
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:719:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:1: literal_constraint : ( STRING | INT | FLOAT | BOOL | NULL );
     public final literal_constraint_return literal_constraint() throws RecognitionException {
         literal_constraint_return retval = new literal_constraint_return();
         retval.start = input.LT(1);
 
         Object root_0 = null;
 
-        Token set255=null;
+        Token set280=null;
 
-        Object set255_tree=null;
+        Object set280_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:2: ( STRING | INT | FLOAT | BOOL | NULL )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:765:2: ( STRING | INT | FLOAT | BOOL | NULL )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:
             {
             root_0 = (Object)adaptor.nil();
 
-            set255=(Token)input.LT(1);
+            set280=(Token)input.LT(1);
             if ( input.LA(1)==STRING||(input.LA(1)>=BOOL && input.LA(1)<=INT)||(input.LA(1)>=FLOAT && input.LA(1)<=NULL) ) {
                 input.consume();
-                if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set255));
+                if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set280));
                 errorRecovery=false;failed=false;
             }
             else {
@@ -10338,7 +11251,7 @@
     };
 
     // $ANTLR start pattern_type
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:727:1: pattern_type : id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:1: pattern_type : id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) ;
     public final pattern_type_return pattern_type() throws RecognitionException {
         pattern_type_return retval = new pattern_type_return();
         retval.start = input.LT(1);
@@ -10347,7 +11260,7 @@
 
         Token id=null;
         List list_id=null;
-        dimension_definition_return dimension_definition256 = null;
+        dimension_definition_return dimension_definition281 = null;
 
 
         Object id_tree=null;
@@ -10355,40 +11268,40 @@
         RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT");
         RewriteRuleSubtreeStream stream_dimension_definition=new RewriteRuleSubtreeStream(adaptor,"rule dimension_definition");
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:2: (id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:4: id+= ID (id+= DOT id+= ID )* ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:2: (id+= ID (id+= DOT id+= ID )* ( dimension_definition )* -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:4: id+= ID (id+= DOT id+= ID )* ( dimension_definition )*
             {
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_pattern_type3365); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_pattern_type3617); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
             if (list_id==null) list_id=new ArrayList();
             list_id.add(id);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:11: (id+= DOT id+= ID )*
-            loop82:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:11: (id+= DOT id+= ID )*
+            loop88:
             do {
-                int alt82=2;
-                int LA82_0 = input.LA(1);
+                int alt88=2;
+                int LA88_0 = input.LA(1);
 
-                if ( (LA82_0==DOT) ) {
-                    alt82=1;
+                if ( (LA88_0==DOT) ) {
+                    alt88=1;
                 }
 
 
-                switch (alt82) {
+                switch (alt88) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:728:13: id+= DOT id+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:773:13: id+= DOT id+= ID
             	    {
             	    id=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_pattern_type3371); if (failed) return retval;
+            	    match(input,DOT,FOLLOW_DOT_in_pattern_type3623); if (failed) return retval;
             	    if ( backtracking==0 ) stream_DOT.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
             	    list_id.add(id);
 
             	    id=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_pattern_type3375); if (failed) return retval;
+            	    match(input,ID,FOLLOW_ID_in_pattern_type3627); if (failed) return retval;
             	    if ( backtracking==0 ) stream_ID.add(id);
 
             	    if (list_id==null) list_id=new ArrayList();
@@ -10399,39 +11312,39 @@
             	    break;
 
             	default :
-            	    break loop82;
+            	    break loop88;
                 }
             } while (true);
 
             if ( backtracking==0 ) {
               	setParaphrasesValue(DroolsParaphareseTypes.PATTERN, buildStringFromTokens(list_id));	
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:6: ( dimension_definition )*
-            loop83:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:6: ( dimension_definition )*
+            loop89:
             do {
-                int alt83=2;
-                int LA83_0 = input.LA(1);
+                int alt89=2;
+                int LA89_0 = input.LA(1);
 
-                if ( (LA83_0==LEFT_SQUARE) ) {
-                    alt83=1;
+                if ( (LA89_0==LEFT_SQUARE) ) {
+                    alt89=1;
                 }
 
 
-                switch (alt83) {
+                switch (alt89) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:730:6: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:6: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type3390);
-            	    dimension_definition256=dimension_definition();
+            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type3642);
+            	    dimension_definition281=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition256.getTree());
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition281.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop83;
+            	    break loop89;
                 }
             } while (true);
 
@@ -10447,9 +11360,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 731:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
+            // 776:3: -> ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:6: ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:6: ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_PATTERN_TYPE, "VT_PATTERN_TYPE"), root_1);
@@ -10462,7 +11375,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:731:28: ( dimension_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:776:28: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -10501,97 +11414,97 @@
     };
 
     // $ANTLR start data_type
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:734:1: data_type : ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:779: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 ID257=null;
-        Token DOT258=null;
-        Token ID259=null;
-        dimension_definition_return dimension_definition260 = null;
+        Token ID282=null;
+        Token DOT283=null;
+        Token ID284=null;
+        dimension_definition_return dimension_definition285 = null;
 
 
-        Object ID257_tree=null;
-        Object DOT258_tree=null;
-        Object ID259_tree=null;
+        Object ID282_tree=null;
+        Object DOT283_tree=null;
+        Object ID284_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:735: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:735:4: ID ( DOT ID )* ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:2: ( ID ( DOT ID )* ( dimension_definition )* -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:4: ID ( DOT ID )* ( dimension_definition )*
             {
-            ID257=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_data_type3416); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID257);
+            ID282=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_data_type3668); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID282);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:7: ( DOT ID )*
-            loop84:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:7: ( DOT ID )*
+            loop90:
             do {
-                int alt84=2;
-                int LA84_0 = input.LA(1);
+                int alt90=2;
+                int LA90_0 = input.LA(1);
 
-                if ( (LA84_0==DOT) ) {
-                    alt84=1;
+                if ( (LA90_0==DOT) ) {
+                    alt90=1;
                 }
 
 
-                switch (alt84) {
+                switch (alt90) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:9: DOT ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:9: DOT ID
             	    {
-            	    DOT258=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_data_type3420); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT258);
+            	    DOT283=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_data_type3672); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT283);
 
-            	    ID259=(Token)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_data_type3422); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_ID.add(ID259);
+            	    ID284=(Token)input.LT(1);
+            	    match(input,ID,FOLLOW_ID_in_data_type3674); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_ID.add(ID284);
 
 
             	    }
             	    break;
 
             	default :
-            	    break loop84;
+            	    break loop90;
                 }
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:19: ( dimension_definition )*
-            loop85:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:19: ( dimension_definition )*
+            loop91:
             do {
-                int alt85=2;
-                int LA85_0 = input.LA(1);
+                int alt91=2;
+                int LA91_0 = input.LA(1);
 
-                if ( (LA85_0==LEFT_SQUARE) ) {
-                    alt85=1;
+                if ( (LA91_0==LEFT_SQUARE) ) {
+                    alt91=1;
                 }
 
 
-                switch (alt85) {
+                switch (alt91) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:735:19: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:780:19: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_data_type3427);
-            	    dimension_definition260=dimension_definition();
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type3679);
+            	    dimension_definition285=dimension_definition();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition260.getTree());
+            	    if ( backtracking==0 ) stream_dimension_definition.add(dimension_definition285.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop85;
+            	    break loop91;
                 }
             } while (true);
 
 
             // AST REWRITE
-            // elements: ID, dimension_definition
+            // elements: dimension_definition, ID
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -10601,9 +11514,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 736:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+            // 781:3: -> ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:6: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:6: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_DATA_TYPE, "VT_DATA_TYPE"), root_1);
@@ -10616,7 +11529,7 @@
 
                 }
                 stream_ID.reset();
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:736:25: ( dimension_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:781:25: ( dimension_definition )*
                 while ( stream_dimension_definition.hasNext() ) {
                     adaptor.addChild(root_1, stream_dimension_definition.next());
 
@@ -10655,36 +11568,36 @@
     };
 
     // $ANTLR start dimension_definition
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:739:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:784: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_SQUARE261=null;
-        Token RIGHT_SQUARE262=null;
+        Token LEFT_SQUARE286=null;
+        Token RIGHT_SQUARE287=null;
 
-        Object LEFT_SQUARE261_tree=null;
-        Object RIGHT_SQUARE262_tree=null;
+        Object LEFT_SQUARE286_tree=null;
+        Object RIGHT_SQUARE287_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:2: ( LEFT_SQUARE RIGHT_SQUARE )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:740:4: LEFT_SQUARE RIGHT_SQUARE
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:785:4: LEFT_SQUARE RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_SQUARE261=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3453); if (failed) return retval;
+            LEFT_SQUARE286=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition3705); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_SQUARE261_tree = (Object)adaptor.create(LEFT_SQUARE261);
-            adaptor.addChild(root_0, LEFT_SQUARE261_tree);
+            LEFT_SQUARE286_tree = (Object)adaptor.create(LEFT_SQUARE286);
+            adaptor.addChild(root_0, LEFT_SQUARE286_tree);
             }
-            RIGHT_SQUARE262=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3455); if (failed) return retval;
+            RIGHT_SQUARE287=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition3707); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_SQUARE262_tree = (Object)adaptor.create(RIGHT_SQUARE262);
-            adaptor.addChild(root_0, RIGHT_SQUARE262_tree);
+            RIGHT_SQUARE287_tree = (Object)adaptor.create(RIGHT_SQUARE287);
+            adaptor.addChild(root_0, RIGHT_SQUARE287_tree);
             }
 
             }
@@ -10712,61 +11625,61 @@
     };
 
     // $ANTLR start accessor_path
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:743:1: accessor_path : accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:788: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 DOT264=null;
-        accessor_element_return accessor_element263 = null;
+        Token DOT289=null;
+        accessor_element_return accessor_element288 = null;
 
-        accessor_element_return accessor_element265 = null;
+        accessor_element_return accessor_element290 = null;
 
 
-        Object DOT264_tree=null;
+        Object DOT289_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:744: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:744:4: accessor_element ( DOT accessor_element )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:2: ( accessor_element ( DOT accessor_element )* -> ^( VT_ACCESSOR_PATH ( accessor_element )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:4: accessor_element ( DOT accessor_element )*
             {
-            pushFollow(FOLLOW_accessor_element_in_accessor_path3466);
-            accessor_element263=accessor_element();
+            pushFollow(FOLLOW_accessor_element_in_accessor_path3718);
+            accessor_element288=accessor_element();
             _fsp--;
             if (failed) return retval;
-            if ( backtracking==0 ) stream_accessor_element.add(accessor_element263.getTree());
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:21: ( DOT accessor_element )*
-            loop86:
+            if ( backtracking==0 ) stream_accessor_element.add(accessor_element288.getTree());
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:21: ( DOT accessor_element )*
+            loop92:
             do {
-                int alt86=2;
-                int LA86_0 = input.LA(1);
+                int alt92=2;
+                int LA92_0 = input.LA(1);
 
-                if ( (LA86_0==DOT) ) {
-                    alt86=1;
+                if ( (LA92_0==DOT) ) {
+                    alt92=1;
                 }
 
 
-                switch (alt86) {
+                switch (alt92) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:744:23: DOT accessor_element
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789:23: DOT accessor_element
             	    {
-            	    DOT264=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3470); if (failed) return retval;
-            	    if ( backtracking==0 ) stream_DOT.add(DOT264);
+            	    DOT289=(Token)input.LT(1);
+            	    match(input,DOT,FOLLOW_DOT_in_accessor_path3722); if (failed) return retval;
+            	    if ( backtracking==0 ) stream_DOT.add(DOT289);
 
-            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3472);
-            	    accessor_element265=accessor_element();
+            	    pushFollow(FOLLOW_accessor_element_in_accessor_path3724);
+            	    accessor_element290=accessor_element();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element265.getTree());
+            	    if ( backtracking==0 ) stream_accessor_element.add(accessor_element290.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop86;
+            	    break loop92;
                 }
             } while (true);
 
@@ -10782,9 +11695,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 745:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+            // 790:2: -> ^( VT_ACCESSOR_PATH ( accessor_element )+ )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:745:5: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:790:5: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(VT_ACCESSOR_PATH, "VT_ACCESSOR_PATH"), root_1);
@@ -10830,60 +11743,60 @@
     };
 
     // $ANTLR start accessor_element
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:748:1: accessor_element : ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:793: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 ID266=null;
-        square_chunk_return square_chunk267 = null;
+        Token ID291=null;
+        square_chunk_return square_chunk292 = null;
 
 
-        Object ID266_tree=null;
+        Object ID291_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:749: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:749:4: ID ( square_chunk )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:2: ( ID ( square_chunk )* -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:4: ID ( square_chunk )*
             {
-            ID266=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accessor_element3496); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID266);
+            ID291=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_accessor_element3748); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID291);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:7: ( square_chunk )*
-            loop87:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:7: ( square_chunk )*
+            loop93:
             do {
-                int alt87=2;
-                int LA87_0 = input.LA(1);
+                int alt93=2;
+                int LA93_0 = input.LA(1);
 
-                if ( (LA87_0==LEFT_SQUARE) ) {
-                    alt87=1;
+                if ( (LA93_0==LEFT_SQUARE) ) {
+                    alt93=1;
                 }
 
 
-                switch (alt87) {
+                switch (alt93) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:749:7: square_chunk
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:7: square_chunk
             	    {
-            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3498);
-            	    square_chunk267=square_chunk();
+            	    pushFollow(FOLLOW_square_chunk_in_accessor_element3750);
+            	    square_chunk292=square_chunk();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk267.getTree());
+            	    if ( backtracking==0 ) stream_square_chunk.add(square_chunk292.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop87;
+            	    break loop93;
                 }
             } while (true);
 
 
             // AST REWRITE
-            // elements: square_chunk, ID
+            // elements: ID, square_chunk
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -10893,15 +11806,15 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 750:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+            // 795:2: -> ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
             {
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:750:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:795:5: ^( VT_ACCESSOR_ELEMENT ID ( square_chunk )* )
                 {
                 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:750:30: ( square_chunk )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:795:30: ( square_chunk )*
                 while ( stream_square_chunk.hasNext() ) {
                     adaptor.addChild(root_1, stream_square_chunk.next());
 
@@ -10940,7 +11853,7 @@
     };
 
     // $ANTLR start rhs_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:753:1: rhs_chunk : rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798: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);
@@ -10955,10 +11868,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:756: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:756:5: rc= rhs_chunk_data
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:801:3: (rc= rhs_chunk_data -> VT_RHS_CHUNK[$rc.start,text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:801:5: rc= rhs_chunk_data
             {
-            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3527);
+            pushFollow(FOLLOW_rhs_chunk_data_in_rhs_chunk3779);
             rc=rhs_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -10978,7 +11891,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 757:2: -> VT_RHS_CHUNK[$rc.start,text]
+            // 802:2: -> VT_RHS_CHUNK[$rc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_RHS_CHUNK, ((Token)rc.start), text));
 
@@ -11011,61 +11924,61 @@
     };
 
     // $ANTLR start rhs_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:760:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:1: rhs_chunk_data : THEN (~ END )* END ( SEMICOLON )? ;
     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 THEN268=null;
-        Token set269=null;
-        Token END270=null;
-        Token SEMICOLON271=null;
+        Token THEN293=null;
+        Token set294=null;
+        Token END295=null;
+        Token SEMICOLON296=null;
 
-        Object THEN268_tree=null;
-        Object set269_tree=null;
-        Object END270_tree=null;
-        Object SEMICOLON271_tree=null;
+        Object THEN293_tree=null;
+        Object set294_tree=null;
+        Object END295_tree=null;
+        Object SEMICOLON296_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:2: ( THEN (~ END )* END ( SEMICOLON )? )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:4: THEN (~ END )* END ( SEMICOLON )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:2: ( THEN (~ END )* END ( SEMICOLON )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:4: THEN (~ END )* END ( SEMICOLON )?
             {
             root_0 = (Object)adaptor.nil();
 
-            THEN268=(Token)input.LT(1);
-            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3546); if (failed) return retval;
+            THEN293=(Token)input.LT(1);
+            match(input,THEN,FOLLOW_THEN_in_rhs_chunk_data3798); if (failed) return retval;
             if ( backtracking==0 ) {
-            THEN268_tree = (Object)adaptor.create(THEN268);
-            adaptor.addChild(root_0, THEN268_tree);
+            THEN293_tree = (Object)adaptor.create(THEN293);
+            adaptor.addChild(root_0, THEN293_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:9: (~ END )*
-            loop88:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:9: (~ END )*
+            loop94:
             do {
-                int alt88=2;
-                int LA88_0 = input.LA(1);
+                int alt94=2;
+                int LA94_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 ( ((LA94_0>=VT_COMPILATION_UNIT && LA94_0<=DOT_STAR)||(LA94_0>=STRING && LA94_0<=MULTI_LINE_COMMENT)) ) {
+                    alt94=1;
                 }
 
 
-                switch (alt88) {
+                switch (alt94) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:11: ~ END
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:11: ~ END
             	    {
-            	    set269=(Token)input.LT(1);
+            	    set294=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=DOT_STAR)||(input.LA(1)>=STRING && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set269));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set294));
             	        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_data3550);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rhs_chunk_data3802);    throw mse;
             	    }
 
 
@@ -11073,32 +11986,32 @@
             	    break;
 
             	default :
-            	    break loop88;
+            	    break loop94;
                 }
             } while (true);
 
-            END270=(Token)input.LT(1);
-            match(input,END,FOLLOW_END_in_rhs_chunk_data3556); if (failed) return retval;
+            END295=(Token)input.LT(1);
+            match(input,END,FOLLOW_END_in_rhs_chunk_data3808); if (failed) return retval;
             if ( backtracking==0 ) {
-            END270_tree = (Object)adaptor.create(END270);
-            adaptor.addChild(root_0, END270_tree);
+            END295_tree = (Object)adaptor.create(END295);
+            adaptor.addChild(root_0, END295_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:23: ( SEMICOLON )?
-            int alt89=2;
-            int LA89_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:23: ( SEMICOLON )?
+            int alt95=2;
+            int LA95_0 = input.LA(1);
 
-            if ( (LA89_0==SEMICOLON) ) {
-                alt89=1;
+            if ( (LA95_0==SEMICOLON) ) {
+                alt95=1;
             }
-            switch (alt89) {
+            switch (alt95) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:761:23: SEMICOLON
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:806:23: SEMICOLON
                     {
-                    SEMICOLON271=(Token)input.LT(1);
-                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3558); if (failed) return retval;
+                    SEMICOLON296=(Token)input.LT(1);
+                    match(input,SEMICOLON,FOLLOW_SEMICOLON_in_rhs_chunk_data3810); if (failed) return retval;
                     if ( backtracking==0 ) {
-                    SEMICOLON271_tree = (Object)adaptor.create(SEMICOLON271);
-                    adaptor.addChild(root_0, SEMICOLON271_tree);
+                    SEMICOLON296_tree = (Object)adaptor.create(SEMICOLON296);
+                    adaptor.addChild(root_0, SEMICOLON296_tree);
                     }
 
                     }
@@ -11132,7 +12045,7 @@
     };
 
     // $ANTLR start curly_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:764:1: curly_chunk : cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:809: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);
@@ -11147,10 +12060,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:767: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:767:5: cc= curly_chunk_data
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:3: (cc= curly_chunk_data -> VT_CURLY_CHUNK[$cc.start,text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:5: cc= curly_chunk_data
             {
-            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3575);
+            pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk3827);
             cc=curly_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -11170,7 +12083,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 768:2: -> VT_CURLY_CHUNK[$cc.start,text]
+            // 813:2: -> VT_CURLY_CHUNK[$cc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_CURLY_CHUNK, ((Token)cc.start), text));
 
@@ -11203,91 +12116,91 @@
     };
 
     // $ANTLR start curly_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:771:1: curly_chunk_data : LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:816: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_CURLY272=null;
-        Token set273=null;
-        Token RIGHT_CURLY275=null;
-        curly_chunk_data_return curly_chunk_data274 = null;
+        Token LEFT_CURLY297=null;
+        Token set298=null;
+        Token RIGHT_CURLY300=null;
+        curly_chunk_data_return curly_chunk_data299 = null;
 
 
-        Object LEFT_CURLY272_tree=null;
-        Object set273_tree=null;
-        Object RIGHT_CURLY275_tree=null;
+        Object LEFT_CURLY297_tree=null;
+        Object set298_tree=null;
+        Object RIGHT_CURLY300_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772: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:772:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:817:2: ( LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:817:4: LEFT_CURLY (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )* RIGHT_CURLY
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_CURLY272=(Token)input.LT(1);
-            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3594); if (failed) return retval;
+            LEFT_CURLY297=(Token)input.LT(1);
+            match(input,LEFT_CURLY,FOLLOW_LEFT_CURLY_in_curly_chunk_data3846); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_CURLY272_tree = (Object)adaptor.create(LEFT_CURLY272);
-            adaptor.addChild(root_0, LEFT_CURLY272_tree);
+            LEFT_CURLY297_tree = (Object)adaptor.create(LEFT_CURLY297);
+            adaptor.addChild(root_0, LEFT_CURLY297_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
-            loop90:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:817:15: (~ ( LEFT_CURLY | RIGHT_CURLY ) | curly_chunk_data )*
+            loop96:
             do {
-                int alt90=3;
-                int LA90_0 = input.LA(1);
+                int alt96=3;
+                int LA96_0 = input.LA(1);
 
-                if ( ((LA90_0>=VT_COMPILATION_UNIT && LA90_0<=THEN)||(LA90_0>=MISC && LA90_0<=MULTI_LINE_COMMENT)) ) {
-                    alt90=1;
+                if ( ((LA96_0>=VT_COMPILATION_UNIT && LA96_0<=THEN)||(LA96_0>=MISC && LA96_0<=MULTI_LINE_COMMENT)) ) {
+                    alt96=1;
                 }
-                else if ( (LA90_0==LEFT_CURLY) ) {
-                    alt90=2;
+                else if ( (LA96_0==LEFT_CURLY) ) {
+                    alt96=2;
                 }
 
 
-                switch (alt90) {
+                switch (alt96) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:817:16: ~ ( LEFT_CURLY | RIGHT_CURLY )
             	    {
-            	    set273=(Token)input.LT(1);
+            	    set298=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=THEN)||(input.LA(1)>=MISC && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set273));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set298));
             	        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_data3597);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_curly_chunk_data3849);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:772:49: curly_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:817:49: curly_chunk_data
             	    {
-            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3611);
-            	    curly_chunk_data274=curly_chunk_data();
+            	    pushFollow(FOLLOW_curly_chunk_data_in_curly_chunk_data3863);
+            	    curly_chunk_data299=curly_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data274.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, curly_chunk_data299.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop90;
+            	    break loop96;
                 }
             } while (true);
 
-            RIGHT_CURLY275=(Token)input.LT(1);
-            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3616); if (failed) return retval;
+            RIGHT_CURLY300=(Token)input.LT(1);
+            match(input,RIGHT_CURLY,FOLLOW_RIGHT_CURLY_in_curly_chunk_data3868); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_CURLY275_tree = (Object)adaptor.create(RIGHT_CURLY275);
-            adaptor.addChild(root_0, RIGHT_CURLY275_tree);
+            RIGHT_CURLY300_tree = (Object)adaptor.create(RIGHT_CURLY300);
+            adaptor.addChild(root_0, RIGHT_CURLY300_tree);
             }
 
             }
@@ -11315,7 +12228,7 @@
     };
 
     // $ANTLR start paren_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:775:1: paren_chunk : pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:820: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);
@@ -11330,10 +12243,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:778: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:778:5: pc= paren_chunk_data
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:3: (pc= paren_chunk_data -> VT_PAREN_CHUNK[$pc.start,text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:823:5: pc= paren_chunk_data
             {
-            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3632);
+            pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk3884);
             pc=paren_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -11353,7 +12266,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 779:2: -> VT_PAREN_CHUNK[$pc.start,text]
+            // 824:2: -> VT_PAREN_CHUNK[$pc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_PAREN_CHUNK, ((Token)pc.start), text));
 
@@ -11386,91 +12299,91 @@
     };
 
     // $ANTLR start paren_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:782:1: paren_chunk_data : LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:827: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_PAREN276=null;
-        Token set277=null;
-        Token RIGHT_PAREN279=null;
-        paren_chunk_data_return paren_chunk_data278 = null;
+        Token LEFT_PAREN301=null;
+        Token set302=null;
+        Token RIGHT_PAREN304=null;
+        paren_chunk_data_return paren_chunk_data303 = null;
 
 
-        Object LEFT_PAREN276_tree=null;
-        Object set277_tree=null;
-        Object RIGHT_PAREN279_tree=null;
+        Object LEFT_PAREN301_tree=null;
+        Object set302_tree=null;
+        Object RIGHT_PAREN304_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783: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:783:4: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:2: ( LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:4: LEFT_PAREN (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )* RIGHT_PAREN
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_PAREN276=(Token)input.LT(1);
-            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3652); if (failed) return retval;
+            LEFT_PAREN301=(Token)input.LT(1);
+            match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_paren_chunk_data3904); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_PAREN276_tree = (Object)adaptor.create(LEFT_PAREN276);
-            adaptor.addChild(root_0, LEFT_PAREN276_tree);
+            LEFT_PAREN301_tree = (Object)adaptor.create(LEFT_PAREN301);
+            adaptor.addChild(root_0, LEFT_PAREN301_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
-            loop91:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:15: (~ ( LEFT_PAREN | RIGHT_PAREN ) | paren_chunk_data )*
+            loop97:
             do {
-                int alt91=3;
-                int LA91_0 = input.LA(1);
+                int alt97=3;
+                int LA97_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 ( ((LA97_0>=VT_COMPILATION_UNIT && LA97_0<=STRING)||LA97_0==COMMA||(LA97_0>=AT && LA97_0<=MULTI_LINE_COMMENT)) ) {
+                    alt97=1;
                 }
-                else if ( (LA91_0==LEFT_PAREN) ) {
-                    alt91=2;
+                else if ( (LA97_0==LEFT_PAREN) ) {
+                    alt97=2;
                 }
 
 
-                switch (alt91) {
+                switch (alt97) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:16: ~ ( LEFT_PAREN | RIGHT_PAREN )
             	    {
-            	    set277=(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) ) {
+            	    set302=(Token)input.LT(1);
+            	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=STRING)||input.LA(1)==COMMA||(input.LA(1)>=AT && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set277));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set302));
             	        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_data3655);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_paren_chunk_data3907);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:783:49: paren_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:828:49: paren_chunk_data
             	    {
-            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3669);
-            	    paren_chunk_data278=paren_chunk_data();
+            	    pushFollow(FOLLOW_paren_chunk_data_in_paren_chunk_data3921);
+            	    paren_chunk_data303=paren_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data278.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, paren_chunk_data303.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop91;
+            	    break loop97;
                 }
             } while (true);
 
-            RIGHT_PAREN279=(Token)input.LT(1);
-            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3674); if (failed) return retval;
+            RIGHT_PAREN304=(Token)input.LT(1);
+            match(input,RIGHT_PAREN,FOLLOW_RIGHT_PAREN_in_paren_chunk_data3926); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_PAREN279_tree = (Object)adaptor.create(RIGHT_PAREN279);
-            adaptor.addChild(root_0, RIGHT_PAREN279_tree);
+            RIGHT_PAREN304_tree = (Object)adaptor.create(RIGHT_PAREN304);
+            adaptor.addChild(root_0, RIGHT_PAREN304_tree);
             }
 
             }
@@ -11498,7 +12411,7 @@
     };
 
     // $ANTLR start square_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:786:1: square_chunk : sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:831: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);
@@ -11513,10 +12426,10 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:789: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:789:5: sc= square_chunk_data
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:834:3: (sc= square_chunk_data -> VT_SQUARE_CHUNK[$sc.start,text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:834:5: sc= square_chunk_data
             {
-            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3691);
+            pushFollow(FOLLOW_square_chunk_data_in_square_chunk3943);
             sc=square_chunk_data();
             _fsp--;
             if (failed) return retval;
@@ -11536,7 +12449,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 790:2: -> VT_SQUARE_CHUNK[$sc.start,text]
+            // 835:2: -> VT_SQUARE_CHUNK[$sc.start,text]
             {
                 adaptor.addChild(root_0, adaptor.create(VT_SQUARE_CHUNK, ((Token)sc.start), text));
 
@@ -11569,91 +12482,91 @@
     };
 
     // $ANTLR start square_chunk_data
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:793:1: square_chunk_data : LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:838: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_SQUARE280=null;
-        Token set281=null;
-        Token RIGHT_SQUARE283=null;
-        square_chunk_data_return square_chunk_data282 = null;
+        Token LEFT_SQUARE305=null;
+        Token set306=null;
+        Token RIGHT_SQUARE308=null;
+        square_chunk_data_return square_chunk_data307 = null;
 
 
-        Object LEFT_SQUARE280_tree=null;
-        Object set281_tree=null;
-        Object RIGHT_SQUARE283_tree=null;
+        Object LEFT_SQUARE305_tree=null;
+        Object set306_tree=null;
+        Object RIGHT_SQUARE308_tree=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794: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:794:4: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:2: ( LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:4: LEFT_SQUARE (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )* RIGHT_SQUARE
             {
             root_0 = (Object)adaptor.nil();
 
-            LEFT_SQUARE280=(Token)input.LT(1);
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3710); if (failed) return retval;
+            LEFT_SQUARE305=(Token)input.LT(1);
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_square_chunk_data3962); if (failed) return retval;
             if ( backtracking==0 ) {
-            LEFT_SQUARE280_tree = (Object)adaptor.create(LEFT_SQUARE280);
-            adaptor.addChild(root_0, LEFT_SQUARE280_tree);
+            LEFT_SQUARE305_tree = (Object)adaptor.create(LEFT_SQUARE305);
+            adaptor.addChild(root_0, LEFT_SQUARE305_tree);
             }
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
-            loop92:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:16: (~ ( LEFT_SQUARE | RIGHT_SQUARE ) | square_chunk_data )*
+            loop98:
             do {
-                int alt92=3;
-                int LA92_0 = input.LA(1);
+                int alt98=3;
+                int LA98_0 = input.LA(1);
 
-                if ( ((LA92_0>=VT_COMPILATION_UNIT && LA92_0<=NULL)||(LA92_0>=THEN && LA92_0<=MULTI_LINE_COMMENT)) ) {
-                    alt92=1;
+                if ( ((LA98_0>=VT_COMPILATION_UNIT && LA98_0<=NULL)||(LA98_0>=THEN && LA98_0<=MULTI_LINE_COMMENT)) ) {
+                    alt98=1;
                 }
-                else if ( (LA92_0==LEFT_SQUARE) ) {
-                    alt92=2;
+                else if ( (LA98_0==LEFT_SQUARE) ) {
+                    alt98=2;
                 }
 
 
-                switch (alt92) {
+                switch (alt98) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:17: ~ ( LEFT_SQUARE | RIGHT_SQUARE )
             	    {
-            	    set281=(Token)input.LT(1);
+            	    set306=(Token)input.LT(1);
             	    if ( (input.LA(1)>=VT_COMPILATION_UNIT && input.LA(1)<=NULL)||(input.LA(1)>=THEN && input.LA(1)<=MULTI_LINE_COMMENT) ) {
             	        input.consume();
-            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set281));
+            	        if ( backtracking==0 ) adaptor.addChild(root_0, adaptor.create(set306));
             	        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_data3713);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_square_chunk_data3965);    throw mse;
             	    }
 
 
             	    }
             	    break;
             	case 2 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:794:52: square_chunk_data
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:839:52: square_chunk_data
             	    {
-            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3727);
-            	    square_chunk_data282=square_chunk_data();
+            	    pushFollow(FOLLOW_square_chunk_data_in_square_chunk_data3979);
+            	    square_chunk_data307=square_chunk_data();
             	    _fsp--;
             	    if (failed) return retval;
-            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data282.getTree());
+            	    if ( backtracking==0 ) adaptor.addChild(root_0, square_chunk_data307.getTree());
 
             	    }
             	    break;
 
             	default :
-            	    break loop92;
+            	    break loop98;
                 }
             } while (true);
 
-            RIGHT_SQUARE283=(Token)input.LT(1);
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3732); if (failed) return retval;
+            RIGHT_SQUARE308=(Token)input.LT(1);
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_square_chunk_data3984); if (failed) return retval;
             if ( backtracking==0 ) {
-            RIGHT_SQUARE283_tree = (Object)adaptor.create(RIGHT_SQUARE283);
-            adaptor.addChild(root_0, RIGHT_SQUARE283_tree);
+            RIGHT_SQUARE308_tree = (Object)adaptor.create(RIGHT_SQUARE308);
+            adaptor.addChild(root_0, RIGHT_SQUARE308_tree);
             }
 
             }
@@ -11681,20 +12594,20 @@
     };
 
     // $ANTLR start date_effective_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:798:1: date_effective_key : {...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:843: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 ID284=null;
-        Token MISC285=null;
-        Token ID286=null;
+        Token ID309=null;
+        Token MISC310=null;
+        Token ID311=null;
 
-        Object ID284_tree=null;
-        Object MISC285_tree=null;
-        Object ID286_tree=null;
+        Object ID309_tree=null;
+        Object MISC310_tree=null;
+        Object ID311_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11702,24 +12615,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:801:3: ({...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:801:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:3: ({...}? => ID MISC ID -> VK_DATE_EFFECTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:846:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "date_effective_key", "(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))");
             }
-            ID284=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key3751); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID284);
+            ID309=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key4003); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID309);
 
-            MISC285=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_effective_key3753); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC285);
+            MISC310=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_effective_key4005); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC310);
 
-            ID286=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_effective_key3755); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID286);
+            ID311=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_effective_key4007); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID311);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11736,7 +12649,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 802:2: -> VK_DATE_EFFECTIVE[$start, text]
+            // 847:2: -> VK_DATE_EFFECTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EFFECTIVE, ((Token)retval.start),  text));
 
@@ -11769,20 +12682,20 @@
     };
 
     // $ANTLR start date_expires_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:805:1: date_expires_key : {...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:850: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 ID287=null;
-        Token MISC288=null;
-        Token ID289=null;
+        Token ID312=null;
+        Token MISC313=null;
+        Token ID314=null;
 
-        Object ID287_tree=null;
-        Object MISC288_tree=null;
-        Object ID289_tree=null;
+        Object ID312_tree=null;
+        Object MISC313_tree=null;
+        Object ID314_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11790,24 +12703,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:808:3: ({...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:808:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:853:3: ({...}? => ID MISC ID -> VK_DATE_EXPIRES[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:853:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "date_expires_key", "(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.EXPIRES))");
             }
-            ID287=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key3781); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID287);
+            ID312=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key4033); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID312);
 
-            MISC288=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_date_expires_key3783); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC288);
+            MISC313=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_date_expires_key4035); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC313);
 
-            ID289=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_date_expires_key3785); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID289);
+            ID314=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_date_expires_key4037); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID314);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11824,7 +12737,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 809:2: -> VK_DATE_EXPIRES[$start, text]
+            // 854:2: -> VK_DATE_EXPIRES[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DATE_EXPIRES, ((Token)retval.start),  text));
 
@@ -11857,24 +12770,24 @@
     };
 
     // $ANTLR start lock_on_active_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:812:1: lock_on_active_key : {...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:857: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 ID290=null;
-        Token MISC291=null;
-        Token ID292=null;
-        Token MISC293=null;
-        Token ID294=null;
+        Token ID315=null;
+        Token MISC316=null;
+        Token ID317=null;
+        Token MISC318=null;
+        Token ID319=null;
 
-        Object ID290_tree=null;
-        Object MISC291_tree=null;
-        Object ID292_tree=null;
-        Object MISC293_tree=null;
-        Object ID294_tree=null;
+        Object ID315_tree=null;
+        Object MISC316_tree=null;
+        Object ID317_tree=null;
+        Object MISC318_tree=null;
+        Object ID319_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11882,32 +12795,32 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:815: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:815:5: {...}? => ID MISC ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:3: ({...}? => ID MISC ID MISC ID -> VK_LOCK_ON_ACTIVE[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:860:5: {...}? => ID MISC ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "lock_on_active_key", "(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, \"-\") && validateLT(5, DroolsSoftKeywords.ACTIVE))");
             }
-            ID290=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key3811); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID290);
+            ID315=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key4063); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID315);
 
-            MISC291=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3813); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC291);
+            MISC316=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key4065); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC316);
 
-            ID292=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key3815); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID292);
+            ID317=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key4067); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID317);
 
-            MISC293=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key3817); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC293);
+            MISC318=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_lock_on_active_key4069); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC318);
 
-            ID294=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_lock_on_active_key3819); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID294);
+            ID319=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_lock_on_active_key4071); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID319);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -11924,7 +12837,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 816:2: -> VK_LOCK_ON_ACTIVE[$start, text]
+            // 861:2: -> VK_LOCK_ON_ACTIVE[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_LOCK_ON_ACTIVE, ((Token)retval.start),  text));
 
@@ -11957,20 +12870,20 @@
     };
 
     // $ANTLR start no_loop_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:819:1: no_loop_key : {...}? => ID MISC ID -> VK_NO_LOOP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:864: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 ID295=null;
-        Token MISC296=null;
-        Token ID297=null;
+        Token ID320=null;
+        Token MISC321=null;
+        Token ID322=null;
 
-        Object ID295_tree=null;
-        Object MISC296_tree=null;
-        Object ID297_tree=null;
+        Object ID320_tree=null;
+        Object MISC321_tree=null;
+        Object ID322_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -11978,24 +12891,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:3: ({...}? => ID MISC ID -> VK_NO_LOOP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:822:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867:3: ({...}? => ID MISC ID -> VK_NO_LOOP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "no_loop_key", "(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.LOOP))");
             }
-            ID295=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key3845); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID295);
+            ID320=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key4097); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID320);
 
-            MISC296=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_no_loop_key3847); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC296);
+            MISC321=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_no_loop_key4099); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC321);
 
-            ID297=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_no_loop_key3849); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID297);
+            ID322=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_no_loop_key4101); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID322);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12012,7 +12925,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 823:2: -> VK_NO_LOOP[$start, text]
+            // 868:2: -> VK_NO_LOOP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NO_LOOP, ((Token)retval.start),  text));
 
@@ -12045,20 +12958,20 @@
     };
 
     // $ANTLR start auto_focus_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:826:1: auto_focus_key : {...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871: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 ID298=null;
-        Token MISC299=null;
-        Token ID300=null;
+        Token ID323=null;
+        Token MISC324=null;
+        Token ID325=null;
 
-        Object ID298_tree=null;
-        Object MISC299_tree=null;
-        Object ID300_tree=null;
+        Object ID323_tree=null;
+        Object MISC324_tree=null;
+        Object ID325_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12066,24 +12979,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:3: ({...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:829:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874:3: ({...}? => ID MISC ID -> VK_AUTO_FOCUS[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "auto_focus_key", "(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.FOCUS))");
             }
-            ID298=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key3875); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID298);
+            ID323=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key4127); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID323);
 
-            MISC299=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_auto_focus_key3877); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC299);
+            MISC324=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_auto_focus_key4129); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC324);
 
-            ID300=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_auto_focus_key3879); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID300);
+            ID325=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_auto_focus_key4131); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID325);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12100,7 +13013,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 830:2: -> VK_AUTO_FOCUS[$start, text]
+            // 875:2: -> VK_AUTO_FOCUS[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AUTO_FOCUS, ((Token)retval.start),  text));
 
@@ -12133,20 +13046,20 @@
     };
 
     // $ANTLR start activation_group_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:833:1: activation_group_key : {...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878: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 ID301=null;
-        Token MISC302=null;
-        Token ID303=null;
+        Token ID326=null;
+        Token MISC327=null;
+        Token ID328=null;
 
-        Object ID301_tree=null;
-        Object MISC302_tree=null;
-        Object ID303_tree=null;
+        Object ID326_tree=null;
+        Object MISC327_tree=null;
+        Object ID328_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12154,24 +13067,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:836:3: ({...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:836:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:881:3: ({...}? => ID MISC ID -> VK_ACTIVATION_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:881:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "activation_group_key", "(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.GROUP))");
             }
-            ID301=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key3905); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID301);
+            ID326=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key4157); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID326);
 
-            MISC302=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_activation_group_key3907); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC302);
+            MISC327=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_activation_group_key4159); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC327);
 
-            ID303=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_activation_group_key3909); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID303);
+            ID328=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_activation_group_key4161); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID328);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12188,7 +13101,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 837:2: -> VK_ACTIVATION_GROUP[$start, text]
+            // 882:2: -> VK_ACTIVATION_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTIVATION_GROUP, ((Token)retval.start),  text));
 
@@ -12221,20 +13134,20 @@
     };
 
     // $ANTLR start agenda_group_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:840:1: agenda_group_key : {...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:885: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 ID304=null;
-        Token MISC305=null;
-        Token ID306=null;
+        Token ID329=null;
+        Token MISC330=null;
+        Token ID331=null;
 
-        Object ID304_tree=null;
-        Object MISC305_tree=null;
-        Object ID306_tree=null;
+        Object ID329_tree=null;
+        Object MISC330_tree=null;
+        Object ID331_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12242,24 +13155,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:843:3: ({...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:843:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:888:3: ({...}? => ID MISC ID -> VK_AGENDA_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:888:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "agenda_group_key", "(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.GROUP))");
             }
-            ID304=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key3935); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID304);
+            ID329=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key4187); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID329);
 
-            MISC305=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_agenda_group_key3937); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC305);
+            MISC330=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_agenda_group_key4189); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC330);
 
-            ID306=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_agenda_group_key3939); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID306);
+            ID331=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_agenda_group_key4191); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID331);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12276,7 +13189,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 844:2: -> VK_AGENDA_GROUP[$start, text]
+            // 889:2: -> VK_AGENDA_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AGENDA_GROUP, ((Token)retval.start),  text));
 
@@ -12309,20 +13222,20 @@
     };
 
     // $ANTLR start ruleflow_group_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:847:1: ruleflow_group_key : {...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:892: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 ID307=null;
-        Token MISC308=null;
-        Token ID309=null;
+        Token ID332=null;
+        Token MISC333=null;
+        Token ID334=null;
 
-        Object ID307_tree=null;
-        Object MISC308_tree=null;
-        Object ID309_tree=null;
+        Object ID332_tree=null;
+        Object MISC333_tree=null;
+        Object ID334_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -12330,24 +13243,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:850:3: ({...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:850:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:3: ({...}? => ID MISC ID -> VK_RULEFLOW_GROUP[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "ruleflow_group_key", "(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.GROUP))");
             }
-            ID307=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3965); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID307);
+            ID332=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key4217); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID332);
 
-            MISC308=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key3967); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC308);
+            MISC333=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_ruleflow_group_key4219); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC333);
 
-            ID309=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_ruleflow_group_key3969); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID309);
+            ID334=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_ruleflow_group_key4221); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID334);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -12364,7 +13277,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 851:2: -> VK_RULEFLOW_GROUP[$start, text]
+            // 896:2: -> VK_RULEFLOW_GROUP[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULEFLOW_GROUP, ((Token)retval.start),  text));
 
@@ -12397,7 +13310,7 @@
     };
 
     // $ANTLR start duration_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:854:1: duration_key : {...}? =>id= ID -> VK_DURATION[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:1: duration_key : {...}? =>id= ID -> VK_DURATION[$id] ;
     public final duration_key_return duration_key() throws RecognitionException {
         duration_key_return retval = new duration_key_return();
         retval.start = input.LT(1);
@@ -12410,15 +13323,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:855:2: ({...}? =>id= ID -> VK_DURATION[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:855:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:2: ({...}? =>id= ID -> VK_DURATION[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:900:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DURATION))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "duration_key", "(validateIdentifierKey(DroolsSoftKeywords.DURATION))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_duration_key3994); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_duration_key4246); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12433,7 +13346,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 855:69: -> VK_DURATION[$id]
+            // 900:69: -> VK_DURATION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DURATION, id));
 
@@ -12466,7 +13379,7 @@
     };
 
     // $ANTLR start package_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:858:1: package_key : {...}? =>id= ID -> VK_PACKAGE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:903:1: package_key : {...}? =>id= ID -> VK_PACKAGE[$id] ;
     public final package_key_return package_key() throws RecognitionException {
         package_key_return retval = new package_key_return();
         retval.start = input.LT(1);
@@ -12479,15 +13392,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:859:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:859:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:904:2: ({...}? =>id= ID -> VK_PACKAGE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:904:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.PACKAGE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "package_key", "(validateIdentifierKey(DroolsSoftKeywords.PACKAGE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_package_key4016); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_package_key4268); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12502,7 +13415,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 859:68: -> VK_PACKAGE[$id]
+            // 904:68: -> VK_PACKAGE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_PACKAGE, id));
 
@@ -12535,7 +13448,7 @@
     };
 
     // $ANTLR start import_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:862:1: import_key : {...}? =>id= ID -> VK_IMPORT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:907:1: import_key : {...}? =>id= ID -> VK_IMPORT[$id] ;
     public final import_key_return import_key() throws RecognitionException {
         import_key_return retval = new import_key_return();
         retval.start = input.LT(1);
@@ -12548,15 +13461,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:863:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:863:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:908:2: ({...}? =>id= ID -> VK_IMPORT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:908:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "import_key", "(validateIdentifierKey(DroolsSoftKeywords.IMPORT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_import_key4038); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_import_key4290); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12571,7 +13484,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 863:67: -> VK_IMPORT[$id]
+            // 908:67: -> VK_IMPORT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IMPORT, id));
 
@@ -12604,7 +13517,7 @@
     };
 
     // $ANTLR start dialect_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:866:1: dialect_key : {...}? =>id= ID -> VK_DIALECT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:911:1: dialect_key : {...}? =>id= ID -> VK_DIALECT[$id] ;
     public final dialect_key_return dialect_key() throws RecognitionException {
         dialect_key_return retval = new dialect_key_return();
         retval.start = input.LT(1);
@@ -12617,15 +13530,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:867:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:867:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:912:2: ({...}? =>id= ID -> VK_DIALECT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:912:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "dialect_key", "(validateIdentifierKey(DroolsSoftKeywords.DIALECT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_dialect_key4060); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_dialect_key4312); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12640,7 +13553,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 867:68: -> VK_DIALECT[$id]
+            // 912:68: -> VK_DIALECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DIALECT, id));
 
@@ -12673,7 +13586,7 @@
     };
 
     // $ANTLR start salience_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:870:1: salience_key : {...}? =>id= ID -> VK_SALIENCE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:915:1: salience_key : {...}? =>id= ID -> VK_SALIENCE[$id] ;
     public final salience_key_return salience_key() throws RecognitionException {
         salience_key_return retval = new salience_key_return();
         retval.start = input.LT(1);
@@ -12686,15 +13599,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:871:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:871:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:916:2: ({...}? =>id= ID -> VK_SALIENCE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:916:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "salience_key", "(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_salience_key4082); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_salience_key4334); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12709,7 +13622,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 871:69: -> VK_SALIENCE[$id]
+            // 916:69: -> VK_SALIENCE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SALIENCE, id));
 
@@ -12742,7 +13655,7 @@
     };
 
     // $ANTLR start enabled_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:874:1: enabled_key : {...}? =>id= ID -> VK_ENABLED[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:919:1: enabled_key : {...}? =>id= ID -> VK_ENABLED[$id] ;
     public final enabled_key_return enabled_key() throws RecognitionException {
         enabled_key_return retval = new enabled_key_return();
         retval.start = input.LT(1);
@@ -12755,15 +13668,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:875:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:875:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:2: ({...}? =>id= ID -> VK_ENABLED[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:920:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ENABLED))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "enabled_key", "(validateIdentifierKey(DroolsSoftKeywords.ENABLED))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_enabled_key4104); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_enabled_key4356); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12778,7 +13691,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 875:68: -> VK_ENABLED[$id]
+            // 920:68: -> VK_ENABLED[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENABLED, id));
 
@@ -12811,7 +13724,7 @@
     };
 
     // $ANTLR start attributes_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:878:1: attributes_key : {...}? =>id= ID -> VK_ATTRIBUTES[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:1: attributes_key : {...}? =>id= ID -> VK_ATTRIBUTES[$id] ;
     public final attributes_key_return attributes_key() throws RecognitionException {
         attributes_key_return retval = new attributes_key_return();
         retval.start = input.LT(1);
@@ -12824,15 +13737,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:879:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:879:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:2: ({...}? =>id= ID -> VK_ATTRIBUTES[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:924:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "attributes_key", "(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_attributes_key4126); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_attributes_key4378); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12847,7 +13760,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 879:71: -> VK_ATTRIBUTES[$id]
+            // 924:71: -> VK_ATTRIBUTES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ATTRIBUTES, id));
 
@@ -12880,7 +13793,7 @@
     };
 
     // $ANTLR start when_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:882:1: when_key : {...}? =>id= ID -> VK_WHEN[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:1: when_key : {...}? =>id= ID -> VK_WHEN[$id] ;
     public final when_key_return when_key() throws RecognitionException {
         when_key_return retval = new when_key_return();
         retval.start = input.LT(1);
@@ -12893,15 +13806,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:883:2: ({...}? =>id= ID -> VK_WHEN[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:883:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:928:2: ({...}? =>id= ID -> VK_WHEN[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:928:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "when_key", "(validateIdentifierKey(DroolsSoftKeywords.WHEN))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_when_key4148); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_when_key4400); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12916,7 +13829,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 883:65: -> VK_WHEN[$id]
+            // 928:65: -> VK_WHEN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_WHEN, id));
 
@@ -12949,7 +13862,7 @@
     };
 
     // $ANTLR start rule_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:886:1: rule_key : {...}? =>id= ID -> VK_RULE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:1: rule_key : {...}? =>id= ID -> VK_RULE[$id] ;
     public final rule_key_return rule_key() throws RecognitionException {
         rule_key_return retval = new rule_key_return();
         retval.start = input.LT(1);
@@ -12962,15 +13875,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:887:2: ({...}? =>id= ID -> VK_RULE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:887:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:2: ({...}? =>id= ID -> VK_RULE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:932:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "rule_key", "(validateIdentifierKey(DroolsSoftKeywords.RULE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_rule_key4170); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_rule_key4422); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -12985,7 +13898,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 887:65: -> VK_RULE[$id]
+            // 932:65: -> VK_RULE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RULE, id));
 
@@ -13018,7 +13931,7 @@
     };
 
     // $ANTLR start template_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:890:1: template_key : {...}? =>id= ID -> VK_TEMPLATE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:1: template_key : {...}? =>id= ID -> VK_TEMPLATE[$id] ;
     public final template_key_return template_key() throws RecognitionException {
         template_key_return retval = new template_key_return();
         retval.start = input.LT(1);
@@ -13031,15 +13944,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:891:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:891:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:936:2: ({...}? =>id= ID -> VK_TEMPLATE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:936:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "template_key", "(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_template_key4192); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_template_key4444); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13054,7 +13967,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 891:69: -> VK_TEMPLATE[$id]
+            // 936:69: -> VK_TEMPLATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_TEMPLATE, id));
 
@@ -13087,7 +14000,7 @@
     };
 
     // $ANTLR start query_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:894:1: query_key : {...}? =>id= ID -> VK_QUERY[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:939:1: query_key : {...}? =>id= ID -> VK_QUERY[$id] ;
     public final query_key_return query_key() throws RecognitionException {
         query_key_return retval = new query_key_return();
         retval.start = input.LT(1);
@@ -13100,15 +14013,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:895:2: ({...}? =>id= ID -> VK_QUERY[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:895:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:940:2: ({...}? =>id= ID -> VK_QUERY[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:940:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "query_key", "(validateIdentifierKey(DroolsSoftKeywords.QUERY))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_query_key4214); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_query_key4466); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13123,7 +14036,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 895:66: -> VK_QUERY[$id]
+            // 940:66: -> VK_QUERY[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_QUERY, id));
 
@@ -13156,7 +14069,7 @@
     };
 
     // $ANTLR start declare_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:898:1: declare_key : {...}? =>id= ID -> VK_DECLARE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:943:1: declare_key : {...}? =>id= ID -> VK_DECLARE[$id] ;
     public final declare_key_return declare_key() throws RecognitionException {
         declare_key_return retval = new declare_key_return();
         retval.start = input.LT(1);
@@ -13169,15 +14082,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:899:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:899:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:944:2: ({...}? =>id= ID -> VK_DECLARE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:944:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.DECLARE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "declare_key", "(validateIdentifierKey(DroolsSoftKeywords.DECLARE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_declare_key4236); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_declare_key4488); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13192,7 +14105,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 899:68: -> VK_DECLARE[$id]
+            // 944:68: -> VK_DECLARE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_DECLARE, id));
 
@@ -13225,7 +14138,7 @@
     };
 
     // $ANTLR start function_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:902:1: function_key : {...}? =>id= ID -> VK_FUNCTION[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:947:1: function_key : {...}? =>id= ID -> VK_FUNCTION[$id] ;
     public final function_key_return function_key() throws RecognitionException {
         function_key_return retval = new function_key_return();
         retval.start = input.LT(1);
@@ -13238,15 +14151,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:903:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:903:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:948:2: ({...}? =>id= ID -> VK_FUNCTION[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:948:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.FUNCTION))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "function_key", "(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_function_key4258); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_function_key4510); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13261,7 +14174,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 903:69: -> VK_FUNCTION[$id]
+            // 948:69: -> VK_FUNCTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FUNCTION, id));
 
@@ -13294,7 +14207,7 @@
     };
 
     // $ANTLR start global_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:906:1: global_key : {...}? =>id= ID -> VK_GLOBAL[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:1: global_key : {...}? =>id= ID -> VK_GLOBAL[$id] ;
     public final global_key_return global_key() throws RecognitionException {
         global_key_return retval = new global_key_return();
         retval.start = input.LT(1);
@@ -13307,15 +14220,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:907:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:907:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:952:2: ({...}? =>id= ID -> VK_GLOBAL[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:952:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "global_key", "(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_global_key4280); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_global_key4532); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13330,7 +14243,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 907:67: -> VK_GLOBAL[$id]
+            // 952:67: -> VK_GLOBAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_GLOBAL, id));
 
@@ -13363,7 +14276,7 @@
     };
 
     // $ANTLR start eval_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:910:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:1: eval_key : {...}? =>id= ID -> VK_EVAL[$id] ;
     public final eval_key_return eval_key() throws RecognitionException {
         eval_key_return retval = new eval_key_return();
         retval.start = input.LT(1);
@@ -13376,15 +14289,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:911:2: ({...}? =>id= ID -> VK_EVAL[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:911:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:956:2: ({...}? =>id= ID -> VK_EVAL[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:956:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.EVAL))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "eval_key", "(validateIdentifierKey(DroolsSoftKeywords.EVAL))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_eval_key4302); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_eval_key4554); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13399,7 +14312,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 911:65: -> VK_EVAL[$id]
+            // 956:65: -> VK_EVAL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EVAL, id));
 
@@ -13432,7 +14345,7 @@
     };
 
     // $ANTLR start contains_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:914:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:1: contains_key : {...}? =>id= ID -> VK_CONTAINS[$id] ;
     public final contains_key_return contains_key() throws RecognitionException {
         contains_key_return retval = new contains_key_return();
         retval.start = input.LT(1);
@@ -13445,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:915:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:915:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:960:2: ({...}? =>id= ID -> VK_CONTAINS[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:960:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.CONTAINS))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "contains_key", "(validateIdentifierKey(DroolsSoftKeywords.CONTAINS))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_contains_key4324); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_contains_key4576); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13468,7 +14381,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 915:69: -> VK_CONTAINS[$id]
+            // 960:69: -> VK_CONTAINS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_CONTAINS, id));
 
@@ -13501,7 +14414,7 @@
     };
 
     // $ANTLR start matches_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:918:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:963:1: matches_key : {...}? =>id= ID -> VK_MATCHES[$id] ;
     public final matches_key_return matches_key() throws RecognitionException {
         matches_key_return retval = new matches_key_return();
         retval.start = input.LT(1);
@@ -13514,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:919:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:919:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:964:2: ({...}? =>id= ID -> VK_MATCHES[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:964:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.MATCHES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "matches_key", "(validateIdentifierKey(DroolsSoftKeywords.MATCHES))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_matches_key4346); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_matches_key4598); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13537,7 +14450,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 919:68: -> VK_MATCHES[$id]
+            // 964:68: -> VK_MATCHES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MATCHES, id));
 
@@ -13570,7 +14483,7 @@
     };
 
     // $ANTLR start excludes_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:922:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:967:1: excludes_key : {...}? =>id= ID -> VK_EXCLUDES[$id] ;
     public final excludes_key_return excludes_key() throws RecognitionException {
         excludes_key_return retval = new excludes_key_return();
         retval.start = input.LT(1);
@@ -13583,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:923:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:923:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:968:2: ({...}? =>id= ID -> VK_EXCLUDES[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:968:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "excludes_key", "(validateIdentifierKey(DroolsSoftKeywords.EXCLUDES))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_excludes_key4368); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_excludes_key4620); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13606,7 +14519,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 923:69: -> VK_EXCLUDES[$id]
+            // 968:69: -> VK_EXCLUDES[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXCLUDES, id));
 
@@ -13639,7 +14552,7 @@
     };
 
     // $ANTLR start soundslike_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:926:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:971:1: soundslike_key : {...}? =>id= ID -> VK_SOUNDSLIKE[$id] ;
     public final soundslike_key_return soundslike_key() throws RecognitionException {
         soundslike_key_return retval = new soundslike_key_return();
         retval.start = input.LT(1);
@@ -13652,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:927:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:927:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:972:2: ({...}? =>id= ID -> VK_SOUNDSLIKE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:972:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "soundslike_key", "(validateIdentifierKey(DroolsSoftKeywords.SOUNDSLIKE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_soundslike_key4390); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_soundslike_key4642); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13675,7 +14588,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 927:71: -> VK_SOUNDSLIKE[$id]
+            // 972:71: -> VK_SOUNDSLIKE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_SOUNDSLIKE, id));
 
@@ -13708,7 +14621,7 @@
     };
 
     // $ANTLR start memberof_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:930:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:975:1: memberof_key : {...}? =>id= ID -> VK_MEMBEROF[$id] ;
     public final memberof_key_return memberof_key() throws RecognitionException {
         memberof_key_return retval = new memberof_key_return();
         retval.start = input.LT(1);
@@ -13721,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:931:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:931:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:976:2: ({...}? =>id= ID -> VK_MEMBEROF[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:976:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "memberof_key", "(validateIdentifierKey(DroolsSoftKeywords.MEMBEROF))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_memberof_key4412); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_memberof_key4664); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13744,7 +14657,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 931:69: -> VK_MEMBEROF[$id]
+            // 976:69: -> VK_MEMBEROF[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_MEMBEROF, id));
 
@@ -13777,7 +14690,7 @@
     };
 
     // $ANTLR start not_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:934:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:979:1: not_key : {...}? =>id= ID -> VK_NOT[$id] ;
     public final not_key_return not_key() throws RecognitionException {
         not_key_return retval = new not_key_return();
         retval.start = input.LT(1);
@@ -13790,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:935:2: ({...}? =>id= ID -> VK_NOT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:935:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:980:2: ({...}? =>id= ID -> VK_NOT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:980:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.NOT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "not_key", "(validateIdentifierKey(DroolsSoftKeywords.NOT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_not_key4434); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_not_key4686); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13813,7 +14726,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 935:64: -> VK_NOT[$id]
+            // 980:64: -> VK_NOT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_NOT, id));
 
@@ -13846,7 +14759,7 @@
     };
 
     // $ANTLR start in_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:938:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:983:1: in_key : {...}? =>id= ID -> VK_IN[$id] ;
     public final in_key_return in_key() throws RecognitionException {
         in_key_return retval = new in_key_return();
         retval.start = input.LT(1);
@@ -13859,15 +14772,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:939:2: ({...}? =>id= ID -> VK_IN[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:939:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:984:2: ({...}? =>id= ID -> VK_IN[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:984:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.IN))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "in_key", "(validateIdentifierKey(DroolsSoftKeywords.IN))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_in_key4456); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_in_key4708); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13882,7 +14795,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 939:63: -> VK_IN[$id]
+            // 984:63: -> VK_IN[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_IN, id));
 
@@ -13915,7 +14828,7 @@
     };
 
     // $ANTLR start or_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:942:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:987:1: or_key : {...}? =>id= ID -> VK_OR[$id] ;
     public final or_key_return or_key() throws RecognitionException {
         or_key_return retval = new or_key_return();
         retval.start = input.LT(1);
@@ -13928,15 +14841,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:943:2: ({...}? =>id= ID -> VK_OR[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:943:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:988:2: ({...}? =>id= ID -> VK_OR[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:988:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.OR))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "or_key", "(validateIdentifierKey(DroolsSoftKeywords.OR))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_or_key4478); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_or_key4730); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -13951,7 +14864,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 943:63: -> VK_OR[$id]
+            // 988:63: -> VK_OR[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_OR, id));
 
@@ -13984,7 +14897,7 @@
     };
 
     // $ANTLR start and_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:946:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:991:1: and_key : {...}? =>id= ID -> VK_AND[$id] ;
     public final and_key_return and_key() throws RecognitionException {
         and_key_return retval = new and_key_return();
         retval.start = input.LT(1);
@@ -13997,15 +14910,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:947:2: ({...}? =>id= ID -> VK_AND[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:947:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:992:2: ({...}? =>id= ID -> VK_AND[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:992:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.AND))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "and_key", "(validateIdentifierKey(DroolsSoftKeywords.AND))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_and_key4500); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_and_key4752); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14020,7 +14933,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 947:64: -> VK_AND[$id]
+            // 992:64: -> VK_AND[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_AND, id));
 
@@ -14053,7 +14966,7 @@
     };
 
     // $ANTLR start exists_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:950:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:995:1: exists_key : {...}? =>id= ID -> VK_EXISTS[$id] ;
     public final exists_key_return exists_key() throws RecognitionException {
         exists_key_return retval = new exists_key_return();
         retval.start = input.LT(1);
@@ -14066,15 +14979,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:951:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:951:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:996:2: ({...}? =>id= ID -> VK_EXISTS[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:996:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.EXISTS))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "exists_key", "(validateIdentifierKey(DroolsSoftKeywords.EXISTS))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_exists_key4522); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_exists_key4774); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14089,7 +15002,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 951:67: -> VK_EXISTS[$id]
+            // 996:67: -> VK_EXISTS[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_EXISTS, id));
 
@@ -14122,7 +15035,7 @@
     };
 
     // $ANTLR start forall_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:954:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:999:1: forall_key : {...}? =>id= ID -> VK_FORALL[$id] ;
     public final forall_key_return forall_key() throws RecognitionException {
         forall_key_return retval = new forall_key_return();
         retval.start = input.LT(1);
@@ -14135,15 +15048,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:955:2: ({...}? =>id= ID -> VK_FORALL[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:955:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:2: ({...}? =>id= ID -> VK_FORALL[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1000:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.FORALL))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "forall_key", "(validateIdentifierKey(DroolsSoftKeywords.FORALL))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_forall_key4544); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_forall_key4796); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14158,7 +15071,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 955:67: -> VK_FORALL[$id]
+            // 1000:67: -> VK_FORALL[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FORALL, id));
 
@@ -14191,7 +15104,7 @@
     };
 
     // $ANTLR start from_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:958:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1003:1: from_key : {...}? =>id= ID -> VK_FROM[$id] ;
     public final from_key_return from_key() throws RecognitionException {
         from_key_return retval = new from_key_return();
         retval.start = input.LT(1);
@@ -14204,15 +15117,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:959:2: ({...}? =>id= ID -> VK_FROM[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:959:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:2: ({...}? =>id= ID -> VK_FROM[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1004:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.FROM))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "from_key", "(validateIdentifierKey(DroolsSoftKeywords.FROM))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_key4566); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_from_key4818); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14227,7 +15140,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 959:65: -> VK_FROM[$id]
+            // 1004:65: -> VK_FROM[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_FROM, id));
 
@@ -14260,20 +15173,20 @@
     };
 
     // $ANTLR start entry_point_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:962:1: entry_point_key : {...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1007: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 ID310=null;
-        Token MISC311=null;
-        Token ID312=null;
+        Token ID335=null;
+        Token MISC336=null;
+        Token ID337=null;
 
-        Object ID310_tree=null;
-        Object MISC311_tree=null;
-        Object ID312_tree=null;
+        Object ID335_tree=null;
+        Object MISC336_tree=null;
+        Object ID337_tree=null;
         RewriteRuleTokenStream stream_MISC=new RewriteRuleTokenStream(adaptor,"token MISC");
         RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
 
@@ -14281,24 +15194,24 @@
         	String text = "";
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:965:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:965:5: {...}? => ID MISC ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:3: ({...}? => ID MISC ID -> VK_ENTRY_POINT[$start, text] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1010:5: {...}? => ID MISC ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ENTRY) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.POINT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "entry_point_key", "(validateIdentifierKey(DroolsSoftKeywords.ENTRY) && validateLT(2, \"-\") && validateLT(3, DroolsSoftKeywords.POINT))");
             }
-            ID310=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key4589); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID310);
+            ID335=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4841); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID335);
 
-            MISC311=(Token)input.LT(1);
-            match(input,MISC,FOLLOW_MISC_in_entry_point_key4591); if (failed) return retval;
-            if ( backtracking==0 ) stream_MISC.add(MISC311);
+            MISC336=(Token)input.LT(1);
+            match(input,MISC,FOLLOW_MISC_in_entry_point_key4843); if (failed) return retval;
+            if ( backtracking==0 ) stream_MISC.add(MISC336);
 
-            ID312=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_entry_point_key4593); if (failed) return retval;
-            if ( backtracking==0 ) stream_ID.add(ID312);
+            ID337=(Token)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_entry_point_key4845); if (failed) return retval;
+            if ( backtracking==0 ) stream_ID.add(ID337);
 
             if ( backtracking==0 ) {
               text = input.toString(retval.start,input.LT(-1));
@@ -14315,7 +15228,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 966:2: -> VK_ENTRY_POINT[$start, text]
+            // 1011:2: -> VK_ENTRY_POINT[$start, text]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ENTRY_POINT, ((Token)retval.start),  text));
 
@@ -14348,7 +15261,7 @@
     };
 
     // $ANTLR start accumulate_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:969:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1014:1: accumulate_key : {...}? =>id= ID -> VK_ACCUMULATE[$id] ;
     public final accumulate_key_return accumulate_key() throws RecognitionException {
         accumulate_key_return retval = new accumulate_key_return();
         retval.start = input.LT(1);
@@ -14361,15 +15274,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:970:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:970:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:2: ({...}? =>id= ID -> VK_ACCUMULATE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1015:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "accumulate_key", "(validateIdentifierKey(DroolsSoftKeywords.ACCUMULATE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_key4618); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_accumulate_key4870); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14384,7 +15297,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 970:71: -> VK_ACCUMULATE[$id]
+            // 1015:71: -> VK_ACCUMULATE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACCUMULATE, id));
 
@@ -14417,7 +15330,7 @@
     };
 
     // $ANTLR start init_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:973:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1018:1: init_key : {...}? =>id= ID -> VK_INIT[$id] ;
     public final init_key_return init_key() throws RecognitionException {
         init_key_return retval = new init_key_return();
         retval.start = input.LT(1);
@@ -14430,15 +15343,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:974:2: ({...}? =>id= ID -> VK_INIT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:974:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:2: ({...}? =>id= ID -> VK_INIT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1019:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "init_key", "(validateIdentifierKey(DroolsSoftKeywords.INIT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_init_key4640); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_init_key4892); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14453,7 +15366,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 974:65: -> VK_INIT[$id]
+            // 1019:65: -> VK_INIT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_INIT, id));
 
@@ -14486,7 +15399,7 @@
     };
 
     // $ANTLR start action_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:977:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1022:1: action_key : {...}? =>id= ID -> VK_ACTION[$id] ;
     public final action_key_return action_key() throws RecognitionException {
         action_key_return retval = new action_key_return();
         retval.start = input.LT(1);
@@ -14499,15 +15412,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:978:2: ({...}? =>id= ID -> VK_ACTION[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:978:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023:2: ({...}? =>id= ID -> VK_ACTION[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1023:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.ACTION))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "action_key", "(validateIdentifierKey(DroolsSoftKeywords.ACTION))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_action_key4662); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_action_key4914); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14522,7 +15435,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 978:67: -> VK_ACTION[$id]
+            // 1023:67: -> VK_ACTION[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_ACTION, id));
 
@@ -14555,7 +15468,7 @@
     };
 
     // $ANTLR start reverse_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:981:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1026:1: reverse_key : {...}? =>id= ID -> VK_REVERSE[$id] ;
     public final reverse_key_return reverse_key() throws RecognitionException {
         reverse_key_return retval = new reverse_key_return();
         retval.start = input.LT(1);
@@ -14568,15 +15481,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:982:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:982:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:2: ({...}? =>id= ID -> VK_REVERSE[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1027:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "reverse_key", "(validateIdentifierKey(DroolsSoftKeywords.REVERSE))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_reverse_key4684); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_reverse_key4936); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14591,7 +15504,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 982:68: -> VK_REVERSE[$id]
+            // 1027:68: -> VK_REVERSE[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_REVERSE, id));
 
@@ -14624,7 +15537,7 @@
     };
 
     // $ANTLR start result_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:985:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1030:1: result_key : {...}? =>id= ID -> VK_RESULT[$id] ;
     public final result_key_return result_key() throws RecognitionException {
         result_key_return retval = new result_key_return();
         retval.start = input.LT(1);
@@ -14637,15 +15550,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:986:2: ({...}? =>id= ID -> VK_RESULT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:986:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:2: ({...}? =>id= ID -> VK_RESULT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1031:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "result_key", "(validateIdentifierKey(DroolsSoftKeywords.RESULT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_result_key4706); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_result_key4958); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14660,7 +15573,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 986:67: -> VK_RESULT[$id]
+            // 1031:67: -> VK_RESULT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_RESULT, id));
 
@@ -14693,7 +15606,7 @@
     };
 
     // $ANTLR start collect_key
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:989:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1034:1: collect_key : {...}? =>id= ID -> VK_COLLECT[$id] ;
     public final collect_key_return collect_key() throws RecognitionException {
         collect_key_return retval = new collect_key_return();
         retval.start = input.LT(1);
@@ -14706,15 +15619,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:990:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:990:4: {...}? =>id= ID
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:2: ({...}? =>id= ID -> VK_COLLECT[$id] )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:1035:4: {...}? =>id= ID
             {
             if ( !((validateIdentifierKey(DroolsSoftKeywords.COLLECT))) ) {
                 if (backtracking>0) {failed=true; return retval;}
                 throw new FailedPredicateException(input, "collect_key", "(validateIdentifierKey(DroolsSoftKeywords.COLLECT))");
             }
             id=(Token)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_collect_key4728); if (failed) return retval;
+            match(input,ID,FOLLOW_ID_in_collect_key4980); if (failed) return retval;
             if ( backtracking==0 ) stream_ID.add(id);
 
 
@@ -14729,7 +15642,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 990:68: -> VK_COLLECT[$id]
+            // 1035:68: -> VK_COLLECT[$id]
             {
                 adaptor.addChild(root_0, adaptor.create(VK_COLLECT, id));
 
@@ -14758,11 +15671,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:5: ( LEFT_PAREN or_key )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:517:6: LEFT_PAREN or_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11638); if (failed) return ;
-        pushFollow(FOLLOW_or_key_in_synpred11640);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred11833); if (failed) return ;
+        pushFollow(FOLLOW_or_key_in_synpred11835);
         or_key();
         _fsp--;
         if (failed) return ;
@@ -14773,28 +15686,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:5: ( or_key | DOUBLE_PIPE )
+        int alt99=2;
+        int LA99_0 = input.LA(1);
 
-        if ( (LA93_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
-            alt93=1;
+        if ( (LA99_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.OR)))) {
+            alt99=1;
         }
-        else if ( (LA93_0==DOUBLE_PIPE) ) {
-            alt93=2;
+        else if ( (LA99_0==DOUBLE_PIPE) ) {
+            alt99=2;
         }
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("485:5: synpred2 : ( or_key | DOUBLE_PIPE );", 93, 0, input);
+                new NoViableAltException("520:5: synpred2 : ( or_key | DOUBLE_PIPE );", 99, 0, input);
 
             throw nvae;
         }
-        switch (alt93) {
+        switch (alt99) {
             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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:6: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred21687);
+                pushFollow(FOLLOW_or_key_in_synpred21882);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -14802,9 +15715,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:520:13: DOUBLE_PIPE
                 {
-                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21689); if (failed) return ;
+                match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred21884); if (failed) return ;
 
                 }
                 break;
@@ -14814,11 +15727,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:5: ( LEFT_PAREN and_key )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:527:6: LEFT_PAREN and_key
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31740); if (failed) return ;
-        pushFollow(FOLLOW_and_key_in_synpred31742);
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred31935); if (failed) return ;
+        pushFollow(FOLLOW_and_key_in_synpred31937);
         and_key();
         _fsp--;
         if (failed) return ;
@@ -14829,28 +15742,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:5: ( and_key | DOUBLE_AMPER )
+        int alt100=2;
+        int LA100_0 = input.LA(1);
 
-        if ( (LA94_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.AND)))) {
-            alt94=1;
+        if ( (LA100_0==ID) && ((validateIdentifierKey(DroolsSoftKeywords.AND)))) {
+            alt100=1;
         }
-        else if ( (LA94_0==DOUBLE_AMPER) ) {
-            alt94=2;
+        else if ( (LA100_0==DOUBLE_AMPER) ) {
+            alt100=2;
         }
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("495:5: synpred4 : ( and_key | DOUBLE_AMPER );", 94, 0, input);
+                new NoViableAltException("530:5: synpred4 : ( and_key | DOUBLE_AMPER );", 100, 0, input);
 
             throw nvae;
         }
-        switch (alt94) {
+        switch (alt100) {
             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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:6: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred41789);
+                pushFollow(FOLLOW_and_key_in_synpred41984);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -14858,9 +15771,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:530:14: DOUBLE_AMPER
                 {
-                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred41791); if (failed) return ;
+                match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred41986); if (failed) return ;
 
                 }
                 break;
@@ -14870,10 +15783,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:4: ( SEMICOLON )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:543:5: SEMICOLON
         {
-        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred51893); if (failed) return ;
+        match(input,SEMICOLON,FOLLOW_SEMICOLON_in_synpred52088); if (failed) return ;
 
         }
     }
@@ -14881,27 +15794,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:12: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:13: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred61925); 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_synpred62120); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:24: ( or_key | and_key )
+        int alt101=2;
+        int LA101_0 = input.LA(1);
 
-        if ( (LA95_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-            int LA95_1 = input.LA(2);
+        if ( (LA101_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+            int LA101_1 = input.LA(2);
 
             if ( ((validateIdentifierKey(DroolsSoftKeywords.OR))) ) {
-                alt95=1;
+                alt101=1;
             }
             else if ( ((validateIdentifierKey(DroolsSoftKeywords.AND))) ) {
-                alt95=2;
+                alt101=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("513:24: ( or_key | and_key )", 95, 1, input);
+                    new NoViableAltException("548:24: ( or_key | and_key )", 101, 1, input);
 
                 throw nvae;
             }
@@ -14909,15 +15822,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("513:24: ( or_key | and_key )", 95, 0, input);
+                new NoViableAltException("548:24: ( or_key | and_key )", 101, 0, input);
 
             throw nvae;
         }
-        switch (alt95) {
+        switch (alt101) {
             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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:25: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred61928);
+                pushFollow(FOLLOW_or_key_in_synpred62123);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -14925,9 +15838,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:548:32: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred61930);
+                pushFollow(FOLLOW_and_key_in_synpred62125);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -14944,27 +15857,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:5: ( LEFT_PAREN ( or_key | and_key ) )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:6: LEFT_PAREN ( or_key | and_key )
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred72012); 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_synpred72207); if (failed) return ;
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:17: ( or_key | and_key )
+        int alt102=2;
+        int LA102_0 = input.LA(1);
 
-        if ( (LA96_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
-            int LA96_1 = input.LA(2);
+        if ( (LA102_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.AND))||(validateIdentifierKey(DroolsSoftKeywords.OR))))) {
+            int LA102_1 = input.LA(2);
 
             if ( ((validateIdentifierKey(DroolsSoftKeywords.OR))) ) {
-                alt96=1;
+                alt102=1;
             }
             else if ( ((validateIdentifierKey(DroolsSoftKeywords.AND))) ) {
-                alt96=2;
+                alt102=2;
             }
             else {
                 if (backtracking>0) {failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("521:17: ( or_key | and_key )", 96, 1, input);
+                    new NoViableAltException("556:17: ( or_key | and_key )", 102, 1, input);
 
                 throw nvae;
             }
@@ -14972,15 +15885,15 @@
         else {
             if (backtracking>0) {failed=true; return ;}
             NoViableAltException nvae =
-                new NoViableAltException("521:17: ( or_key | and_key )", 96, 0, input);
+                new NoViableAltException("556:17: ( or_key | and_key )", 102, 0, input);
 
             throw nvae;
         }
-        switch (alt96) {
+        switch (alt102) {
             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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:18: or_key
                 {
-                pushFollow(FOLLOW_or_key_in_synpred72015);
+                pushFollow(FOLLOW_or_key_in_synpred72210);
                 or_key();
                 _fsp--;
                 if (failed) return ;
@@ -14988,9 +15901,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:556:25: and_key
                 {
-                pushFollow(FOLLOW_and_key_in_synpred72017);
+                pushFollow(FOLLOW_and_key_in_synpred72212);
                 and_key();
                 _fsp--;
                 if (failed) return ;
@@ -15007,10 +15920,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:5: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:639:6: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82513); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred82765); if (failed) return ;
 
         }
     }
@@ -15018,10 +15931,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:6: ( LEFT_SQUARE )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:648:8: LEFT_SQUARE
         {
-        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92574); if (failed) return ;
+        match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_synpred92826); if (failed) return ;
 
         }
     }
@@ -15029,10 +15942,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-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:6: ( LEFT_PAREN )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:650:8: LEFT_PAREN
         {
-        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102596); if (failed) return ;
+        match(input,LEFT_PAREN,FOLLOW_LEFT_PAREN_in_synpred102848); if (failed) return ;
 
         }
     }
@@ -15040,10 +15953,10 @@
 
     // $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:675:26: ( DOUBLE_PIPE )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:675:27: DOUBLE_PIPE
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:26: ( DOUBLE_PIPE )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:720:27: DOUBLE_PIPE
         {
-        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred113060); if (failed) return ;
+        match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_synpred113312); if (failed) return ;
 
         }
     }
@@ -15051,10 +15964,10 @@
 
     // $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:679:27: ( DOUBLE_AMPER )
-        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DRL.g:679:28: DOUBLE_AMPER
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:27: ( DOUBLE_AMPER )
+        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g:724:28: DOUBLE_AMPER
         {
-        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred123086); if (failed) return ;
+        match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_synpred123338); if (failed) return ;
 
         }
     }
@@ -15230,2315 +16143,25 @@
     }
 
 
-    protected DFA5 dfa5 = new DFA5(this);
     protected DFA12 dfa12 = new DFA12(this);
     protected DFA17 dfa17 = new DFA17(this);
-    protected DFA24 dfa24 = new DFA24(this);
-    protected DFA30 dfa30 = new DFA30(this);
-    protected DFA47 dfa47 = new DFA47(this);
-    protected DFA48 dfa48 = new DFA48(this);
-    protected DFA53 dfa53 = new DFA53(this);
-    protected DFA57 dfa57 = new DFA57(this);
-    protected DFA74 dfa74 = new DFA74(this);
-    protected DFA75 dfa75 = new DFA75(this);
-    static final String DFA5_eotS =
-        "\u0085\uffff";
-    static final String DFA5_eofS =
-        "\3\uffff\1\17\1\22\11\uffff\1\17\10\uffff\1\17\5\uffff\1\17\2\uffff"+
-        "\1\17\5\uffff\1\22\1\uffff\1\22\5\uffff\1\17\5\uffff\2\107\1\uffff"+
-        "\1\22\5\uffff\2\17\2\uffff\1\17\2\uffff\1\17\4\uffff\2\22\3\uffff"+
-        "\1\22\1\uffff\1\22\5\uffff\2\17\1\uffff\1\17\2\22\5\uffff\1\17\1"+
-        "\uffff\2\17\4\uffff\1\22\1\uffff\2\22\3\uffff\1\17\4\uffff\1\22"+
-        "\1\uffff\1\17\5\uffff\1\22\7\uffff";
-    static final String DFA5_minS =
-        "\2\126\1\uffff\2\125\3\uffff\2\126\2\uffff\1\126\1\156\1\126\1\uffff"+
-        "\1\126\2\uffff\5\126\2\0\1\126\1\156\1\0\1\126\2\uffff\1\125\3\126"+
-        "\2\0\1\126\1\0\1\126\1\156\1\126\1\0\1\126\1\uffff\1\126\2\0\3\126"+
-        "\2\125\1\0\11\126\1\0\1\126\2\0\1\126\1\0\1\4\1\uffff\4\126\2\0"+
-        "\1\126\1\0\1\126\1\134\1\126\1\156\1\134\1\156\2\126\1\4\3\126\1"+
-        "\156\2\126\1\156\5\126\4\4\4\126\1\134\1\156\1\134\1\126\4\4\3\126"+
-        "\5\4\1\126\7\4";
-    static final String DFA5_maxS =
-        "\1\126\1\162\1\uffff\2\157\3\uffff\1\135\1\162\2\uffff\1\126\1\156"+
-        "\1\126\1\uffff\1\162\2\uffff\1\155\1\160\1\126\2\157\2\0\1\126\1"+
-        "\156\1\0\1\157\2\uffff\2\155\1\162\1\126\2\0\1\157\1\0\1\157\1\156"+
-        "\1\126\1\0\1\126\1\uffff\1\162\2\0\1\162\2\155\1\162\1\133\1\0\2"+
-        "\162\3\155\1\126\2\157\1\126\1\0\1\157\2\0\1\157\1\0\1\173\1\uffff"+
-        "\1\126\2\157\1\126\2\0\1\157\1\0\1\157\1\155\1\126\1\156\1\155\1"+
-        "\156\1\157\1\162\1\173\1\160\1\157\1\162\1\156\2\155\1\156\1\155"+
-        "\1\157\1\126\2\157\4\173\1\157\1\126\2\157\1\155\1\156\1\155\1\157"+
-        "\4\173\1\157\1\155\1\157\5\173\1\157\7\173";
-    static final String DFA5_acceptS =
-        "\2\uffff\1\1\2\uffff\3\1\2\uffff\1\10\1\7\3\uffff\1\3\1\uffff\1"+
-        "\6\1\1\13\uffff\1\2\1\4\15\uffff\1\5\31\uffff\1\4\75\uffff";
-    static final String DFA5_specialS =
-        "\1\14\1\62\1\uffff\1\130\1\103\3\uffff\1\34\1\127\2\uffff\1\163"+
-        "\1\154\1\5\1\uffff\1\107\2\uffff\1\122\1\104\1\24\1\121\1\46\1\111"+
-        "\1\13\1\37\1\33\1\162\1\74\2\uffff\1\1\1\141\1\132\1\76\1\40\1\112"+
-        "\1\144\1\102\1\32\1\136\1\115\1\26\1\10\1\uffff\1\2\1\52\1\145\1"+
-        "\156\1\43\1\41\1\65\1\42\1\150\1\143\1\56\1\161\1\60\1\16\1\55\1"+
-        "\75\1\7\1\25\1\151\1\11\1\146\1\64\1\110\1\157\1\167\1\uffff\1\153"+
-        "\1\22\1\47\1\77\1\17\1\44\1\6\1\133\1\106\1\15\1\66\1\61\1\147\1"+
-        "\67\1\114\1\12\1\53\1\72\1\120\1\142\1\30\1\117\1\63\1\31\1\23\1"+
-        "\131\1\54\1\0\1\51\1\101\1\36\1\71\1\4\1\134\1\152\1\113\1\57\1"+
-        "\45\1\27\1\35\1\50\1\135\1\73\1\140\1\126\1\165\1\164\1\160\1\70"+
-        "\1\100\1\166\1\125\1\116\1\105\1\137\1\155\1\124\1\21\1\123\1\3"+
-        "\1\20}>";
-    static final String[] DFA5_transitionS = {
-            "\1\1",
-            "\1\3\3\uffff\1\4\1\7\3\uffff\1\6\1\5\21\uffff\1\2",
-            "",
-            "\1\16\1\11\1\14\1\17\1\12\1\uffff\1\10\21\uffff\1\15\1\uffff"+
-            "\1\13",
-            "\1\21\1\20\2\uffff\1\12\1\uffff\1\12\23\uffff\1\13",
-            "",
-            "",
-            "",
-            "\1\23\4\uffff\1\12\1\uffff\1\24",
-            "\1\31\1\32\2\uffff\1\34\1\30\2\uffff\1\26\1\35\1\27\14\uffff"+
-            "\1\33\1\uffff\1\13\2\uffff\1\25",
-            "",
-            "",
-            "\1\40",
-            "\1\41",
-            "\1\42",
-            "",
-            "\1\44\1\32\2\uffff\1\45\1\47\2\uffff\1\26\1\50\1\46\14\uffff"+
-            "\1\33\1\uffff\1\13\2\uffff\1\43",
-            "",
-            "",
-            "\1\53\1\54\3\uffff\1\12\1\52\1\24\1\12\16\uffff\1\51",
-            "\1\12\2\uffff\1\12\1\uffff\1\12\24\uffff\1\55",
-            "\1\56",
-            "\1\57\4\uffff\1\60\23\uffff\1\13",
-            "\1\61\5\uffff\1\13\22\uffff\1\13",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\62",
-            "\1\63",
-            "\1\uffff",
-            "\1\61\5\uffff\1\13\22\uffff\1\13",
-            "",
-            "",
-            "\1\17\1\64\1\14\1\17\24\uffff\1\15",
-            "\1\65\26\uffff\1\15",
-            "\1\66\1\21\2\uffff\2\17\3\uffff\2\17\14\uffff\1\21\4\uffff\1"+
-            "\17",
-            "\1\67",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\70\5\uffff\1\13\22\uffff\1\13",
-            "\1\uffff",
-            "\1\70\5\uffff\1\13\22\uffff\1\13",
-            "\1\71",
-            "\1\72",
-            "\1\uffff",
-            "\1\73",
-            "",
-            "\1\61\3\uffff\1\76\1\uffff\1\13\2\uffff\1\75\17\uffff\1\13\2"+
-            "\uffff\1\74",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\100\3\uffff\1\103\1\102\2\uffff\1\13\1\104\1\101\16\uffff"+
-            "\1\13\2\uffff\1\77",
-            "\1\21\1\32\3\uffff\1\12\21\uffff\1\33",
-            "\1\21\4\uffff\1\12\21\uffff\1\33",
-            "\1\107\1\105\3\uffff\1\17\1\106\3\uffff\2\17\21\uffff\1\17",
-            "\2\107\4\uffff\1\55",
-            "\1\uffff",
-            "\1\70\3\uffff\1\111\1\uffff\1\13\2\uffff\1\112\17\uffff\1\13"+
-            "\2\uffff\1\110",
-            "\1\114\3\uffff\1\115\1\117\2\uffff\1\13\1\120\1\116\16\uffff"+
-            "\1\13\2\uffff\1\113",
-            "\1\121\4\uffff\1\12\1\52\1\24\17\uffff\1\51",
-            "\1\124\1\122\4\uffff\1\52\1\24\17\uffff\1\123",
-            "\1\121\1\54\3\uffff\1\12\21\uffff\1\125",
-            "\1\126",
-            "\1\61\5\uffff\1\13\22\uffff\1\13",
-            "\1\61\5\uffff\1\13\22\uffff\1\13",
-            "\1\127",
-            "\1\uffff",
-            "\1\61\5\uffff\1\13\22\uffff\1\13",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\61\5\uffff\1\13\22\uffff\1\13",
-            "\1\uffff",
-            "\122\17\1\130\6\17\1\131\36\17",
-            "",
-            "\1\132",
-            "\1\70\5\uffff\1\13\22\uffff\1\13",
-            "\1\70\5\uffff\1\13\22\uffff\1\13",
-            "\1\133",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\70\5\uffff\1\13\22\uffff\1\13",
-            "\1\uffff",
-            "\1\70\5\uffff\1\13\22\uffff\1\13",
-            "\1\52\1\24\17\uffff\1\134",
-            "\1\135",
-            "\1\136",
-            "\1\52\1\24\17\uffff\1\137",
-            "\1\140",
-            "\1\61\5\uffff\1\13\2\uffff\1\141\17\uffff\1\13",
-            "\1\61\3\uffff\1\144\1\uffff\1\13\2\uffff\1\143\17\uffff\1\13"+
-            "\2\uffff\1\142",
-            "\122\17\1\150\1\147\4\17\1\146\1\131\17\17\1\145\16\17",
-            "\1\17\31\uffff\1\55",
-            "\1\70\5\uffff\1\13\2\uffff\1\151\17\uffff\1\13",
-            "\1\70\3\uffff\1\153\1\uffff\1\13\2\uffff\1\154\17\uffff\1\13"+
-            "\2\uffff\1\152",
-            "\1\155",
-            "\1\124\1\122\25\uffff\1\156",
-            "\1\124\5\uffff\1\52\1\24\17\uffff\1\123",
-            "\1\157",
-            "\1\121\4\uffff\1\12\21\uffff\1\125",
-            "\1\61\5\uffff\1\13\22\uffff\1\13",
-            "\1\160",
-            "\1\61\5\uffff\1\13\22\uffff\1\13",
-            "\1\61\5\uffff\1\13\22\uffff\1\13",
-            "\152\17\1\161\15\17",
-            "\122\17\1\162\45\17",
-            "\122\17\1\163\45\17",
-            "\130\17\1\146\1\131\17\17\1\164\16\17",
-            "\1\70\5\uffff\1\13\22\uffff\1\13",
-            "\1\165",
-            "\1\70\5\uffff\1\13\22\uffff\1\13",
-            "\1\70\5\uffff\1\13\22\uffff\1\13",
-            "\1\52\1\24\17\uffff\1\134",
-            "\1\166",
-            "\1\52\1\24\17\uffff\1\137",
-            "\1\61\5\uffff\1\13\2\uffff\1\167\17\uffff\1\13",
-            "\122\17\1\150\5\17\1\146\1\131\17\17\1\145\16\17",
-            "\122\17\1\172\1\170\4\17\1\146\1\131\17\17\1\171\16\17",
-            "\122\17\1\150\1\147\25\17\1\173\16\17",
-            "\152\17\1\174\15\17",
-            "\1\70\5\uffff\1\13\2\uffff\1\175\17\uffff\1\13",
-            "\1\124\26\uffff\1\156",
-            "\1\61\5\uffff\1\13\22\uffff\1\13",
-            "\122\17\1\176\45\17",
-            "\152\17\1\177\15\17",
-            "\130\17\1\146\1\131\17\17\1\u0080\16\17",
-            "\152\17\1\u0081\15\17",
-            "\130\17\1\146\1\131\17\17\1\164\16\17",
-            "\1\70\5\uffff\1\13\22\uffff\1\13",
-            "\122\17\1\172\1\170\25\17\1\u0082\16\17",
-            "\122\17\1\172\5\17\1\146\1\131\17\17\1\171\16\17",
-            "\152\17\1\u0083\15\17",
-            "\122\17\1\150\26\17\1\173\16\17",
-            "\152\17\1\u0084\15\17",
-            "\130\17\1\146\1\131\17\17\1\u0080\16\17",
-            "\122\17\1\172\26\17\1\u0082\16\17"
-    };
-
-    static final short[] DFA5_eot = DFA.unpackEncodedString(DFA5_eotS);
-    static final short[] DFA5_eof = DFA.unpackEncodedString(DFA5_eofS);
-    static final char[] DFA5_min = DFA.unpackEncodedStringToUnsignedChars(DFA5_minS);
-    static final char[] DFA5_max = DFA.unpackEncodedStringToUnsignedChars(DFA5_maxS);
-    static final short[] DFA5_accept = DFA.unpackEncodedString(DFA5_acceptS);
-    static final short[] DFA5_special = DFA.unpackEncodedString(DFA5_specialS);
-    static final short[][] DFA5_transition;
-
-    static {
-        int numStates = DFA5_transitionS.length;
-        DFA5_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA5_transition[i] = DFA.unpackEncodedString(DFA5_transitionS[i]);
-        }
-    }
-
-    class DFA5 extends DFA {
-
-        public DFA5(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 5;
-            this.eot = DFA5_eot;
-            this.eof = DFA5_eof;
-            this.min = DFA5_min;
-            this.max = DFA5_max;
-            this.accept = DFA5_accept;
-            this.special = DFA5_special;
-            this.transition = DFA5_transition;
-        }
-        public String getDescription() {
-            return "267: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_99 = input.LA(1);
-
-                         
-                        int index5_99 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_99==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_99==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_99==COMMA||LA5_99==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_99);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA5_32 = input.LA(1);
-
-                         
-                        int index5_32 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_32==EOF||LA5_32==SEMICOLON||LA5_32==DOT_STAR) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_32==ID) && (((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 52;}
-
-                        else if ( (LA5_32==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 12;}
-
-                        else if ( (LA5_32==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 13;}
-
-                         
-                        input.seek(index5_32);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA5_46 = input.LA(1);
-
-                         
-                        int index5_46 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_46==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 60;}
-
-                        else if ( (LA5_46==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 61;}
-
-                        else if ( (LA5_46==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_46==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_46==COMMA||LA5_46==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_46==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 62;}
-
-                         
-                        input.seek(index5_46);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 3 : 
-                        int LA5_131 = input.LA(1);
-
-                         
-                        int index5_131 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_131==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 89;}
-
-                        else if ( (LA5_131==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 102;}
-
-                        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(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_131==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 128;}
-
-                         
-                        input.seek(index5_131);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 4 : 
-                        int LA5_104 = input.LA(1);
-
-                         
-                        int index5_104 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_104==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 116;}
-
-                        else if ( (LA5_104==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 102;}
-
-                        else if ( (LA5_104==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 89;}
-
-                        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(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_104);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 5 : 
-                        int LA5_14 = input.LA(1);
-
-                         
-                        int index5_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_14==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 34;}
-
-                        else if ( (LA5_14==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_14);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 6 : 
-                        int LA5_78 = input.LA(1);
-
-                         
-                        int index5_78 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_78==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_78==COMMA||LA5_78==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_78==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                         
-                        input.seek(index5_78);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 7 : 
-                        int LA5_62 = input.LA(1);
-
-                         
-                        int index5_62 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_62==COMMA||LA5_62==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_62==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_62==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_62);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 8 : 
-                        int LA5_44 = input.LA(1);
-
-                         
-                        int index5_44 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_44==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 59;}
-
-                         
-                        input.seek(index5_44);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 9 : 
-                        int LA5_65 = input.LA(1);
-
-                         
-                        int index5_65 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_65==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_65==COMMA||LA5_65==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_65==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_65);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 10 : 
-                        int LA5_87 = input.LA(1);
-
-                         
-                        int index5_87 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_87==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 98;}
-
-                        else if ( (LA5_87==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 99;}
-
-                        else if ( (LA5_87==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_87==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_87==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 100;}
-
-                        else if ( (LA5_87==COMMA||LA5_87==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_87);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 11 : 
-                        int LA5_25 = input.LA(1);
-
-                         
-                        int index5_25 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))) ) {s = 17;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {s = 10;}
-
-                         
-                        input.seek(index5_25);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 12 : 
-                        int LA5_0 = input.LA(1);
-
-                         
-                        int index5_0 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPOR!
 T)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||(validateIdentifierKey(Drool!
 sSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftK
eywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))))) {s = 1;}
-
-                         
-                        input.seek(index5_0);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 13 : 
-                        int LA5_81 = input.LA(1);
-
-                         
-                        int index5_81 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_81==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 92;}
-
-                        else if ( (LA5_81==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 42;}
-
-                        else if ( (LA5_81==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 20;}
-
-                         
-                        input.seek(index5_81);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 14 : 
-                        int LA5_59 = input.LA(1);
-
-                         
-                        int index5_59 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_59==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 85;}
-
-                        else if ( (LA5_59==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 81;}
-
-                        else if ( (LA5_59==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 44;}
-
-                        else if ( (LA5_59==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
-
-                         
-                        input.seek(index5_59);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 15 : 
-                        int LA5_76 = input.LA(1);
-
-                         
-                        int index5_76 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {s = 18;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                         
-                        input.seek(index5_76);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 16 : 
-                        int LA5_132 = input.LA(1);
-
-                         
-                        int index5_132 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_132==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 122;}
-
-                        else if ( (LA5_132==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 130;}
-
-                        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(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_132);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 17 : 
-                        int LA5_129 = input.LA(1);
-
-                         
-                        int index5_129 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((LA5_129>=VT_COMPILATION_UNIT && LA5_129<=SEMICOLON)||(LA5_129>=DOT && LA5_129<=NULL)||(LA5_129>=RIGHT_SQUARE && LA5_129<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_129==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 104;}
-
-                        else if ( (LA5_129==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 123;}
-
-                         
-                        input.seek(index5_129);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 18 : 
-                        int LA5_73 = input.LA(1);
-
-                         
-                        int index5_73 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_73==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                        else if ( (LA5_73==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_73==COMMA||LA5_73==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_73);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 19 : 
-                        int LA5_96 = input.LA(1);
-
-                         
-                        int index5_96 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_96==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
-
-                        else if ( (LA5_96==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 85;}
-
-                        else if ( (LA5_96==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 81;}
-
-                         
-                        input.seek(index5_96);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 20 : 
-                        int LA5_21 = input.LA(1);
-
-                         
-                        int index5_21 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_21==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 46;}
-
-                         
-                        input.seek(index5_21);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 21 : 
-                        int LA5_63 = input.LA(1);
-
-                         
-                        int index5_63 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_63==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 87;}
-
-                         
-                        input.seek(index5_63);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 22 : 
-                        int LA5_43 = input.LA(1);
-
-                         
-                        int index5_43 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.FUNCTION))) ) {s = 45;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {s = 10;}
-
-                         
-                        input.seek(index5_43);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 23 : 
-                        int LA5_110 = input.LA(1);
-
-                         
-                        int index5_110 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_110==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 118;}
-
-                         
-                        input.seek(index5_110);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 24 : 
-                        int LA5_92 = input.LA(1);
-
-                         
-                        int index5_92 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_92==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 109;}
-
-                         
-                        input.seek(index5_92);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 25 : 
-                        int LA5_95 = input.LA(1);
-
-                         
-                        int index5_95 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_95==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 111;}
-
-                         
-                        input.seek(index5_95);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 26 : 
-                        int LA5_40 = input.LA(1);
-
-                         
-                        int index5_40 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_40==COMMA||LA5_40==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_40==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_40==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                         
-                        input.seek(index5_40);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 27 : 
-                        int LA5_27 = input.LA(1);
-
-                         
-                        int index5_27 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_27==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 51;}
-
-                         
-                        input.seek(index5_27);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 28 : 
-                        int LA5_8 = input.LA(1);
-
-                         
-                        int index5_8 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_8==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 19;}
-
-                        else if ( (LA5_8==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 20;}
-
-                        else if ( (LA5_8==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
-
-                         
-                        input.seek(index5_8);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 29 : 
-                        int LA5_111 = input.LA(1);
-
-                         
-                        int index5_111 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_111==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 20;}
-
-                        else if ( (LA5_111==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 42;}
-
-                        else if ( (LA5_111==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 95;}
-
-                         
-                        input.seek(index5_111);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 30 : 
-                        int LA5_102 = input.LA(1);
-
-                         
-                        int index5_102 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_102==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 114;}
-
-                        else if ( ((LA5_102>=VT_COMPILATION_UNIT && LA5_102<=SEMICOLON)||(LA5_102>=DOT && LA5_102<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_102);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 31 : 
-                        int LA5_26 = input.LA(1);
-
-                         
-                        int index5_26 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_26==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 50;}
-
-                         
-                        input.seek(index5_26);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 32 : 
-                        int LA5_36 = input.LA(1);
-
-                         
-                        int index5_36 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {s = 18;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))) ) {s = 17;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {s = 10;}
-
-                         
-                        input.seek(index5_36);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 33 : 
-                        int LA5_51 = input.LA(1);
-
-                         
-                        int index5_51 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_51==ID) && ((validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))) {s = 17;}
-
-                        else if ( (LA5_51==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 27;}
-
-                        else if ( (LA5_51==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
-
-                         
-                        input.seek(index5_51);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 34 : 
-                        int LA5_53 = input.LA(1);
-
-                         
-                        int index5_53 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_53==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.FUNCTION)))) {s = 45;}
-
-                        else if ( (LA5_53==EOF||(LA5_53>=SEMICOLON && LA5_53<=ID)) && ((validateIdentifierKey(DroolsSoftKeywords.GLOBAL)))) {s = 71;}
-
-                         
-                        input.seek(index5_53);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 35 : 
-                        int LA5_50 = input.LA(1);
-
-                         
-                        int index5_50 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_50==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 27;}
-
-                        else if ( (LA5_50==ID) && ((validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))) {s = 17;}
-
-                        else if ( (LA5_50==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 26;}
-
-                        else if ( (LA5_50==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
-
-                         
-                        input.seek(index5_50);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 36 : 
-                        int LA5_77 = input.LA(1);
-
-                         
-                        int index5_77 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {s = 18;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                         
-                        input.seek(index5_77);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 37 : 
-                        int LA5_109 = input.LA(1);
-
-                         
-                        int index5_109 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_109==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 42;}
-
-                        else if ( (LA5_109==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 20;}
-
-                        else if ( (LA5_109==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 92;}
-
-                         
-                        input.seek(index5_109);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 38 : 
-                        int LA5_23 = input.LA(1);
-
-                         
-                        int index5_23 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_23==COMMA||LA5_23==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_23==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_23==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_23);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 39 : 
-                        int LA5_74 = input.LA(1);
-
-                         
-                        int index5_74 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_74==COMMA||LA5_74==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_74==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_74==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                         
-                        input.seek(index5_74);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 40 : 
-                        int LA5_112 = input.LA(1);
-
-                         
-                        int index5_112 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_112==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 119;}
-
-                        else if ( (LA5_112==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_112==COMMA||LA5_112==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_112==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_112);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 41 : 
-                        int LA5_100 = input.LA(1);
-
-                         
-                        int index5_100 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_100==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_100==COMMA||LA5_100==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_100==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_100);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 42 : 
-                        int LA5_47 = input.LA(1);
-
-                         
-                        int index5_47 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {s = 10;}
-
-                         
-                        input.seek(index5_47);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 43 : 
-                        int LA5_88 = input.LA(1);
-
-                         
-                        int index5_88 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_88==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 101;}
-
-                        else if ( (LA5_88==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 102;}
-
-                        else if ( (LA5_88==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 89;}
-
-                        else if ( (LA5_88==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 103;}
-
-                        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(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_88==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 104;}
-
-                         
-                        input.seek(index5_88);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 44 : 
-                        int LA5_98 = input.LA(1);
-
-                         
-                        int index5_98 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_98==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 112;}
-
-                         
-                        input.seek(index5_98);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 45 : 
-                        int LA5_60 = input.LA(1);
-
-                         
-                        int index5_60 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_60==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 86;}
-
-                         
-                        input.seek(index5_60);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 46 : 
-                        int LA5_56 = input.LA(1);
-
-                         
-                        int index5_56 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_56==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 75;}
-
-                        else if ( (LA5_56==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 76;}
-
-                        else if ( (LA5_56==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 77;}
-
-                        else if ( (LA5_56==INT) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 78;}
-
-                        else if ( (LA5_56==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 79;}
-
-                        else if ( (LA5_56==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 80;}
-
-                        else if ( (LA5_56==COLON||LA5_56==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_56);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 47 : 
-                        int LA5_108 = input.LA(1);
-
-                         
-                        int index5_108 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_108==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                        else if ( (LA5_108==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_108==COMMA||LA5_108==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_108);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 48 : 
-                        int LA5_58 = input.LA(1);
-
-                         
-                        int index5_58 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_58==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 82;}
-
-                        else if ( (LA5_58==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 83;}
-
-                        else if ( (LA5_58==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 84;}
-
-                        else if ( (LA5_58==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 20;}
-
-                        else if ( (LA5_58==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 42;}
-
-                         
-                        input.seek(index5_58);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 49 : 
-                        int LA5_83 = input.LA(1);
-
-                         
-                        int index5_83 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_83==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 94;}
-
-                         
-                        input.seek(index5_83);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 50 : 
-                        int LA5_1 = input.LA(1);
-
-                         
-                        int index5_1 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT!
 (2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 2;}
-
-                        else if ( (LA5_1==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIde!
 ntifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 3;}
-
-                        else if ( (LA5_1==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 4;}
-
-                        else if ( (LA5_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 5;}
-
-                        else if ( (LA5_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 6;}
-
-                        else if ( (LA5_1==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 7;}
-
-                         
-                        input.seek(index5_1);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 51 : 
-                        int LA5_94 = input.LA(1);
-
-                         
-                        int index5_94 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_94==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 84;}
-
-                        else if ( (LA5_94==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 83;}
-
-                        else if ( (LA5_94==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 20;}
-
-                        else if ( (LA5_94==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 42;}
-
-                         
-                        input.seek(index5_94);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 52 : 
-                        int LA5_67 = input.LA(1);
-
-                         
-                        int index5_67 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                         
-                        input.seek(index5_67);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 53 : 
-                        int LA5_52 = input.LA(1);
-
-                         
-                        int index5_52 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_52==STRING||(LA5_52>=BOOL && LA5_52<=INT)||LA5_52==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_52==ID) && (((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 69;}
-
-                        else if ( (LA5_52==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 70;}
-
-                        else if ( (LA5_52==EOF||LA5_52==SEMICOLON) && ((validateIdentifierKey(DroolsSoftKeywords.GLOBAL)))) {s = 71;}
-
-                         
-                        input.seek(index5_52);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 54 : 
-                        int LA5_82 = input.LA(1);
-
-                         
-                        int index5_82 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_82==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 93;}
-
-                         
-                        input.seek(index5_82);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 55 : 
-                        int LA5_85 = input.LA(1);
-
-                         
-                        int index5_85 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_85==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 96;}
-
-                         
-                        input.seek(index5_85);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 56 : 
-                        int LA5_120 = input.LA(1);
-
-                         
-                        int index5_120 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_120==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 126;}
-
-                        else if ( ((LA5_120>=VT_COMPILATION_UNIT && LA5_120<=SEMICOLON)||(LA5_120>=DOT && LA5_120<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_120);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 57 : 
-                        int LA5_103 = input.LA(1);
-
-                         
-                        int index5_103 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_103==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 115;}
-
-                        else if ( ((LA5_103>=VT_COMPILATION_UNIT && LA5_103<=SEMICOLON)||(LA5_103>=DOT && LA5_103<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_103);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 58 : 
-                        int LA5_89 = input.LA(1);
-
-                         
-                        int index5_89 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_89==LEFT_CURLY) && ((validateIdentifierKey(DroolsSoftKeywords.FUNCTION)))) {s = 45;}
-
-                        else if ( (LA5_89==EOF||LA5_89==ID) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_89);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 59 : 
-                        int LA5_114 = input.LA(1);
-
-                         
-                        int index5_114 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_114==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 120;}
-
-                        else if ( (LA5_114==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 121;}
-
-                        else if ( (LA5_114==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 122;}
-
-                        else if ( (LA5_114==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 89;}
-
-                        else if ( (LA5_114==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 102;}
-
-                        else if ( ((LA5_114>=VT_COMPILATION_UNIT && LA5_114<=SEMICOLON)||(LA5_114>=DOT_STAR && LA5_114<=LEFT_PAREN)||(LA5_114>=COLON && LA5_114<=NULL)||(LA5_114>=RIGHT_SQUARE && LA5_114<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_114);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 60 : 
-                        int LA5_29 = input.LA(1);
-
-                         
-                        int index5_29 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_29==COMMA||LA5_29==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_29==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_29==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_29);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 61 : 
-                        int LA5_61 = input.LA(1);
-
-                         
-                        int index5_61 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_61==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_61==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_61==COMMA||LA5_61==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_61);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 62 : 
-                        int LA5_35 = input.LA(1);
-
-                         
-                        int index5_35 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_35==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 55;}
-
-                         
-                        input.seek(index5_35);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 63 : 
-                        int LA5_75 = input.LA(1);
-
-                         
-                        int index5_75 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_75==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 91;}
-
-                         
-                        input.seek(index5_75);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 64 : 
-                        int LA5_121 = input.LA(1);
-
-                         
-                        int index5_121 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_121==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 127;}
-
-                        else if ( ((LA5_121>=VT_COMPILATION_UNIT && LA5_121<=LEFT_SQUARE)||(LA5_121>=THEN && LA5_121<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_121);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 65 : 
-                        int LA5_101 = input.LA(1);
-
-                         
-                        int index5_101 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_101==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 113;}
-
-                        else if ( ((LA5_101>=VT_COMPILATION_UNIT && LA5_101<=LEFT_SQUARE)||(LA5_101>=THEN && LA5_101<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_101);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 66 : 
-                        int LA5_39 = input.LA(1);
-
-                         
-                        int index5_39 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {s = 18;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {s = 10;}
-
-                         
-                        input.seek(index5_39);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 67 : 
-                        int LA5_4 = input.LA(1);
-
-                         
-                        int index5_4 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_4==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 16;}
-
-                        else if ( (LA5_4==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_4==END||LA5_4==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
-
-                        else if ( (LA5_4==SEMICOLON) && ((validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))) {s = 17;}
-
-                        else if ( (LA5_4==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                         
-                        input.seek(index5_4);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 68 : 
-                        int LA5_20 = input.LA(1);
-
-                         
-                        int index5_20 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_20==ID||LA5_20==END||LA5_20==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
-
-                        else if ( (LA5_20==LEFT_CURLY) && ((validateIdentifierKey(DroolsSoftKeywords.FUNCTION)))) {s = 45;}
-
-                         
-                        input.seek(index5_20);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 69 : 
-                        int LA5_125 = input.LA(1);
-
-                         
-                        int index5_125 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_125==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                        else if ( (LA5_125==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_125==COMMA||LA5_125==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_125);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 70 : 
-                        int LA5_80 = input.LA(1);
-
-                         
-                        int index5_80 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_80==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                        else if ( (LA5_80==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_80==COMMA||LA5_80==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_80);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 71 : 
-                        int LA5_16 = input.LA(1);
-
-                         
-                        int index5_16 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_16==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 35;}
-
-                        else if ( (LA5_16==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))))) {s = 22;}
-
-                        else if ( (LA5_16==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 36;}
-
-                        else if ( (LA5_16==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 37;}
-
-                        else if ( (LA5_16==INT) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 38;}
-
-                        else if ( (LA5_16==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 39;}
-
-                        else if ( (LA5_16==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 26;}
-
-                        else if ( (LA5_16==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 27;}
-
-                        else if ( (LA5_16==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 40;}
-
-                        else if ( (LA5_16==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_16);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 72 : 
-                        int LA5_68 = input.LA(1);
-
-                         
-                        int index5_68 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_68==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_68==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_68==COMMA||LA5_68==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_68);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 73 : 
-                        int LA5_24 = input.LA(1);
-
-                         
-                        int index5_24 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.FUNCTION))) ) {s = 45;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {s = 10;}
-
-                         
-                        input.seek(index5_24);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 74 : 
-                        int LA5_37 = input.LA(1);
-
-                         
-                        int index5_37 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {s = 18;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                         
-                        input.seek(index5_37);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 75 : 
-                        int LA5_107 = input.LA(1);
-
-                         
-                        int index5_107 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_107==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                        else if ( (LA5_107==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_107==COMMA||LA5_107==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_107);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 76 : 
-                        int LA5_86 = input.LA(1);
-
-                         
-                        int index5_86 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_86==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 97;}
-
-                        else if ( (LA5_86==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_86==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_86==COMMA||LA5_86==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_86);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 77 : 
-                        int LA5_42 = input.LA(1);
-
-                         
-                        int index5_42 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_42==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 58;}
-
-                         
-                        input.seek(index5_42);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 78 : 
-                        int LA5_124 = input.LA(1);
-
-                         
-                        int index5_124 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_124==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 89;}
-
-                        else if ( (LA5_124==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 102;}
-
-                        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(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_124==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 116;}
-
-                         
-                        input.seek(index5_124);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 79 : 
-                        int LA5_93 = input.LA(1);
-
-                         
-                        int index5_93 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_93==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 110;}
-
-                        else if ( (LA5_93==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 84;}
-
-                        else if ( (LA5_93==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 82;}
-
-                         
-                        input.seek(index5_93);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 80 : 
-                        int LA5_90 = input.LA(1);
-
-                         
-                        int index5_90 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_90==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 105;}
-
-                        else if ( (LA5_90==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                        else if ( (LA5_90==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_90==COMMA||LA5_90==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_90);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 81 : 
-                        int LA5_22 = input.LA(1);
-
-                         
-                        int index5_22 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_22==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))))) {s = 47;}
-
-                        else if ( (LA5_22==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.RULE))))) {s = 48;}
-
-                        else if ( (LA5_22==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_22);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 82 : 
-                        int LA5_19 = input.LA(1);
-
-                         
-                        int index5_19 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_19==LEFT_PAREN||LA5_19==COLON) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
-
-                        else if ( (LA5_19==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 41;}
-
-                        else if ( (LA5_19==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 42;}
-
-                        else if ( (LA5_19==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 20;}
-
-                        else if ( (LA5_19==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 43;}
-
-                        else if ( (LA5_19==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 44;}
-
-                         
-                        input.seek(index5_19);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 83 : 
-                        int LA5_130 = input.LA(1);
-
-                         
-                        int index5_130 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_130==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 132;}
-
-                        else if ( ((LA5_130>=VT_COMPILATION_UNIT && LA5_130<=LEFT_SQUARE)||(LA5_130>=THEN && LA5_130<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_130);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 84 : 
-                        int LA5_128 = input.LA(1);
-
-                         
-                        int index5_128 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_128==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 131;}
-
-                        else if ( ((LA5_128>=VT_COMPILATION_UNIT && LA5_128<=LEFT_SQUARE)||(LA5_128>=THEN && LA5_128<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_128);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 85 : 
-                        int LA5_123 = input.LA(1);
-
-                         
-                        int index5_123 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_123==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 129;}
-
-                        else if ( ((LA5_123>=VT_COMPILATION_UNIT && LA5_123<=LEFT_SQUARE)||(LA5_123>=THEN && LA5_123<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_123);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 86 : 
-                        int LA5_116 = input.LA(1);
-
-                         
-                        int index5_116 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_116==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 124;}
-
-                        else if ( ((LA5_116>=VT_COMPILATION_UNIT && LA5_116<=LEFT_SQUARE)||(LA5_116>=THEN && LA5_116<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_116);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 87 : 
-                        int LA5_9 = input.LA(1);
-
-                         
-                        int index5_9 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_9==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 21;}
-
-                        else if ( (LA5_9==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))))) {s = 22;}
-
-                        else if ( (LA5_9==INT) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 23;}
-
-                        else if ( (LA5_9==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 24;}
-
-                        else if ( (LA5_9==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 25;}
-
-                        else if ( (LA5_9==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 26;}
-
-                        else if ( (LA5_9==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 27;}
-
-                        else if ( (LA5_9==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 28;}
-
-                        else if ( (LA5_9==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 29;}
-
-                        else if ( (LA5_9==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) ) {s = 30;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))) ) {s = 31;}
-
-                         
-                        input.seek(index5_9);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 88 : 
-                        int LA5_3 = input.LA(1);
-
-                         
-                        int index5_3 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 8;}
-
-                        else if ( (LA5_3==ID) && ((((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "funct!
 ion") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateL!
 T(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT))
)||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeyword!
 s.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(Drools!
 SoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "fu
nction") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeyw!
 ords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(Dro!
 olsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, 
"function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && vali!
 dateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "impor!
 t") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftK
eywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(D!
 roolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.RULE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "impo!
 rt") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoft
Keywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(!
 DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIde!
 ntifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && 
validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "im!
 port") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(valida!
 teIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import"
) && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1!
 , "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(val!
 idateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "impo
rt") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateL!
 T(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||!
 ((validateLT(1, "import") && validateLT(2, "function") )&&(validateIde
ntifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(v!
 alidateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.QUERY))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") !
 )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1
, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((va!
 lidateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPORT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(validateIdentifierKey(DroolsSoftKeywords.IMPO!
 RT)))||((validateLT(1, "import") && validateLT(2, "function") )&&(vali
dateIdentifierKey(DroolsSoftKeywords.IMPORT)))))) {s = 9;}
-
-                        else if ( (LA5_3==END) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
-
-                        else if ( (LA5_3==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_3==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 12;}
-
-                        else if ( (LA5_3==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 13;}
-
-                        else if ( (LA5_3==SEMICOLON) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 14;}
-
-                        else if ( (LA5_3==EOF||LA5_3==DOT_STAR) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_3);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 89 : 
-                        int LA5_97 = input.LA(1);
-
-                         
-                        int index5_97 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_97==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_97==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_97==COMMA||LA5_97==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_97);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 90 : 
-                        int LA5_34 = input.LA(1);
-
-                         
-                        int index5_34 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((LA5_34>=STRING && LA5_34<=LEFT_PAREN)||(LA5_34>=BOOL && LA5_34<=INT)||LA5_34==MISC) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_34==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))))) {s = 54;}
-
-                        else if ( (LA5_34==DOT||LA5_34==LEFT_SQUARE) && ((validateIdentifierKey(DroolsSoftKeywords.TEMPLATE)))) {s = 17;}
-
-                         
-                        input.seek(index5_34);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 91 : 
-                        int LA5_79 = input.LA(1);
-
-                         
-                        int index5_79 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.DIALECT))) ) {s = 18;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                         
-                        input.seek(index5_79);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 92 : 
-                        int LA5_105 = input.LA(1);
-
-                         
-                        int index5_105 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_105==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                        else if ( (LA5_105==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_105==COMMA||LA5_105==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_105);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 93 : 
-                        int LA5_113 = input.LA(1);
-
-                         
-                        int index5_113 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_113==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 89;}
-
-                        else if ( (LA5_113==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 102;}
-
-                        else if ( ((LA5_113>=VT_COMPILATION_UNIT && LA5_113<=SEMICOLON)||(LA5_113>=DOT && LA5_113<=LEFT_PAREN)||(LA5_113>=COLON && LA5_113<=NULL)||(LA5_113>=RIGHT_SQUARE && LA5_113<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_113==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 101;}
-
-                        else if ( (LA5_113==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 104;}
-
-                         
-                        input.seek(index5_113);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 94 : 
-                        int LA5_41 = input.LA(1);
-
-                         
-                        int index5_41 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_41==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 57;}
-
-                         
-                        input.seek(index5_41);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 95 : 
-                        int LA5_126 = input.LA(1);
-
-                         
-                        int index5_126 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((LA5_126>=VT_COMPILATION_UNIT && LA5_126<=SEMICOLON)||(LA5_126>=DOT_STAR && LA5_126<=NULL)||(LA5_126>=RIGHT_SQUARE && LA5_126<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_126==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 130;}
-
-                        else if ( (LA5_126==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 122;}
-
-                        else if ( (LA5_126==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 120;}
-
-                         
-                        input.seek(index5_126);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 96 : 
-                        int LA5_115 = input.LA(1);
-
-                         
-                        int index5_115 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((LA5_115>=VT_COMPILATION_UNIT && LA5_115<=SEMICOLON)||(LA5_115>=DOT_STAR && LA5_115<=NULL)||(LA5_115>=RIGHT_SQUARE && LA5_115<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_115==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 123;}
-
-                        else if ( (LA5_115==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 104;}
-
-                        else if ( (LA5_115==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 103;}
-
-                         
-                        input.seek(index5_115);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 97 : 
-                        int LA5_33 = input.LA(1);
-
-                         
-                        int index5_33 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_33==ID) && (((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 53;}
-
-                        else if ( (LA5_33==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 13;}
-
-                         
-                        input.seek(index5_33);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 98 : 
-                        int LA5_91 = input.LA(1);
-
-                         
-                        int index5_91 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_91==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 106;}
-
-                        else if ( (LA5_91==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 107;}
-
-                        else if ( (LA5_91==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 108;}
-
-                        else if ( (LA5_91==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                        else if ( (LA5_91==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_91==COMMA||LA5_91==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_91);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 99 : 
-                        int LA5_55 = input.LA(1);
-
-                         
-                        int index5_55 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_55==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 72;}
-
-                        else if ( (LA5_55==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 73;}
-
-                        else if ( (LA5_55==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 74;}
-
-                        else if ( (LA5_55==COMMA||LA5_55==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_55==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_55==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                         
-                        input.seek(index5_55);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 100 : 
-                        int LA5_38 = input.LA(1);
-
-                         
-                        int index5_38 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_38==COMMA||LA5_38==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_38==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_38==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                         
-                        input.seek(index5_38);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 101 : 
-                        int LA5_48 = input.LA(1);
-
-                         
-                        int index5_48 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.QUERY))) ) {s = 10;}
-
-                         
-                        input.seek(index5_48);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 102 : 
-                        int LA5_66 = input.LA(1);
-
-                         
-                        int index5_66 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                         
-                        input.seek(index5_66);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 103 : 
-                        int LA5_84 = input.LA(1);
-
-                         
-                        int index5_84 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_84==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 95;}
-
-                        else if ( (LA5_84==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 20;}
-
-                        else if ( (LA5_84==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 42;}
-
-                         
-                        input.seek(index5_84);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 104 : 
-                        int LA5_54 = input.LA(1);
-
-                         
-                        int index5_54 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.TEMPLATE))) ) {s = 17;}
-
-                         
-                        input.seek(index5_54);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 105 : 
-                        int LA5_64 = input.LA(1);
-
-                         
-                        int index5_64 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                         
-                        input.seek(index5_64);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 106 : 
-                        int LA5_106 = input.LA(1);
-
-                         
-                        int index5_106 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_106==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 117;}
-
-                         
-                        input.seek(index5_106);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 107 : 
-                        int LA5_72 = input.LA(1);
-
-                         
-                        int index5_72 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_72==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 90;}
-
-                         
-                        input.seek(index5_72);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 108 : 
-                        int LA5_13 = input.LA(1);
-
-                         
-                        int index5_13 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_13==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 33;}
-
-                         
-                        input.seek(index5_13);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 109 : 
-                        int LA5_127 = input.LA(1);
-
-                         
-                        int index5_127 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_127==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 122;}
-
-                        else if ( (LA5_127==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 121;}
-
-                        else if ( (LA5_127==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 89;}
-
-                        else if ( (LA5_127==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 102;}
-
-                        else if ( ((LA5_127>=VT_COMPILATION_UNIT && LA5_127<=SEMICOLON)||(LA5_127>=DOT && LA5_127<=LEFT_PAREN)||(LA5_127>=COLON && LA5_127<=NULL)||(LA5_127>=RIGHT_SQUARE && LA5_127<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                         
-                        input.seek(index5_127);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 110 : 
-                        int LA5_49 = input.LA(1);
-
-                         
-                        int index5_49 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_49==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 63;}
-
-                        else if ( (LA5_49==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 64;}
-
-                        else if ( (LA5_49==INT) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 65;}
-
-                        else if ( (LA5_49==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 66;}
-
-                        else if ( (LA5_49==STRING) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 67;}
-
-                        else if ( (LA5_49==COLON||LA5_49==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_49==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 68;}
-
-                         
-                        input.seek(index5_49);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 111 : 
-                        int LA5_69 = input.LA(1);
-
-                         
-                        int index5_69 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))) ) {s = 71;}
-
-                         
-                        input.seek(index5_69);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 112 : 
-                        int LA5_119 = input.LA(1);
-
-                         
-                        int index5_119 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_119==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_119==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))))) {s = 49;}
-
-                        else if ( (LA5_119==COMMA||LA5_119==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                         
-                        input.seek(index5_119);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 113 : 
-                        int LA5_57 = input.LA(1);
-
-                         
-                        int index5_57 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_57==LEFT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.QUERY)))) {s = 10;}
-
-                        else if ( (LA5_57==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 41;}
-
-                        else if ( (LA5_57==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 42;}
-
-                        else if ( (LA5_57==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 20;}
-
-                        else if ( (LA5_57==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 81;}
-
-                         
-                        input.seek(index5_57);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 114 : 
-                        int LA5_28 = input.LA(1);
-
-                         
-                        int index5_28 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.IMPORT))) ) {s = 15;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RULE))) ) {s = 11;}
-
-                         
-                        input.seek(index5_28);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 115 : 
-                        int LA5_12 = input.LA(1);
-
-                         
-                        int index5_12 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_12==ID) && (((validateIdentifierKey(DroolsSoftKeywords.GLOBAL))||(validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 32;}
-
-                         
-                        input.seek(index5_12);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 116 : 
-                        int LA5_118 = input.LA(1);
-
-                         
-                        int index5_118 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_118==ID) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 84;}
-
-                        else if ( (LA5_118==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.QUERY))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 110;}
-
-                         
-                        input.seek(index5_118);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 117 : 
-                        int LA5_117 = input.LA(1);
-
-                         
-                        int index5_117 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_117==BOOL) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 125;}
-
-                        else if ( (LA5_117==ID) && (((validateIdentifierKey(DroolsSoftKeywords.RULE))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))))) {s = 56;}
-
-                        else if ( (LA5_117==COMMA||LA5_117==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.RULE)))) {s = 11;}
-
-                        else if ( (LA5_117==EOF) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 18;}
-
-                         
-                        input.seek(index5_117);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 118 : 
-                        int LA5_122 = input.LA(1);
-
-                         
-                        int index5_122 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_122==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 89;}
-
-                        else if ( (LA5_122==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 128;}
-
-                        else if ( ((LA5_122>=VT_COMPILATION_UNIT && LA5_122<=LEFT_PAREN)||(LA5_122>=COLON && LA5_122<=NULL)||(LA5_122>=RIGHT_SQUARE && LA5_122<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_122==COMMA) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 102;}
-
-                         
-                        input.seek(index5_122);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 119 : 
-                        int LA5_70 = input.LA(1);
-
-                         
-                        int index5_70 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA5_70==ID) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 88;}
-
-                        else if ( ((LA5_70>=VT_COMPILATION_UNIT && LA5_70<=SEMICOLON)||(LA5_70>=DOT && LA5_70<=COMMA)||(LA5_70>=COLON && LA5_70<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.IMPORT)))) {s = 15;}
-
-                        else if ( (LA5_70==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.IMPORT))||(validateIdentifierKey(DroolsSoftKeywords.FUNCTION))))) {s = 89;}
-
-                         
-                        input.seek(index5_70);
-                        if ( s>=0 ) return s;
-                        break;
-            }
-            if (backtracking>0) {failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 5, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
+    protected DFA28 dfa28 = new DFA28(this);
+    protected DFA51 dfa51 = new DFA51(this);
+    protected DFA52 dfa52 = new DFA52(this);
+    protected DFA59 dfa59 = new DFA59(this);
+    protected DFA63 dfa63 = new DFA63(this);
+    protected DFA65 dfa65 = new DFA65(this);
+    protected DFA67 dfa67 = new DFA67(this);
+    protected DFA80 dfa80 = new DFA80(this);
+    protected DFA81 dfa81 = new DFA81(this);
     static final String DFA12_eotS =
         "\16\uffff";
     static final String DFA12_eofS =
         "\16\uffff";
     static final String DFA12_minS =
-        "\2\126\1\uffff\1\126\1\uffff\1\126\1\156\3\126\2\156\1\133\1\126";
+        "\2\130\1\uffff\1\130\1\uffff\1\130\1\163\3\130\2\163\1\135\1\130";
     static final String DFA12_maxS =
-        "\1\133\1\135\1\uffff\1\155\1\uffff\1\126\1\156\3\155\2\156\2\155";
+        "\1\135\1\137\1\uffff\1\162\1\uffff\1\130\1\163\3\162\2\163\2\162";
     static final String DFA12_acceptS =
         "\2\uffff\1\2\1\uffff\1\1\11\uffff";
     static final String DFA12_specialS =
@@ -17547,17 +16170,17 @@
             "\1\2\2\uffff\1\2\1\uffff\1\1",
             "\1\3\4\uffff\1\2\1\uffff\1\4",
             "",
-            "\1\7\1\5\3\uffff\1\2\2\4\1\2\16\uffff\1\6",
+            "\1\7\1\5\3\uffff\1\2\2\4\1\uffff\1\2\20\uffff\1\6",
             "",
             "\1\10",
             "\1\11",
-            "\2\2\3\uffff\1\2\2\4\1\2\16\uffff\1\12",
-            "\1\4\1\5\3\uffff\1\2\21\uffff\1\13",
-            "\1\4\4\uffff\1\2\2\4\17\uffff\1\6",
+            "\2\2\3\uffff\1\2\2\4\1\uffff\1\2\20\uffff\1\12",
+            "\1\4\1\5\3\uffff\1\2\24\uffff\1\13",
+            "\1\4\4\uffff\1\2\2\4\22\uffff\1\6",
             "\1\14",
             "\1\15",
-            "\1\2\2\4\17\uffff\1\12",
-            "\1\4\4\uffff\1\2\21\uffff\1\13"
+            "\1\2\2\4\22\uffff\1\12",
+            "\1\4\4\uffff\1\2\24\uffff\1\13"
     };
 
     static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
@@ -17590,7 +16213,7 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "327:23: ( parameters )?";
+            return "332:23: ( parameters )?";
         }
     }
     static final String DFA17_eotS =
@@ -17598,20 +16221,20 @@
     static final String DFA17_eofS =
         "\6\uffff";
     static final String DFA17_minS =
-        "\2\126\1\uffff\1\156\1\uffff\1\126";
+        "\2\130\1\uffff\1\163\1\uffff\1\130";
     static final String DFA17_maxS =
-        "\1\126\1\155\1\uffff\1\156\1\uffff\1\155";
+        "\1\130\1\162\1\uffff\1\163\1\uffff\1\162";
     static final String DFA17_acceptS =
         "\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\2\4\uffff\2\4\17\uffff\1\3",
+            "\2\2\4\uffff\2\4\22\uffff\1\3",
             "",
             "\1\5",
             "",
-            "\1\2\5\uffff\2\4\17\uffff\1\3"
+            "\1\2\5\uffff\2\4\22\uffff\1\3"
     };
 
     static final short[] DFA17_eot = DFA.unpackEncodedString(DFA17_eotS);
@@ -17644,795 +16267,831 @@
             this.transition = DFA17_transition;
         }
         public String getDescription() {
-            return "346:4: ( data_type )?";
+            return "351:4: ( data_type )?";
         }
     }
-    static final String DFA24_eotS =
+    static final String DFA28_eotS =
         "\33\uffff";
-    static final String DFA24_eofS =
+    static final String DFA28_eofS =
         "\33\uffff";
-    static final String DFA24_minS =
-        "\2\126\3\uffff\1\4\1\126\3\uffff\1\4\1\uffff\2\0\1\4\2\0\3\4\1\0"+
-        "\2\4\4\0";
-    static final String DFA24_maxS =
-        "\1\157\1\162\3\uffff\1\173\1\157\3\uffff\1\173\1\uffff\2\0\1\173"+
-        "\2\0\3\173\1\0\2\173\4\0";
-    static final String DFA24_acceptS =
-        "\2\uffff\1\2\2\1\2\uffff\1\2\2\1\1\uffff\1\1\17\uffff";
-    static final String DFA24_specialS =
-        "\1\4\1\12\3\uffff\1\7\1\1\3\uffff\1\0\1\uffff\1\17\1\6\1\13\1\15"+
-        "\1\3\1\16\1\11\1\14\1\2\1\5\1\10\4\uffff}>";
-    static final String[] DFA24_transitionS = {
-            "\1\1\30\uffff\1\2",
-            "\1\7\3\uffff\1\10\1\5\2\uffff\1\6\1\11\1\4\16\uffff\1\7\2\uffff"+
-            "\1\3",
+    static final String DFA28_minS =
+        "\2\130\3\uffff\1\4\1\130\3\uffff\1\4\1\0\1\uffff\1\0\3\4\2\0\1\4"+
+        "\1\0\2\4\4\0";
+    static final String DFA28_maxS =
+        "\1\164\1\167\3\uffff\1\u0080\1\164\3\uffff\1\u0080\1\0\1\uffff\1"+
+        "\0\3\u0080\2\0\1\u0080\1\0\2\u0080\4\0";
+    static final String DFA28_acceptS =
+        "\2\uffff\1\2\2\1\2\uffff\1\2\2\1\2\uffff\1\1\16\uffff";
+    static final String DFA28_specialS =
+        "\1\13\1\1\3\uffff\1\12\1\5\3\uffff\1\2\1\4\1\uffff\1\7\1\16\1\11"+
+        "\1\3\1\6\1\14\1\17\1\0\1\15\1\10\4\uffff}>";
+    static final String[] DFA28_transitionS = {
+            "\1\1\33\uffff\1\2",
+            "\1\7\3\uffff\1\11\1\5\3\uffff\1\6\1\uffff\1\10\1\4\17\uffff"+
+            "\1\7\2\uffff\1\3",
             "",
             "",
             "",
-            "\122\13\1\12\4\13\1\14\40\13",
-            "\1\15\4\uffff\1\7\23\uffff\1\7",
+            "\124\14\1\12\4\14\1\13\43\14",
+            "\1\15\4\uffff\1\7\26\uffff\1\7",
             "",
             "",
             "",
-            "\122\13\1\20\1\21\3\13\1\17\2\13\1\16\16\13\1\22\16\13",
+            "\124\14\1\22\1\17\3\14\1\21\3\14\1\16\20\14\1\20\16\14",
+            "\1\uffff",
             "",
             "\1\uffff",
+            "\124\14\1\23\4\14\1\24\43\14",
+            "\124\14\1\25\50\14",
+            "\157\14\1\26\15\14",
             "\1\uffff",
-            "\122\13\1\23\4\13\1\24\40\13",
             "\1\uffff",
+            "\125\14\1\27\3\14\1\31\24\14\1\30\16\14",
             "\1\uffff",
-            "\122\13\1\25\45\13",
-            "\152\13\1\26\15\13",
-            "\123\13\1\27\3\13\1\31\21\13\1\30\16\13",
+            "\125\14\1\17\3\14\1\32\24\14\1\20\16\14",
+            "\131\14\1\32\24\14\1\20\16\14",
             "\1\uffff",
-            "\123\13\1\21\3\13\1\32\21\13\1\22\16\13",
-            "\127\13\1\32\21\13\1\22\16\13",
             "\1\uffff",
             "\1\uffff",
-            "\1\uffff",
             "\1\uffff"
     };
 
-    static final short[] DFA24_eot = DFA.unpackEncodedString(DFA24_eotS);
-    static final short[] DFA24_eof = DFA.unpackEncodedString(DFA24_eofS);
-    static final char[] DFA24_min = DFA.unpackEncodedStringToUnsignedChars(DFA24_minS);
-    static final char[] DFA24_max = DFA.unpackEncodedStringToUnsignedChars(DFA24_maxS);
-    static final short[] DFA24_accept = DFA.unpackEncodedString(DFA24_acceptS);
-    static final short[] DFA24_special = DFA.unpackEncodedString(DFA24_specialS);
-    static final short[][] DFA24_transition;
+    static final short[] DFA28_eot = DFA.unpackEncodedString(DFA28_eotS);
+    static final short[] DFA28_eof = DFA.unpackEncodedString(DFA28_eofS);
+    static final char[] DFA28_min = DFA.unpackEncodedStringToUnsignedChars(DFA28_minS);
+    static final char[] DFA28_max = DFA.unpackEncodedStringToUnsignedChars(DFA28_maxS);
+    static final short[] DFA28_accept = DFA.unpackEncodedString(DFA28_acceptS);
+    static final short[] DFA28_special = DFA.unpackEncodedString(DFA28_specialS);
+    static final short[][] DFA28_transition;
 
     static {
-        int numStates = DFA24_transitionS.length;
-        DFA24_transition = new short[numStates][];
+        int numStates = DFA28_transitionS.length;
+        DFA28_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA24_transition[i] = DFA.unpackEncodedString(DFA24_transitionS[i]);
+            DFA28_transition[i] = DFA.unpackEncodedString(DFA28_transitionS[i]);
         }
     }
 
-    class DFA24 extends DFA {
+    class DFA28 extends DFA {
 
-        public DFA24(BaseRecognizer recognizer) {
+        public DFA28(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 24;
-            this.eot = DFA24_eot;
-            this.eof = DFA24_eof;
-            this.min = DFA24_min;
-            this.max = DFA24_max;
-            this.accept = DFA24_accept;
-            this.special = DFA24_special;
-            this.transition = DFA24_transition;
+            this.decisionNumber = 28;
+            this.eot = DFA28_eot;
+            this.eof = DFA28_eof;
+            this.min = DFA28_min;
+            this.max = DFA28_max;
+            this.accept = DFA28_accept;
+            this.special = DFA28_special;
+            this.transition = DFA28_transition;
         }
         public String getDescription() {
-            return "382:21: ( rule_attributes )?";
+            return "417:21: ( rule_attributes )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA24_10 = input.LA(1);
+                        int LA28_20 = input.LA(1);
 
                          
-                        int index24_10 = input.index();
+                        int index28_20 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_10==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 14;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
 
-                        else if ( (LA24_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 15;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
 
-                        else if ( (LA24_10==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
-
-                        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(DroolsSoftKeywords.SALIENCE)))) {s = 11;}
-
-                        else if ( (LA24_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
-
-                        else if ( (LA24_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
-
                          
-                        input.seek(index24_10);
+                        input.seek(index28_20);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA24_6 = input.LA(1);
+                        int LA28_1 = input.LA(1);
 
                          
-                        int index24_6 = input.index();
+                        int index28_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_6==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))))) {s = 13;}
+                        if ( (LA28_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateL!
 T(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 3;}
 
-                        else if ( (LA24_6==LEFT_PAREN||LA24_6==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 7;}
+                        else if ( (LA28_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 4;}
 
+                        else if ( (LA28_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 5;}
+
+                        else if ( (LA28_1==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))))) {s = 6;}
+
+                        else if ( (LA28_1==ID||LA28_1==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 7;}
+
+                        else if ( (LA28_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 8;}
+
+                        else if ( (LA28_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 9;}
+
                          
-                        input.seek(index24_6);
+                        input.seek(index28_1);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA24_20 = input.LA(1);
+                        int LA28_10 = input.LA(1);
 
                          
-                        int index24_20 = input.index();
+                        int index28_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 11;}
+                        if ( (LA28_10==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 14;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
+                        else if ( (LA28_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 15;}
 
+                        else if ( (LA28_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
+
+                        else if ( (LA28_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+
+                        else if ( (LA28_10==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+
+                        else if ( ((LA28_10>=VT_COMPILATION_UNIT && LA28_10<=SEMICOLON)||(LA28_10>=DOT_STAR && LA28_10<=STRING)||(LA28_10>=COMMA && LA28_10<=AT)||(LA28_10>=EQUALS && LA28_10<=NULL)||(LA28_10>=RIGHT_SQUARE && LA28_10<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+
                          
-                        input.seek(index24_20);
+                        input.seek(index28_10);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA24_16 = input.LA(1);
+                        int LA28_16 = input.LA(1);
 
                          
-                        int index24_16 = input.index();
+                        int index28_16 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 11;}
+                        if ( (LA28_16==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 22;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
+                        else if ( ((LA28_16>=VT_COMPILATION_UNIT && LA28_16<=LEFT_SQUARE)||(LA28_16>=THEN && LA28_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
 
                          
-                        input.seek(index24_16);
+                        input.seek(index28_16);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA24_0 = input.LA(1);
+                        int LA28_11 = input.LA(1);
 
                          
-                        int index24_0 = input.index();
+                        int index28_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierK!
 ey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {s = 1;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
 
-                        else if ( (LA24_0==THEN) ) {s = 2;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
 
                          
-                        input.seek(index24_0);
+                        input.seek(index28_11);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA24_21 = input.LA(1);
+                        int LA28_6 = input.LA(1);
 
                          
-                        int index24_21 = input.index();
+                        int index28_6 = input.index();
                         input.rewind();
                         s = -1;
-                        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(DroolsSoftKeywords.SALIENCE)))) {s = 11;}
+                        if ( (LA28_6==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))))) {s = 13;}
 
-                        else if ( (LA24_21==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+                        else if ( (LA28_6==LEFT_PAREN||LA28_6==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 7;}
 
-                        else if ( (LA24_21==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 26;}
-
-                        else if ( (LA24_21==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
-
                          
-                        input.seek(index24_21);
+                        input.seek(index28_6);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA24_13 = input.LA(1);
+                        int LA28_17 = input.LA(1);
 
                          
-                        int index24_13 = input.index();
+                        int index28_17 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))) ) {s = 11;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
 
                         else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
 
                          
-                        input.seek(index24_13);
+                        input.seek(index28_17);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA24_5 = input.LA(1);
+                        int LA28_13 = input.LA(1);
 
                          
-                        int index24_5 = input.index();
+                        int index28_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_5==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 10;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))) ) {s = 12;}
 
-                        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(DroolsSoftKeywords.SALIENCE)))) {s = 11;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
 
-                        else if ( (LA24_5==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 12;}
-
                          
-                        input.seek(index24_5);
+                        input.seek(index28_13);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA24_22 = input.LA(1);
+                        int LA28_22 = input.LA(1);
 
                          
-                        int index24_22 = input.index();
+                        int index28_22 = input.index();
                         input.rewind();
                         s = -1;
-                        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(DroolsSoftKeywords.SALIENCE)))) {s = 11;}
+                        if ( (LA28_22==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 26;}
 
-                        else if ( (LA24_22==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+                        else if ( (LA28_22==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
 
-                        else if ( (LA24_22==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 26;}
+                        else if ( ((LA28_22>=VT_COMPILATION_UNIT && LA28_22<=STRING)||(LA28_22>=COMMA && LA28_22<=NULL)||(LA28_22>=RIGHT_SQUARE && LA28_22<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
 
                          
-                        input.seek(index24_22);
+                        input.seek(index28_22);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA24_18 = input.LA(1);
+                        int LA28_15 = input.LA(1);
 
                          
-                        int index24_18 = input.index();
+                        int index28_15 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_18==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 22;}
+                        if ( (LA28_15==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 21;}
 
-                        else if ( ((LA24_18>=VT_COMPILATION_UNIT && LA24_18<=LEFT_SQUARE)||(LA24_18>=THEN && LA24_18<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 11;}
+                        else if ( ((LA28_15>=VT_COMPILATION_UNIT && LA28_15<=SEMICOLON)||(LA28_15>=DOT && LA28_15<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
 
                          
-                        input.seek(index24_18);
+                        input.seek(index28_15);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA24_1 = input.LA(1);
+                        int LA28_5 = input.LA(1);
 
                          
-                        int index24_1 = input.index();
+                        int index28_5 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateL!
 T(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 3;}
+                        if ( (LA28_5==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 10;}
 
-                        else if ( (LA24_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 4;}
+                        else if ( (LA28_5==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 11;}
 
-                        else if ( (LA24_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 5;}
+                        else if ( ((LA28_5>=VT_COMPILATION_UNIT && LA28_5<=SEMICOLON)||(LA28_5>=DOT && LA28_5<=STRING)||(LA28_5>=COMMA && LA28_5<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
 
-                        else if ( (LA24_1==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))))) {s = 6;}
-
-                        else if ( (LA24_1==ID||LA24_1==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 7;}
-
-                        else if ( (LA24_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 8;}
-
-                        else if ( (LA24_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 9;}
-
                          
-                        input.seek(index24_1);
+                        input.seek(index28_5);
                         if ( s>=0 ) return s;
                         break;
                     case 11 : 
-                        int LA24_14 = input.LA(1);
+                        int LA28_0 = input.LA(1);
 
                          
-                        int index24_14 = input.index();
+                        int index28_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA24_14>=VT_COMPILATION_UNIT && LA24_14<=SEMICOLON)||(LA24_14>=DOT && LA24_14<=STRING)||(LA24_14>=COMMA && LA24_14<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 11;}
+                        if ( (LA28_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierK!
 ey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.ATTRIBUTES))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {s = 1;}
 
-                        else if ( (LA24_14==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
+                        else if ( (LA28_0==THEN) ) {s = 2;}
 
-                        else if ( (LA24_14==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 20;}
-
                          
-                        input.seek(index24_14);
+                        input.seek(index28_0);
                         if ( s>=0 ) return s;
                         break;
                     case 12 : 
-                        int LA24_19 = input.LA(1);
+                        int LA28_18 = input.LA(1);
 
                          
-                        int index24_19 = input.index();
+                        int index28_18 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_19==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 23;}
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
 
-                        else if ( (LA24_19==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 24;}
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
 
-                        else if ( (LA24_19==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
-
-                        else 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(DroolsSoftKeywords.SALIENCE)))) {s = 11;}
-
                          
-                        input.seek(index24_19);
+                        input.seek(index28_18);
                         if ( s>=0 ) return s;
                         break;
                     case 13 : 
-                        int LA24_15 = input.LA(1);
+                        int LA28_21 = input.LA(1);
 
                          
-                        int index24_15 = input.index();
+                        int index28_21 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 11;}
+                        if ( (LA28_21==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
+                        else if ( (LA28_21==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 26;}
 
+                        else if ( (LA28_21==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 15;}
+
+                        else if ( ((LA28_21>=VT_COMPILATION_UNIT && LA28_21<=ID)||(LA28_21>=DOT_STAR && LA28_21<=STRING)||(LA28_21>=COMMA && LA28_21<=NULL)||(LA28_21>=RIGHT_SQUARE && LA28_21<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+
                          
-                        input.seek(index24_15);
+                        input.seek(index28_21);
                         if ( s>=0 ) return s;
                         break;
                     case 14 : 
-                        int LA24_17 = input.LA(1);
+                        int LA28_14 = input.LA(1);
 
                          
-                        int index24_17 = input.index();
+                        int index28_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA24_17==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 21;}
+                        if ( (LA28_14==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
 
-                        else if ( ((LA24_17>=VT_COMPILATION_UNIT && LA24_17<=SEMICOLON)||(LA24_17>=DOT && LA24_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 11;}
+                        else if ( (LA28_14==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 20;}
 
+                        else if ( ((LA28_14>=VT_COMPILATION_UNIT && LA28_14<=SEMICOLON)||(LA28_14>=DOT && LA28_14<=STRING)||(LA28_14>=COMMA && LA28_14<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+
                          
-                        input.seek(index24_17);
+                        input.seek(index28_14);
                         if ( s>=0 ) return s;
                         break;
                     case 15 : 
-                        int LA24_12 = input.LA(1);
+                        int LA28_19 = input.LA(1);
 
                          
-                        int index24_12 = input.index();
+                        int index28_19 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 11;}
+                        if ( (LA28_19==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 23;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 7;}
+                        else if ( (LA28_19==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 24;}
 
+                        else if ( (LA28_19==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
+
+                        else if ( ((LA28_19>=VT_COMPILATION_UNIT && LA28_19<=ID)||(LA28_19>=DOT_STAR && LA28_19<=STRING)||(LA28_19>=COMMA && LA28_19<=NULL)||(LA28_19>=RIGHT_SQUARE && LA28_19<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+
                          
-                        input.seek(index24_12);
+                        input.seek(index28_19);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 24, _s, input);
+                new NoViableAltException(getDescription(), 28, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA30_eotS =
-        "\32\uffff";
-    static final String DFA30_eofS =
-        "\32\uffff";
-    static final String DFA30_minS =
-        "\2\126\4\uffff\1\4\3\uffff\1\4\1\0\1\uffff\1\4\2\0\3\4\1\0\2\4\4"+
-        "\0";
-    static final String DFA30_maxS =
-        "\1\157\1\162\4\uffff\1\173\3\uffff\1\173\1\0\1\uffff\1\173\2\0\3"+
-        "\173\1\0\2\173\4\0";
-    static final String DFA30_acceptS =
-        "\2\uffff\1\2\3\1\1\uffff\2\1\1\2\2\uffff\1\1\15\uffff";
-    static final String DFA30_specialS =
-        "\1\15\1\6\4\uffff\1\4\3\uffff\1\0\1\10\1\uffff\1\11\1\13\1\3\1\14"+
-        "\1\7\1\12\1\1\1\2\1\5\4\uffff}>";
-    static final String[] DFA30_transitionS = {
-            "\1\1\5\uffff\1\3\22\uffff\1\2",
-            "\1\11\3\uffff\1\10\1\6\2\uffff\1\11\1\7\1\5\16\uffff\1\11\2"+
-            "\uffff\1\4",
+    static final String DFA51_eotS =
+        "\172\uffff";
+    static final String DFA51_eofS =
+        "\172\uffff";
+    static final String DFA51_minS =
+        "\3\130\2\0\1\130\1\0\1\uffff\1\130\1\163\2\uffff\1\131\1\130\1\uffff"+
+        "\1\131\1\135\1\130\1\163\1\130\1\131\1\130\1\131\1\135\1\130\2\0"+
+        "\1\130\1\163\2\130\2\0\1\130\1\4\11\130\1\0\2\uffff\1\131\1\135"+
+        "\1\130\1\0\2\130\1\4\11\130\1\0\1\uffff\1\130\1\4\12\0\1\uffff\14"+
+        "\0\1\uffff\17\0\1\uffff\17\0";
+    static final String DFA51_maxS =
+        "\2\135\1\162\2\0\1\135\1\0\1\uffff\1\130\1\163\2\uffff\1\162\1\130"+
+        "\1\uffff\2\162\1\130\1\163\1\137\1\162\1\137\3\162\2\0\1\130\1\163"+
+        "\1\137\1\162\2\0\1\130\1\u0080\1\130\7\161\1\130\1\0\2\uffff\3\162"+
+        "\1\0\1\145\1\130\1\u0080\1\130\7\161\1\130\1\0\1\uffff\1\162\1\u0080"+
+        "\12\0\1\uffff\14\0\1\uffff\17\0\1\uffff\17\0";
+    static final String DFA51_acceptS =
+        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\36\uffff\2\3\21\uffff\1\3\14"+
+        "\uffff\1\3\14\uffff\1\3\17\uffff\1\3\17\uffff";
+    static final String DFA51_specialS =
+        "\2\uffff\1\4\1\1\1\2\1\uffff\1\7\22\uffff\1\11\1\0\4\uffff\1\10"+
+        "\1\5\13\uffff\1\6\5\uffff\1\12\14\uffff\1\3\72\uffff}>";
+    static final String[] DFA51_transitionS = {
+            "\1\2\4\uffff\1\1",
+            "\1\4\4\uffff\1\3",
+            "\1\7\1\10\3\uffff\1\6\3\uffff\1\5\20\uffff\1\11",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\14\4\uffff\1\15",
+            "\1\uffff",
             "",
+            "\1\17",
+            "\1\20",
             "",
             "",
+            "\1\21\3\uffff\1\23\24\uffff\1\22",
+            "\1\24",
             "",
-            "\122\14\1\12\4\14\1\13\40\14",
+            "\1\10\3\uffff\1\25\24\uffff\1\11",
+            "\1\25\24\uffff\1\11",
+            "\1\26",
+            "\1\27",
+            "\1\30\4\uffff\1\31\1\uffff\1\32",
+            "\1\33\3\uffff\1\35\24\uffff\1\34",
+            "\1\36\4\uffff\1\37\1\uffff\1\40",
+            "\1\21\3\uffff\1\23\24\uffff\1\22",
+            "\1\23\24\uffff\1\22",
+            "\1\44\1\43\3\uffff\1\54\3\uffff\1\41\7\uffff\1\45\1\46\1\47"+
+            "\1\50\1\51\1\52\1\53\2\uffff\1\42",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\57",
+            "\1\60",
+            "\1\61\4\uffff\1\62\1\uffff\1\63",
+            "\1\67\1\66\3\uffff\1\77\3\uffff\1\64\7\uffff\1\70\1\71\1\72"+
+            "\1\73\1\74\1\75\1\76\2\uffff\1\65",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\101",
+            "\156\102\1\103\1\104\15\102",
+            "\1\105",
+            "\1\106\3\uffff\1\107\1\110\5\uffff\2\107\12\uffff\1\111\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\114",
+            "\1\uffff",
             "",
             "",
+            "\1\33\3\uffff\1\35\24\uffff\1\34",
+            "\1\35\24\uffff\1\34",
+            "\1\122\1\121\3\uffff\1\117\3\uffff\1\116\7\uffff\1\123\1\124"+
+            "\1\125\1\126\1\127\1\130\1\131\2\uffff\1\120",
+            "\1\uffff",
+            "\1\133\6\uffff\1\135\5\uffff\1\134",
+            "\1\136",
+            "\156\137\1\140\1\141\15\137",
+            "\1\142",
+            "\1\143\3\uffff\1\146\1\145\5\uffff\2\146\12\uffff\1\144\2\146",
+            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
+            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
+            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
+            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
+            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
+            "\1\147\3\uffff\1\146\1\150\5\uffff\2\146\13\uffff\2\146",
+            "\1\151",
+            "\1\uffff",
             "",
-            "\122\14\1\17\1\20\3\14\1\16\2\14\1\15\16\14\1\21\16\14",
+            "\1\155\1\154\3\uffff\1\165\1\171\1\32\5\uffff\1\170\1\167\1"+
+            "\uffff\1\166\1\156\1\157\1\160\1\161\1\162\1\163\1\164\2\uffff"+
+            "\1\153",
+            "\156\102\1\103\1\104\15\102",
             "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             "",
-            "\122\14\1\22\4\14\1\23\40\14",
             "\1\uffff",
             "\1\uffff",
-            "\122\14\1\24\45\14",
-            "\152\14\1\25\15\14",
-            "\123\14\1\26\3\14\1\30\21\14\1\27\16\14",
             "\1\uffff",
-            "\123\14\1\20\3\14\1\31\21\14\1\21\16\14",
-            "\127\14\1\31\21\14\1\21\16\14",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
             "\1\uffff"
     };
 
-    static final short[] DFA30_eot = DFA.unpackEncodedString(DFA30_eotS);
-    static final short[] DFA30_eof = DFA.unpackEncodedString(DFA30_eofS);
-    static final char[] DFA30_min = DFA.unpackEncodedStringToUnsignedChars(DFA30_minS);
-    static final char[] DFA30_max = DFA.unpackEncodedStringToUnsignedChars(DFA30_maxS);
-    static final short[] DFA30_accept = DFA.unpackEncodedString(DFA30_acceptS);
-    static final short[] DFA30_special = DFA.unpackEncodedString(DFA30_specialS);
-    static final short[][] DFA30_transition;
+    static final short[] DFA51_eot = DFA.unpackEncodedString(DFA51_eotS);
+    static final short[] DFA51_eof = DFA.unpackEncodedString(DFA51_eofS);
+    static final char[] DFA51_min = DFA.unpackEncodedStringToUnsignedChars(DFA51_minS);
+    static final char[] DFA51_max = DFA.unpackEncodedStringToUnsignedChars(DFA51_maxS);
+    static final short[] DFA51_accept = DFA.unpackEncodedString(DFA51_acceptS);
+    static final short[] DFA51_special = DFA.unpackEncodedString(DFA51_specialS);
+    static final short[][] DFA51_transition;
 
     static {
-        int numStates = DFA30_transitionS.length;
-        DFA30_transition = new short[numStates][];
+        int numStates = DFA51_transitionS.length;
+        DFA51_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA30_transition[i] = DFA.unpackEncodedString(DFA30_transitionS[i]);
+            DFA51_transition[i] = DFA.unpackEncodedString(DFA51_transitionS[i]);
         }
     }
 
-    class DFA30 extends DFA {
+    class DFA51 extends DFA {
 
-        public DFA30(BaseRecognizer recognizer) {
+        public DFA51(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 30;
-            this.eot = DFA30_eot;
-            this.eof = DFA30_eof;
-            this.min = DFA30_min;
-            this.max = DFA30_max;
-            this.accept = DFA30_accept;
-            this.special = DFA30_special;
-            this.transition = DFA30_transition;
+            this.decisionNumber = 51;
+            this.eot = DFA51_eot;
+            this.eof = DFA51_eof;
+            this.min = DFA51_min;
+            this.max = DFA51_max;
+            this.accept = DFA51_accept;
+            this.special = DFA51_special;
+            this.transition = DFA51_transition;
         }
         public String getDescription() {
-            return "()* loopback of 399:45: ( ( COMMA )? attr= rule_attribute )*";
+            return "548: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 LA30_10 = input.LA(1);
+                        int LA51_26 = input.LA(1);
 
                          
-                        int index30_10 = input.index();
+                        int index51_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_10==COLON) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 13;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (LA30_10==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 14;}
+                        else if ( (true) ) {s = 46;}
 
-                        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(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
-
-                        else if ( (LA30_10==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 15;}
-
-                        else if ( (LA30_10==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
-
-                        else if ( (LA30_10==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
-
                          
-                        input.seek(index30_10);
+                        input.seek(index51_26);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA30_19 = input.LA(1);
+                        int LA51_3 = input.LA(1);
 
                          
-                        int index30_19 = input.index();
+                        int index51_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index30_19);
+                        input.seek(index51_3);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA30_20 = input.LA(1);
+                        int LA51_4 = input.LA(1);
 
                          
-                        int index30_20 = input.index();
+                        int index51_4 = 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(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (LA30_20==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+                        else if ( (true) ) {s = 11;}
 
-                        else if ( (LA30_20==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
-
-                        else if ( (LA30_20==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 16;}
-
                          
-                        input.seek(index30_20);
+                        input.seek(index51_4);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA30_15 = input.LA(1);
+                        int LA51_63 = input.LA(1);
 
                          
-                        int index30_15 = input.index();
+                        int index51_63 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (true) ) {s = 106;}
 
                          
-                        input.seek(index30_15);
+                        input.seek(index51_63);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA30_6 = input.LA(1);
+                        int LA51_2 = input.LA(1);
 
                          
-                        int index30_6 = input.index();
+                        int index51_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_6==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 10;}
+                        if ( (LA51_2==COLON) ) {s = 5;}
 
-                        else if ( (LA30_6==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 11;}
+                        else if ( (LA51_2==LEFT_PAREN) ) {s = 6;}
 
-                        else if ( ((LA30_6>=VT_COMPILATION_UNIT && LA30_6<=SEMICOLON)||(LA30_6>=DOT && LA30_6<=STRING)||(LA30_6>=COMMA && LA30_6<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( (LA51_2==ID) && (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierK!
 ey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 7;}
 
+                        else if ( (LA51_2==DOT) ) {s = 8;}
+
+                        else if ( (LA51_2==LEFT_SQUARE) ) {s = 9;}
+
                          
-                        input.seek(index30_6);
+                        input.seek(index51_2);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA30_21 = input.LA(1);
+                        int LA51_32 = input.LA(1);
 
                          
-                        int index30_21 = input.index();
+                        int index51_32 = 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(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (LA30_21==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 17;}
+                        else if ( (true) ) {s = 46;}
 
-                        else if ( (LA30_21==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 25;}
-
                          
-                        input.seek(index30_21);
+                        input.seek(index51_32);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA30_1 = input.LA(1);
+                        int LA51_44 = input.LA(1);
 
                          
-                        int index30_1 = input.index();
+                        int index51_44 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_1==MISC) && (((validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateL!
 T(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))))) {s = 4;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (LA30_1==INT) && (((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))))) {s = 5;}
+                        else if ( (true) ) {s = 77;}
 
-                        else if ( (LA30_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 6;}
-
-                        else if ( (LA30_1==BOOL) && ((validateIdentifierKey(DroolsSoftKeywords.ENABLED)))) {s = 7;}
-
-                        else if ( (LA30_1==STRING) && ((validateIdentifierKey(DroolsSoftKeywords.DIALECT)))) {s = 8;}
-
-                        else if ( (LA30_1==ID||LA30_1==COLON||LA30_1==THEN) && ((validateIdentifierKey(DroolsSoftKeywords.WHEN)))) {s = 9;}
-
                          
-                        input.seek(index30_1);
+                        input.seek(index51_44);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA30_17 = input.LA(1);
+                        int LA51_6 = input.LA(1);
 
                          
-                        int index30_17 = input.index();
+                        int index51_6 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_17==RIGHT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 21;}
+                        if ( (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||synpred6()||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL))))) ) {s = 7;}
 
-                        else if ( ((LA30_17>=VT_COMPILATION_UNIT && LA30_17<=LEFT_SQUARE)||(LA30_17>=THEN && LA30_17<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        else if ( (true) ) {s = 14;}
 
                          
-                        input.seek(index30_17);
+                        input.seek(index51_6);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA30_11 = input.LA(1);
+                        int LA51_31 = input.LA(1);
 
                          
-                        int index30_11 = input.index();
+                        int index51_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
+                        else if ( (true) ) {s = 64;}
 
                          
-                        input.seek(index30_11);
+                        input.seek(index51_31);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA30_13 = input.LA(1);
+                        int LA51_25 = input.LA(1);
 
                          
-                        int index30_13 = input.index();
+                        int index51_25 = input.index();
                         input.rewind();
                         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(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (LA30_13==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 18;}
+                        else if ( (true) ) {s = 45;}
 
-                        else if ( (LA30_13==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 19;}
-
                          
-                        input.seek(index30_13);
+                        input.seek(index51_25);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA30_18 = input.LA(1);
+                        int LA51_50 = input.LA(1);
 
                          
-                        int index30_18 = input.index();
+                        int index51_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA30_18==DOT) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 22;}
+                        if ( (synpred6()) ) {s = 7;}
 
-                        else if ( (LA30_18==LEFT_SQUARE) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 23;}
+                        else if ( (true) ) {s = 90;}
 
-                        else if ( (LA30_18==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 24;}
-
-                        else 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(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
-
                          
-                        input.seek(index30_18);
+                        input.seek(index51_50);
                         if ( s>=0 ) return s;
                         break;
-                    case 11 : 
-                        int LA30_14 = input.LA(1);
-
-                         
-                        int index30_14 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE))) ) {s = 12;}
-
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.WHEN))) ) {s = 9;}
-
-                         
-                        input.seek(index30_14);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 12 : 
-                        int LA30_16 = input.LA(1);
-
-                         
-                        int index30_16 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA30_16==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.SALIENCE))))) {s = 20;}
-
-                        else if ( ((LA30_16>=VT_COMPILATION_UNIT && LA30_16<=SEMICOLON)||(LA30_16>=DOT && LA30_16<=MULTI_LINE_COMMENT)) && ((validateIdentifierKey(DroolsSoftKeywords.SALIENCE)))) {s = 12;}
-
-                         
-                        input.seek(index30_16);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 13 : 
-                        int LA30_0 = input.LA(1);
-
-                         
-                        int index30_0 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (LA30_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.WHEN))||(validateIdentifierKey(DroolsSoftKeywords.DIALECT))||(validateIdentifierKey(DroolsSoftKeywords.ACTIVATION) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.NO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.LOOP))||(validateIdentifierKey(DroolsSoftKeywords.DURATION))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EFFECTIVE))||(validateIdentifierKey(DroolsSoftKeywords.AGENDA) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.DATE) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.EXPIRES))||(validateIdentifierKey(DroolsSoftKeywords.LOCK) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.ON) && validateLT(4, "-") && validateLT(5, DroolsSoftKeywords.ACTIVE))||(validateIdentifierK!
 ey(DroolsSoftKeywords.SALIENCE))||(validateIdentifierKey(DroolsSoftKeywords.RULEFLOW) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.GROUP))||(validateIdentifierKey(DroolsSoftKeywords.ENABLED))||(validateIdentifierKey(DroolsSoftKeywords.AUTO) && validateLT(2, "-") && validateLT(3, DroolsSoftKeywords.FOCUS))))) {s = 1;}
-
-                        else if ( (LA30_0==THEN) ) {s = 2;}
-
-                        else if ( (LA30_0==COMMA) ) {s = 3;}
-
-                         
-                        input.seek(index30_0);
-                        if ( s>=0 ) return s;
-                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 30, _s, input);
+                new NoViableAltException(getDescription(), 51, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA47_eotS =
+    static final String DFA52_eotS =
         "\172\uffff";
-    static final String DFA47_eofS =
+    static final String DFA52_eofS =
         "\172\uffff";
-    static final String DFA47_minS =
-        "\3\126\2\0\1\126\1\0\1\uffff\1\126\1\156\2\uffff\1\127\1\126\1\uffff"+
-        "\1\127\1\133\1\126\1\156\1\126\1\127\1\126\1\127\1\133\1\126\2\0"+
-        "\1\126\1\156\2\126\2\0\1\126\1\0\1\4\11\126\2\uffff\1\127\1\133"+
-        "\1\126\1\0\2\126\1\4\11\126\1\0\1\uffff\1\126\1\uffff\1\4\26\0\1"+
-        "\uffff\17\0\1\uffff\17\0";
-    static final String DFA47_maxS =
-        "\2\133\1\155\2\0\1\133\1\0\1\uffff\1\126\1\156\2\uffff\1\155\1\126"+
-        "\1\uffff\2\155\1\126\1\156\1\135\1\155\1\135\3\155\2\0\1\126\1\156"+
-        "\1\135\1\155\2\0\1\126\1\0\1\173\1\126\7\154\1\126\2\uffff\3\155"+
-        "\1\0\1\141\1\126\1\173\1\126\7\154\1\126\1\0\1\uffff\1\155\1\uffff"+
-        "\1\173\26\0\1\uffff\17\0\1\uffff\17\0";
-    static final String DFA47_acceptS =
-        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\36\uffff\2\3\21\uffff\1\3\1"+
-        "\uffff\1\3\27\uffff\1\3\17\uffff\1\3\17\uffff";
-    static final String DFA47_specialS =
-        "\2\uffff\1\5\1\0\1\7\1\uffff\1\11\22\uffff\1\3\1\12\4\uffff\1\2"+
-        "\1\10\1\uffff\1\6\17\uffff\1\4\14\uffff\1\1\72\uffff}>";
-    static final String[] DFA47_transitionS = {
+    static final String DFA52_minS =
+        "\3\130\2\0\2\130\1\163\1\0\3\uffff\1\131\1\130\1\131\1\135\1\uffff"+
+        "\1\130\1\163\1\130\1\131\1\130\1\131\1\135\1\130\2\0\1\130\1\163"+
+        "\2\130\2\0\1\130\1\4\11\130\1\0\2\uffff\1\131\1\135\1\130\1\0\2"+
+        "\130\1\4\11\130\1\0\1\uffff\1\130\1\4\12\0\1\uffff\14\0\1\uffff"+
+        "\17\0\1\uffff\17\0";
+    static final String DFA52_maxS =
+        "\2\135\1\162\2\0\1\135\1\130\1\163\1\0\3\uffff\1\162\1\130\2\162"+
+        "\1\uffff\1\130\1\163\1\137\1\162\1\137\3\162\2\0\1\130\1\163\1\137"+
+        "\1\162\2\0\1\130\1\u0080\1\130\7\161\1\130\1\0\2\uffff\3\162\1\0"+
+        "\1\145\1\130\1\u0080\1\130\7\161\1\130\1\0\1\uffff\1\162\1\u0080"+
+        "\12\0\1\uffff\14\0\1\uffff\17\0\1\uffff\17\0";
+    static final String DFA52_acceptS =
+        "\11\uffff\1\1\2\2\4\uffff\1\3\34\uffff\2\3\21\uffff\1\3\14\uffff"+
+        "\1\3\14\uffff\1\3\17\uffff\1\3\17\uffff";
+    static final String DFA52_specialS =
+        "\2\uffff\1\2\1\0\1\1\3\uffff\1\3\20\uffff\1\10\1\4\4\uffff\1\7\1"+
+        "\6\13\uffff\1\5\5\uffff\1\11\14\uffff\1\12\72\uffff}>";
+    static final String[] DFA52_transitionS = {
             "\1\2\4\uffff\1\1",
             "\1\3\4\uffff\1\4",
-            "\1\7\1\10\3\uffff\1\6\2\uffff\1\5\16\uffff\1\11",
+            "\1\11\1\6\3\uffff\1\10\3\uffff\1\5\20\uffff\1\7",
             "\1\uffff",
             "\1\uffff",
             "\1\14\4\uffff\1\15",
+            "\1\16",
+            "\1\17",
             "\1\uffff",
             "",
-            "\1\17",
-            "\1\20",
             "",
             "",
-            "\1\21\3\uffff\1\23\21\uffff\1\22",
+            "\1\21\3\uffff\1\23\24\uffff\1\22",
             "\1\24",
+            "\1\6\3\uffff\1\25\24\uffff\1\7",
+            "\1\25\24\uffff\1\7",
             "",
-            "\1\10\3\uffff\1\25\21\uffff\1\11",
-            "\1\25\21\uffff\1\11",
             "\1\26",
             "\1\27",
             "\1\30\4\uffff\1\31\1\uffff\1\32",
-            "\1\33\3\uffff\1\35\21\uffff\1\34",
+            "\1\33\3\uffff\1\35\24\uffff\1\34",
             "\1\36\4\uffff\1\37\1\uffff\1\40",
-            "\1\21\3\uffff\1\23\21\uffff\1\22",
-            "\1\23\21\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\1\54\2\uffff\1\43",
+            "\1\21\3\uffff\1\23\24\uffff\1\22",
+            "\1\23\24\uffff\1\22",
+            "\1\44\1\43\3\uffff\1\54\3\uffff\1\41\7\uffff\1\45\1\46\1\47"+
+            "\1\50\1\51\1\52\1\53\2\uffff\1\42",
             "\1\uffff",
             "\1\uffff",
             "\1\57",
             "\1\60",
             "\1\61\4\uffff\1\62\1\uffff\1\63",
-            "\1\67\1\66\3\uffff\1\77\2\uffff\1\64\5\uffff\1\70\1\71\1\72"+
+            "\1\67\1\66\3\uffff\1\77\3\uffff\1\64\7\uffff\1\70\1\71\1\72"+
             "\1\73\1\74\1\75\1\76\2\uffff\1\65",
             "\1\uffff",
             "\1\uffff",
             "\1\101",
+            "\156\102\1\103\1\104\15\102",
+            "\1\105",
+            "\1\106\3\uffff\1\107\1\110\5\uffff\2\107\12\uffff\1\111\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\112\3\uffff\1\107\1\113\5\uffff\2\107\13\uffff\2\107",
+            "\1\114",
             "\1\uffff",
-            "\151\103\1\104\1\105\15\103",
-            "\1\106",
-            "\1\107\3\uffff\1\111\1\112\3\uffff\2\111\11\uffff\1\110\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\115",
             "",
             "",
-            "\1\33\3\uffff\1\35\21\uffff\1\34",
-            "\1\35\21\uffff\1\34",
-            "\1\121\1\120\3\uffff\1\131\2\uffff\1\116\5\uffff\1\122\1\123"+
+            "\1\33\3\uffff\1\35\24\uffff\1\34",
+            "\1\35\24\uffff\1\34",
+            "\1\121\1\120\3\uffff\1\131\3\uffff\1\116\7\uffff\1\122\1\123"+
             "\1\124\1\125\1\126\1\127\1\130\2\uffff\1\117",
             "\1\uffff",
-            "\1\133\6\uffff\1\135\3\uffff\1\134",
+            "\1\133\6\uffff\1\135\5\uffff\1\134",
             "\1\136",
-            "\151\137\1\140\1\141\15\137",
+            "\156\137\1\140\1\141\15\137",
             "\1\142",
-            "\1\143\3\uffff\1\144\1\145\3\uffff\2\144\11\uffff\1\146\2\144",
-            "\1\147\3\uffff\1\144\1\150\3\uffff\2\144\12\uffff\2\144",
-            "\1\147\3\uffff\1\144\1\150\3\uffff\2\144\12\uffff\2\144",
-            "\1\147\3\uffff\1\144\1\150\3\uffff\2\144\12\uffff\2\144",
-            "\1\147\3\uffff\1\144\1\150\3\uffff\2\144\12\uffff\2\144",
-            "\1\147\3\uffff\1\144\1\150\3\uffff\2\144\12\uffff\2\144",
-            "\1\147\3\uffff\1\144\1\150\3\uffff\2\144\12\uffff\2\144",
+            "\1\143\3\uffff\1\144\1\145\5\uffff\2\144\12\uffff\1\146\2\144",
+            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
+            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
+            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
+            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
+            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
+            "\1\147\3\uffff\1\144\1\150\5\uffff\2\144\13\uffff\2\144",
             "\1\151",
             "\1\uffff",
             "",
-            "\1\155\1\154\3\uffff\1\165\1\171\1\32\3\uffff\1\170\1\167\1"+
-            "\166\1\156\1\157\1\160\1\161\1\162\1\163\1\164\2\uffff\1\153",
-            "",
-            "\151\103\1\104\1\105\15\103",
+            "\1\155\1\154\3\uffff\1\165\1\171\1\32\5\uffff\1\170\1\167\1"+
+            "\uffff\1\166\1\156\1\157\1\160\1\161\1\162\1\163\1\164\2\uffff"+
+            "\1\153",
+            "\156\102\1\103\1\104\15\102",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18443,6 +17102,7 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -18489,895 +17149,1157 @@
             "\1\uffff"
     };
 
-    static final short[] DFA47_eot = DFA.unpackEncodedString(DFA47_eotS);
-    static final short[] DFA47_eof = DFA.unpackEncodedString(DFA47_eofS);
-    static final char[] DFA47_min = DFA.unpackEncodedStringToUnsignedChars(DFA47_minS);
-    static final char[] DFA47_max = DFA.unpackEncodedStringToUnsignedChars(DFA47_maxS);
-    static final short[] DFA47_accept = DFA.unpackEncodedString(DFA47_acceptS);
-    static final short[] DFA47_special = DFA.unpackEncodedString(DFA47_specialS);
-    static final short[][] DFA47_transition;
+    static final short[] DFA52_eot = DFA.unpackEncodedString(DFA52_eotS);
+    static final short[] DFA52_eof = DFA.unpackEncodedString(DFA52_eofS);
+    static final char[] DFA52_min = DFA.unpackEncodedStringToUnsignedChars(DFA52_minS);
+    static final char[] DFA52_max = DFA.unpackEncodedStringToUnsignedChars(DFA52_maxS);
+    static final short[] DFA52_accept = DFA.unpackEncodedString(DFA52_acceptS);
+    static final short[] DFA52_special = DFA.unpackEncodedString(DFA52_specialS);
+    static final short[][] DFA52_transition;
 
     static {
-        int numStates = DFA47_transitionS.length;
-        DFA47_transition = new short[numStates][];
+        int numStates = DFA52_transitionS.length;
+        DFA52_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA47_transition[i] = DFA.unpackEncodedString(DFA47_transitionS[i]);
+            DFA52_transition[i] = DFA.unpackEncodedString(DFA52_transitionS[i]);
         }
     }
 
-    class DFA47 extends DFA {
+    class DFA52 extends DFA {
 
-        public DFA47(BaseRecognizer recognizer) {
+        public DFA52(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 47;
-            this.eot = DFA47_eot;
-            this.eof = DFA47_eof;
-            this.min = DFA47_min;
-            this.max = DFA47_max;
-            this.accept = DFA47_accept;
-            this.special = DFA47_special;
-            this.transition = DFA47_transition;
+            this.decisionNumber = 52;
+            this.eot = DFA52_eot;
+            this.eof = DFA52_eof;
+            this.min = DFA52_min;
+            this.max = DFA52_max;
+            this.accept = DFA52_accept;
+            this.special = DFA52_special;
+            this.transition = DFA52_transition;
         }
         public String getDescription() {
-            return "513:10: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "556: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 LA47_3 = input.LA(1);
+                        int LA52_3 = input.LA(1);
 
                          
-                        int index47_3 = input.index();
+                        int index52_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred7()) ) {s = 9;}
 
                         else if ( (true) ) {s = 10;}
 
                          
-                        input.seek(index47_3);
+                        input.seek(index52_3);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA47_63 = input.LA(1);
+                        int LA52_4 = input.LA(1);
 
                          
-                        int index47_63 = input.index();
+                        int index52_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 106;}
+                        else if ( (true) ) {s = 11;}
 
                          
-                        input.seek(index47_63);
+                        input.seek(index52_4);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA47_31 = input.LA(1);
+                        int LA52_2 = input.LA(1);
 
                          
-                        int index47_31 = input.index();
+                        int index52_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (LA52_2==COLON) ) {s = 5;}
 
-                        else if ( (true) ) {s = 64;}
+                        else if ( (LA52_2==DOT) ) {s = 6;}
 
+                        else if ( (LA52_2==LEFT_SQUARE) ) {s = 7;}
+
+                        else if ( (LA52_2==LEFT_PAREN) ) {s = 8;}
+
+                        else if ( (LA52_2==ID) && (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifi!
 erKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 9;}
+
                          
-                        input.seek(index47_31);
+                        input.seek(index52_2);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA47_25 = input.LA(1);
+                        int LA52_8 = input.LA(1);
 
                          
-                        int index47_25 = input.index();
+                        int index52_8 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||synpred7()||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT))))) ) {s = 9;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (true) ) {s = 16;}
 
                          
-                        input.seek(index47_25);
+                        input.seek(index52_8);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA47_50 = input.LA(1);
+                        int LA52_26 = input.LA(1);
 
                          
-                        int index47_50 = input.index();
+                        int index52_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 90;}
+                        else if ( (true) ) {s = 46;}
 
                          
-                        input.seek(index47_50);
+                        input.seek(index52_26);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA47_2 = input.LA(1);
+                        int LA52_44 = input.LA(1);
 
                          
-                        int index47_2 = input.index();
+                        int index52_44 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA47_2==COLON) ) {s = 5;}
+                        if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (LA47_2==LEFT_PAREN) ) {s = 6;}
+                        else if ( (true) ) {s = 77;}
 
-                        else if ( (LA47_2==ID) && (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifi!
 erKey(DroolsSoftKeywords.NOT)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 7;}
-
-                        else if ( (LA47_2==DOT) ) {s = 8;}
-
-                        else if ( (LA47_2==LEFT_SQUARE) ) {s = 9;}
-
                          
-                        input.seek(index47_2);
+                        input.seek(index52_44);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA47_34 = input.LA(1);
+                        int LA52_32 = input.LA(1);
 
                          
-                        int index47_34 = input.index();
+                        int index52_32 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 66;}
+                        else if ( (true) ) {s = 46;}
 
                          
-                        input.seek(index47_34);
+                        input.seek(index52_32);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA47_4 = input.LA(1);
+                        int LA52_31 = input.LA(1);
 
                          
-                        int index47_4 = input.index();
+                        int index52_31 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 11;}
+                        else if ( (true) ) {s = 64;}
 
                          
-                        input.seek(index47_4);
+                        input.seek(index52_31);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA47_32 = input.LA(1);
+                        int LA52_25 = input.LA(1);
 
                          
-                        int index47_32 = input.index();
+                        int index52_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 45;}
 
                          
-                        input.seek(index47_32);
+                        input.seek(index52_25);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA47_6 = input.LA(1);
+                        int LA52_50 = input.LA(1);
 
                          
-                        int index47_6 = input.index();
+                        int index52_50 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (((synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||synpred6()||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL)))||(synpred6()&&(validateIdentifierKey(DroolsSoftKeywords.NOT))))) ) {s = 7;}
+                        if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 14;}
+                        else if ( (true) ) {s = 90;}
 
                          
-                        input.seek(index47_6);
+                        input.seek(index52_50);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA47_26 = input.LA(1);
+                        int LA52_63 = input.LA(1);
 
                          
-                        int index47_26 = input.index();
+                        int index52_63 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred6()) ) {s = 7;}
+                        if ( (synpred7()) ) {s = 9;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (true) ) {s = 106;}
 
                          
-                        input.seek(index47_26);
+                        input.seek(index52_63);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 47, _s, input);
+                new NoViableAltException(getDescription(), 52, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA48_eotS =
-        "\173\uffff";
-    static final String DFA48_eofS =
-        "\173\uffff";
-    static final String DFA48_minS =
-        "\3\126\2\0\1\126\1\0\1\uffff\1\126\1\156\2\uffff\1\127\1\126\1\uffff"+
-        "\1\127\1\133\1\126\1\156\1\126\1\127\1\126\1\127\1\133\1\126\2\0"+
-        "\1\126\1\156\2\126\2\0\1\126\1\4\11\126\1\0\2\uffff\1\127\1\133"+
-        "\1\126\1\0\2\126\1\4\11\126\1\0\2\uffff\1\126\1\4\12\0\1\uffff\14"+
-        "\0\1\uffff\17\0\1\uffff\17\0";
-    static final String DFA48_maxS =
-        "\2\133\1\155\2\0\1\133\1\0\1\uffff\1\126\1\156\2\uffff\1\155\1\126"+
-        "\1\uffff\2\155\1\126\1\156\1\135\1\155\1\135\3\155\2\0\1\126\1\156"+
-        "\1\135\1\155\2\0\1\126\1\173\1\126\7\154\1\126\1\0\2\uffff\3\155"+
-        "\1\0\1\141\1\126\1\173\1\126\7\154\1\126\1\0\2\uffff\1\155\1\173"+
-        "\12\0\1\uffff\14\0\1\uffff\17\0\1\uffff\17\0";
-    static final String DFA48_acceptS =
-        "\7\uffff\1\1\2\uffff\2\2\2\uffff\1\3\36\uffff\2\3\21\uffff\2\3\14"+
-        "\uffff\1\3\14\uffff\1\3\17\uffff\1\3\17\uffff";
-    static final String DFA48_specialS =
-        "\2\uffff\1\5\1\2\1\1\1\uffff\1\7\22\uffff\1\0\1\6\4\uffff\1\3\1"+
-        "\11\13\uffff\1\12\5\uffff\1\4\14\uffff\1\10\73\uffff}>";
-    static final String[] DFA48_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\16\uffff\1\11",
+    static final String DFA59_eotS =
+        "\13\uffff";
+    static final String DFA59_eofS =
+        "\13\uffff";
+    static final String DFA59_minS =
+        "\1\130\1\135\2\4\1\0\1\130\1\0\4\uffff";
+    static final String DFA59_maxS =
+        "\1\130\1\135\2\u0080\1\0\1\137\1\0\4\uffff";
+    static final String DFA59_acceptS =
+        "\7\uffff\1\1\2\2\1\1";
+    static final String DFA59_specialS =
+        "\4\uffff\1\2\1\1\1\0\4\uffff}>";
+    static final String[] DFA59_transitionS = {
+            "\1\1",
+            "\1\2",
+            "\131\3\1\4\1\3\1\5\41\3",
+            "\131\3\1\6\1\3\1\5\41\3",
             "\1\uffff",
+            "\1\12\5\uffff\1\12\1\11",
             "\1\uffff",
-            "\1\14\4\uffff\1\15",
-            "\1\uffff",
             "",
-            "\1\17",
-            "\1\20",
             "",
             "",
-            "\1\21\3\uffff\1\23\21\uffff\1\22",
-            "\1\24",
-            "",
-            "\1\10\3\uffff\1\25\21\uffff\1\11",
-            "\1\25\21\uffff\1\11",
-            "\1\26",
-            "\1\27",
-            "\1\30\4\uffff\1\31\1\uffff\1\32",
-            "\1\33\3\uffff\1\35\21\uffff\1\34",
-            "\1\36\4\uffff\1\37\1\uffff\1\40",
-            "\1\21\3\uffff\1\23\21\uffff\1\22",
-            "\1\23\21\uffff\1\22",
-            "\1\44\1\43\3\uffff\1\54\2\uffff\1\41\5\uffff\1\45\1\46\1\47"+
-            "\1\50\1\51\1\52\1\53\2\uffff\1\42",
+            ""
+    };
+
+    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 "600:3: ( accumulate_init_clause | accumulate_id_clause )";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA59_6 = input.LA(1);
+
+                         
+                        int index59_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {s = 10;}
+
+                        else if ( (true) ) {s = 9;}
+
+                         
+                        input.seek(index59_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA59_5 = input.LA(1);
+
+                         
+                        int index59_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA59_5==RIGHT_PAREN) ) {s = 9;}
+
+                        else if ( (LA59_5==ID||LA59_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.INIT)))) {s = 10;}
+
+                         
+                        input.seek(index59_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA59_4 = input.LA(1);
+
+                         
+                        int index59_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {s = 7;}
+
+                        else if ( (true) ) {s = 8;}
+
+                         
+                        input.seek(index59_4);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 59, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA63_eotS =
+        "\13\uffff";
+    static final String DFA63_eofS =
+        "\13\uffff";
+    static final String DFA63_minS =
+        "\1\130\1\135\2\4\1\0\1\130\1\0\4\uffff";
+    static final String DFA63_maxS =
+        "\1\130\1\135\2\u0080\1\0\1\137\1\0\4\uffff";
+    static final String DFA63_acceptS =
+        "\7\uffff\1\1\2\2\1\1";
+    static final String DFA63_specialS =
+        "\1\5\1\0\1\6\1\4\1\3\1\2\1\1\4\uffff}>";
+    static final String[] DFA63_transitionS = {
+            "\1\1",
+            "\1\2",
+            "\131\3\1\4\1\3\1\5\41\3",
+            "\131\3\1\6\1\3\1\5\41\3",
             "\1\uffff",
+            "\1\12\5\uffff\1\12\1\11",
             "\1\uffff",
-            "\1\57",
-            "\1\60",
-            "\1\61\4\uffff\1\62\1\uffff\1\63",
-            "\1\67\1\66\3\uffff\1\77\2\uffff\1\64\5\uffff\1\70\1\71\1\72"+
-            "\1\73\1\74\1\75\1\76\2\uffff\1\65",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\102",
-            "\151\103\1\104\1\105\15\103",
-            "\1\106",
-            "\1\107\3\uffff\1\111\1\112\3\uffff\2\111\11\uffff\1\110\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\113\3\uffff\1\111\1\114\3\uffff\2\111\12\uffff\2\111",
-            "\1\115",
-            "\1\uffff",
             "",
             "",
-            "\1\33\3\uffff\1\35\21\uffff\1\34",
-            "\1\35\21\uffff\1\34",
-            "\1\123\1\122\3\uffff\1\120\2\uffff\1\117\5\uffff\1\124\1\125"+
-            "\1\126\1\127\1\130\1\131\1\132\2\uffff\1\121",
-            "\1\uffff",
-            "\1\134\6\uffff\1\136\3\uffff\1\135",
-            "\1\137",
-            "\151\140\1\141\1\142\15\140",
-            "\1\143",
-            "\1\144\3\uffff\1\145\1\146\3\uffff\2\145\11\uffff\1\147\2\145",
-            "\1\150\3\uffff\1\145\1\151\3\uffff\2\145\12\uffff\2\145",
-            "\1\150\3\uffff\1\145\1\151\3\uffff\2\145\12\uffff\2\145",
-            "\1\150\3\uffff\1\145\1\151\3\uffff\2\145\12\uffff\2\145",
-            "\1\150\3\uffff\1\145\1\151\3\uffff\2\145\12\uffff\2\145",
-            "\1\150\3\uffff\1\145\1\151\3\uffff\2\145\12\uffff\2\145",
-            "\1\150\3\uffff\1\145\1\151\3\uffff\2\145\12\uffff\2\145",
-            "\1\152",
-            "\1\uffff",
             "",
+            ""
+    };
+
+    static final short[] DFA63_eot = DFA.unpackEncodedString(DFA63_eotS);
+    static final short[] DFA63_eof = DFA.unpackEncodedString(DFA63_eofS);
+    static final char[] DFA63_min = DFA.unpackEncodedStringToUnsignedChars(DFA63_minS);
+    static final char[] DFA63_max = DFA.unpackEncodedStringToUnsignedChars(DFA63_maxS);
+    static final short[] DFA63_accept = DFA.unpackEncodedString(DFA63_acceptS);
+    static final short[] DFA63_special = DFA.unpackEncodedString(DFA63_specialS);
+    static final short[][] DFA63_transition;
+
+    static {
+        int numStates = DFA63_transitionS.length;
+        DFA63_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA63_transition[i] = DFA.unpackEncodedString(DFA63_transitionS[i]);
+        }
+    }
+
+    class DFA63 extends DFA {
+
+        public DFA63(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 63;
+            this.eot = DFA63_eot;
+            this.eof = DFA63_eof;
+            this.min = DFA63_min;
+            this.max = DFA63_max;
+            this.accept = DFA63_accept;
+            this.special = DFA63_special;
+            this.transition = DFA63_transition;
+        }
+        public String getDescription() {
+            return "611:2: ( reverse_key pc3= paren_chunk ( COMMA )? )?";
+        }
+        public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA63_1 = input.LA(1);
+
+                         
+                        int index63_1 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA63_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 2;}
+
+                         
+                        input.seek(index63_1);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA63_6 = input.LA(1);
+
+                         
+                        int index63_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 10;}
+
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 9;}
+
+                         
+                        input.seek(index63_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA63_5 = input.LA(1);
+
+                         
+                        int index63_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA63_5==RIGHT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.RESULT)))) {s = 9;}
+
+                        else if ( (LA63_5==ID||LA63_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.REVERSE)))) {s = 10;}
+
+                         
+                        input.seek(index63_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA63_4 = input.LA(1);
+
+                         
+                        int index63_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 7;}
+
+                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 8;}
+
+                         
+                        input.seek(index63_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA63_3 = input.LA(1);
+
+                         
+                        int index63_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA63_3==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 5;}
+
+                        else if ( ((LA63_3>=VT_COMPILATION_UNIT && LA63_3<=STRING)||LA63_3==COMMA||(LA63_3>=AT && LA63_3<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 3;}
+
+                        else if ( (LA63_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 6;}
+
+                         
+                        input.seek(index63_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA63_0 = input.LA(1);
+
+                         
+                        int index63_0 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA63_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 1;}
+
+                         
+                        input.seek(index63_0);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA63_2 = input.LA(1);
+
+                         
+                        int index63_2 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( ((LA63_2>=VT_COMPILATION_UNIT && LA63_2<=STRING)||LA63_2==COMMA||(LA63_2>=AT && LA63_2<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 3;}
+
+                        else if ( (LA63_2==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 4;}
+
+                        else if ( (LA63_2==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 5;}
+
+                         
+                        input.seek(index63_2);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (backtracking>0) {failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 63, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+    static final String DFA65_eotS =
+        "\25\uffff";
+    static final String DFA65_eofS =
+        "\25\uffff";
+    static final String DFA65_minS =
+        "\1\127\1\4\1\uffff\1\4\1\0\2\uffff\1\4\2\0\3\4\1\0\1\4\1\uffff\1"+
+        "\4\4\0";
+    static final String DFA65_maxS =
+        "\1\164\1\u0080\1\uffff\1\u0080\1\0\2\uffff\1\u0080\2\0\3\u0080\1"+
+        "\0\1\u0080\1\uffff\1\u0080\4\0";
+    static final String DFA65_acceptS =
+        "\2\uffff\1\2\2\uffff\2\1\10\uffff\1\1\5\uffff";
+    static final String DFA65_specialS =
+        "\1\uffff\1\0\1\uffff\1\4\1\12\2\uffff\1\6\1\13\1\10\1\5\1\7\1\11"+
+        "\1\1\1\3\1\uffff\1\2\4\uffff}>";
+    static final String[] DFA65_transitionS = {
+            "\3\2\1\uffff\1\2\1\uffff\1\1\2\2\5\uffff\2\2\15\uffff\1\2",
+            "\124\5\1\3\4\5\1\4\1\5\1\6\41\5",
             "",
-            "\1\156\1\155\3\uffff\1\166\1\172\1\32\3\uffff\1\171\1\170\1"+
-            "\167\1\157\1\160\1\161\1\162\1\163\1\164\1\165\2\uffff\1\154",
-            "\151\103\1\104\1\105\15\103",
+            "\124\5\1\11\1\12\3\5\1\10\1\5\1\6\1\5\1\7\20\5\1\13\16\5",
             "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
             "",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
             "",
+            "\124\5\1\14\4\5\1\15\1\5\1\6\41\5",
             "\1\uffff",
             "\1\uffff",
+            "\124\5\1\16\4\5\1\17\1\5\1\6\41\5",
+            "\131\5\1\17\1\5\1\6\23\5\1\20\15\5",
+            "\125\5\1\21\3\5\1\23\1\5\1\6\22\5\1\22\16\5",
             "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
+            "\125\5\1\12\3\5\1\24\1\5\1\6\22\5\1\13\16\5",
             "",
+            "\131\5\1\24\1\5\1\6\22\5\1\13\16\5",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
-            "\1\uffff",
             "\1\uffff"
     };
 
-    static final short[] DFA48_eot = DFA.unpackEncodedString(DFA48_eotS);
-    static final short[] DFA48_eof = DFA.unpackEncodedString(DFA48_eofS);
-    static final char[] DFA48_min = DFA.unpackEncodedStringToUnsignedChars(DFA48_minS);
-    static final char[] DFA48_max = DFA.unpackEncodedStringToUnsignedChars(DFA48_maxS);
-    static final short[] DFA48_accept = DFA.unpackEncodedString(DFA48_acceptS);
-    static final short[] DFA48_special = DFA.unpackEncodedString(DFA48_specialS);
-    static final short[][] DFA48_transition;
+    static final short[] DFA65_eot = DFA.unpackEncodedString(DFA65_eotS);
+    static final short[] DFA65_eof = DFA.unpackEncodedString(DFA65_eofS);
+    static final char[] DFA65_min = DFA.unpackEncodedStringToUnsignedChars(DFA65_minS);
+    static final char[] DFA65_max = DFA.unpackEncodedStringToUnsignedChars(DFA65_maxS);
+    static final short[] DFA65_accept = DFA.unpackEncodedString(DFA65_acceptS);
+    static final short[] DFA65_special = DFA.unpackEncodedString(DFA65_specialS);
+    static final short[][] DFA65_transition;
 
     static {
-        int numStates = DFA48_transitionS.length;
-        DFA48_transition = new short[numStates][];
+        int numStates = DFA65_transitionS.length;
+        DFA65_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA48_transition[i] = DFA.unpackEncodedString(DFA48_transitionS[i]);
+            DFA65_transition[i] = DFA.unpackEncodedString(DFA65_transitionS[i]);
         }
     }
 
-    class DFA48 extends DFA {
+    class DFA65 extends DFA {
 
-        public DFA48(BaseRecognizer recognizer) {
+        public DFA65(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 48;
-            this.eot = DFA48_eot;
-            this.eof = DFA48_eof;
-            this.min = DFA48_min;
-            this.max = DFA48_max;
-            this.accept = DFA48_accept;
-            this.special = DFA48_special;
-            this.transition = DFA48_transition;
+            this.decisionNumber = 65;
+            this.eot = DFA65_eot;
+            this.eof = DFA65_eof;
+            this.min = DFA65_min;
+            this.max = DFA65_max;
+            this.accept = DFA65_accept;
+            this.special = DFA65_special;
+            this.transition = DFA65_transition;
         }
         public String getDescription() {
-            return "521:3: ( ( LEFT_PAREN ( or_key | and_key ) )=> lhs_or | LEFT_PAREN lhs_or RIGHT_PAREN | lhs_pattern )";
+            return "639:3: ( ( LEFT_PAREN )=>args= paren_chunk )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA48_25 = input.LA(1);
+                        int LA65_1 = input.LA(1);
 
                          
-                        int index48_25 = input.index();
+                        int index65_1 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (LA65_1==ID) ) {s = 3;}
 
-                        else if ( (true) ) {s = 45;}
+                        else if ( (LA65_1==LEFT_PAREN) ) {s = 4;}
 
+                        else if ( ((LA65_1>=VT_COMPILATION_UNIT && LA65_1<=SEMICOLON)||(LA65_1>=DOT && LA65_1<=STRING)||LA65_1==COMMA||(LA65_1>=AT && LA65_1<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
+                        else if ( (LA65_1==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
                          
-                        input.seek(index48_25);
+                        input.seek(index65_1);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA48_4 = input.LA(1);
+                        int LA65_13 = input.LA(1);
 
                          
-                        int index48_4 = input.index();
+                        int index65_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (synpred8()) ) {s = 15;}
 
-                        else if ( (true) ) {s = 11;}
+                        else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index48_4);
+                        input.seek(index65_13);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA48_3 = input.LA(1);
+                        int LA65_16 = input.LA(1);
 
                          
-                        int index48_3 = input.index();
+                        int index65_16 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (LA65_16==LEFT_PAREN) ) {s = 20;}
 
-                        else if ( (true) ) {s = 10;}
+                        else if ( (LA65_16==LEFT_SQUARE) ) {s = 11;}
 
+                        else if ( (LA65_16==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA65_16>=VT_COMPILATION_UNIT && LA65_16<=STRING)||LA65_16==COMMA||(LA65_16>=AT && LA65_16<=NULL)||(LA65_16>=RIGHT_SQUARE && LA65_16<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
                          
-                        input.seek(index48_3);
+                        input.seek(index65_16);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA48_31 = input.LA(1);
+                        int LA65_14 = input.LA(1);
 
                          
-                        int index48_31 = input.index();
+                        int index65_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (LA65_14==LEFT_SQUARE) ) {s = 11;}
 
-                        else if ( (true) ) {s = 64;}
+                        else if ( (LA65_14==LEFT_PAREN) ) {s = 20;}
 
+                        else if ( (LA65_14==DOT) ) {s = 10;}
+
+                        else if ( (LA65_14==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA65_14>=VT_COMPILATION_UNIT && LA65_14<=ID)||(LA65_14>=DOT_STAR && LA65_14<=STRING)||LA65_14==COMMA||(LA65_14>=AT && LA65_14<=NULL)||(LA65_14>=RIGHT_SQUARE && LA65_14<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
                          
-                        input.seek(index48_31);
+                        input.seek(index65_14);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA48_50 = input.LA(1);
+                        int LA65_3 = input.LA(1);
 
                          
-                        int index48_50 = input.index();
+                        int index65_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (LA65_3==COLON) ) {s = 7;}
 
-                        else if ( (true) ) {s = 91;}
+                        else if ( (LA65_3==LEFT_PAREN) ) {s = 8;}
 
+                        else if ( (LA65_3==ID) ) {s = 9;}
+
+                        else if ( (LA65_3==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( (LA65_3==DOT) ) {s = 10;}
+
+                        else if ( (LA65_3==LEFT_SQUARE) ) {s = 11;}
+
+                        else if ( ((LA65_3>=VT_COMPILATION_UNIT && LA65_3<=SEMICOLON)||(LA65_3>=DOT_STAR && LA65_3<=STRING)||LA65_3==COMMA||LA65_3==AT||(LA65_3>=EQUALS && LA65_3<=NULL)||(LA65_3>=RIGHT_SQUARE && LA65_3<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
                          
-                        input.seek(index48_50);
+                        input.seek(index65_3);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA48_2 = input.LA(1);
+                        int LA65_10 = input.LA(1);
 
                          
-                        int index48_2 = input.index();
+                        int index65_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA48_2==COLON) ) {s = 5;}
+                        if ( (LA65_10==ID) ) {s = 14;}
 
-                        else if ( (LA48_2==LEFT_PAREN) ) {s = 6;}
+                        else if ( (LA65_10==RIGHT_PAREN) && (synpred8())) {s = 6;}
 
-                        else if ( (LA48_2==ID) && (((synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifi!
 erKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))))) {s = 7;}
+                        else if ( ((LA65_10>=VT_COMPILATION_UNIT && LA65_10<=SEMICOLON)||(LA65_10>=DOT && LA65_10<=STRING)||LA65_10==COMMA||(LA65_10>=AT && LA65_10<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
 
-                        else if ( (LA48_2==DOT) ) {s = 8;}
+                        else if ( (LA65_10==LEFT_PAREN) && (synpred8())) {s = 15;}
 
-                        else if ( (LA48_2==LEFT_SQUARE) ) {s = 9;}
-
                          
-                        input.seek(index48_2);
+                        input.seek(index65_10);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA48_26 = input.LA(1);
+                        int LA65_7 = input.LA(1);
 
                          
-                        int index48_26 = input.index();
+                        int index65_7 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (LA65_7==ID) ) {s = 12;}
 
-                        else if ( (true) ) {s = 46;}
+                        else if ( (LA65_7==LEFT_PAREN) ) {s = 13;}
 
+                        else if ( (LA65_7==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA65_7>=VT_COMPILATION_UNIT && LA65_7<=SEMICOLON)||(LA65_7>=DOT && LA65_7<=STRING)||LA65_7==COMMA||(LA65_7>=AT && LA65_7<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
                          
-                        input.seek(index48_26);
+                        input.seek(index65_7);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA48_6 = input.LA(1);
+                        int LA65_11 = input.LA(1);
 
                          
-                        int index48_6 = input.index();
+                        int index65_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((synpred7()||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EVAL)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.EXISTS)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.NOT)))||(synpred7()&&(validateIdentifierKey(DroolsSoftKeywords.FORALL))))) ) {s = 7;}
+                        if ( (LA65_11==RIGHT_SQUARE) ) {s = 16;}
 
-                        else if ( (true) ) {s = 14;}
+                        else if ( (LA65_11==RIGHT_PAREN) && (synpred8())) {s = 6;}
 
+                        else if ( ((LA65_11>=VT_COMPILATION_UNIT && LA65_11<=STRING)||LA65_11==COMMA||(LA65_11>=AT && LA65_11<=LEFT_SQUARE)||(LA65_11>=THEN && LA65_11<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
+                        else if ( (LA65_11==LEFT_PAREN) && (synpred8())) {s = 15;}
+
                          
-                        input.seek(index48_6);
+                        input.seek(index65_11);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA48_63 = input.LA(1);
+                        int LA65_9 = input.LA(1);
 
                          
-                        int index48_63 = input.index();
+                        int index65_9 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (synpred8()) ) {s = 6;}
 
-                        else if ( (true) ) {s = 107;}
+                        else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index48_63);
+                        input.seek(index65_9);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA48_32 = input.LA(1);
+                        int LA65_12 = input.LA(1);
 
                          
-                        int index48_32 = input.index();
+                        int index65_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (LA65_12==DOT) ) {s = 17;}
 
-                        else if ( (true) ) {s = 65;}
+                        else if ( (LA65_12==LEFT_SQUARE) ) {s = 18;}
 
+                        else if ( (LA65_12==LEFT_PAREN) ) {s = 19;}
+
+                        else if ( (LA65_12==RIGHT_PAREN) && (synpred8())) {s = 6;}
+
+                        else if ( ((LA65_12>=VT_COMPILATION_UNIT && LA65_12<=ID)||(LA65_12>=DOT_STAR && LA65_12<=STRING)||LA65_12==COMMA||(LA65_12>=AT && LA65_12<=NULL)||(LA65_12>=RIGHT_SQUARE && LA65_12<=MULTI_LINE_COMMENT)) && (synpred8())) {s = 5;}
+
                          
-                        input.seek(index48_32);
+                        input.seek(index65_12);
                         if ( s>=0 ) return s;
                         break;
                     case 10 : 
-                        int LA48_44 = input.LA(1);
+                        int LA65_4 = input.LA(1);
 
                          
-                        int index48_44 = input.index();
+                        int index65_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred7()) ) {s = 7;}
+                        if ( (synpred8()) ) {s = 6;}
 
-                        else if ( (true) ) {s = 78;}
+                        else if ( (true) ) {s = 2;}
 
                          
-                        input.seek(index48_44);
+                        input.seek(index65_4);
                         if ( s>=0 ) return s;
                         break;
+                    case 11 : 
+                        int LA65_8 = input.LA(1);
+
+                         
+                        int index65_8 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred8()) ) {s = 6;}
+
+                        else if ( (true) ) {s = 2;}
+
+                         
+                        input.seek(index65_8);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 48, _s, input);
+                new NoViableAltException(getDescription(), 65, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA53_eotS =
-        "\13\uffff";
-    static final String DFA53_eofS =
-        "\13\uffff";
-    static final String DFA53_minS =
-        "\1\126\1\133\2\4\1\0\1\126\1\0\4\uffff";
-    static final String DFA53_maxS =
-        "\1\126\1\133\2\173\1\0\1\135\1\0\4\uffff";
-    static final String DFA53_acceptS =
-        "\7\uffff\1\1\2\2\1\1";
-    static final String DFA53_specialS =
-        "\4\uffff\1\1\1\0\1\2\4\uffff}>";
-    static final String[] DFA53_transitionS = {
-            "\1\1",
-            "\1\2",
-            "\127\3\1\4\1\3\1\5\36\3",
-            "\127\3\1\6\1\3\1\5\36\3",
+    static final String DFA67_eotS =
+        "\26\uffff";
+    static final String DFA67_eofS =
+        "\26\uffff";
+    static final String DFA67_minS =
+        "\1\127\1\uffff\1\4\1\uffff\1\4\1\0\2\uffff\1\4\2\0\3\4\1\0\1\4\1"+
+        "\uffff\1\4\4\0";
+    static final String DFA67_maxS =
+        "\1\164\1\uffff\1\u0080\1\uffff\1\u0080\1\0\2\uffff\1\u0080\2\0\3"+
+        "\u0080\1\0\1\u0080\1\uffff\1\u0080\4\0";
+    static final String DFA67_acceptS =
+        "\1\uffff\1\1\1\uffff\1\3\2\uffff\2\2\10\uffff\1\2\5\uffff";
+    static final String DFA67_specialS =
+        "\1\10\1\uffff\1\7\1\uffff\1\14\1\4\2\uffff\1\12\1\3\1\11\1\13\1"+
+        "\5\1\6\1\2\1\0\1\uffff\1\1\4\uffff}>";
+    static final String[] DFA67_transitionS = {
+            "\3\3\1\uffff\1\3\1\uffff\1\2\2\3\5\uffff\2\3\13\uffff\1\1\1"+
+            "\uffff\1\3",
+            "",
+            "\124\6\1\4\4\6\1\5\1\6\1\7\41\6",
+            "",
+            "\124\6\1\11\1\13\3\6\1\12\1\6\1\7\1\6\1\10\20\6\1\14\16\6",
             "\1\uffff",
-            "\1\12\5\uffff\1\12\1\11",
-            "\1\uffff",
             "",
             "",
+            "\124\6\1\15\4\6\1\16\1\6\1\7\41\6",
+            "\1\uffff",
+            "\1\uffff",
+            "\124\6\1\17\4\6\1\20\1\6\1\7\41\6",
+            "\131\6\1\20\1\6\1\7\23\6\1\21\15\6",
+            "\125\6\1\22\3\6\1\24\1\6\1\7\22\6\1\23\16\6",
+            "\1\uffff",
+            "\125\6\1\13\3\6\1\25\1\6\1\7\22\6\1\14\16\6",
             "",
-            ""
+            "\131\6\1\25\1\6\1\7\22\6\1\14\16\6",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff"
     };
 
-    static final short[] DFA53_eot = DFA.unpackEncodedString(DFA53_eotS);
-    static final short[] DFA53_eof = DFA.unpackEncodedString(DFA53_eofS);
-    static final char[] DFA53_min = DFA.unpackEncodedStringToUnsignedChars(DFA53_minS);
-    static final char[] DFA53_max = DFA.unpackEncodedStringToUnsignedChars(DFA53_maxS);
-    static final short[] DFA53_accept = DFA.unpackEncodedString(DFA53_acceptS);
-    static final short[] DFA53_special = DFA.unpackEncodedString(DFA53_specialS);
-    static final short[][] DFA53_transition;
+    static final short[] DFA67_eot = DFA.unpackEncodedString(DFA67_eotS);
+    static final short[] DFA67_eof = DFA.unpackEncodedString(DFA67_eofS);
+    static final char[] DFA67_min = DFA.unpackEncodedStringToUnsignedChars(DFA67_minS);
+    static final char[] DFA67_max = DFA.unpackEncodedStringToUnsignedChars(DFA67_maxS);
+    static final short[] DFA67_accept = DFA.unpackEncodedString(DFA67_acceptS);
+    static final short[] DFA67_special = DFA.unpackEncodedString(DFA67_specialS);
+    static final short[][] DFA67_transition;
 
     static {
-        int numStates = DFA53_transitionS.length;
-        DFA53_transition = new short[numStates][];
+        int numStates = DFA67_transitionS.length;
+        DFA67_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA53_transition[i] = DFA.unpackEncodedString(DFA53_transitionS[i]);
+            DFA67_transition[i] = DFA.unpackEncodedString(DFA67_transitionS[i]);
         }
     }
 
-    class DFA53 extends DFA {
+    class DFA67 extends DFA {
 
-        public DFA53(BaseRecognizer recognizer) {
+        public DFA67(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 53;
-            this.eot = DFA53_eot;
-            this.eof = DFA53_eof;
-            this.min = DFA53_min;
-            this.max = DFA53_max;
-            this.accept = DFA53_accept;
-            this.special = DFA53_special;
-            this.transition = DFA53_transition;
+            this.decisionNumber = 67;
+            this.eot = DFA67_eot;
+            this.eof = DFA67_eof;
+            this.min = DFA67_min;
+            this.max = DFA67_max;
+            this.accept = DFA67_accept;
+            this.special = DFA67_special;
+            this.transition = DFA67_transition;
         }
         public String getDescription() {
-            return "555:3: ( accumulate_init_clause | accumulate_id_clause )";
+            return "647:4: ( ( LEFT_SQUARE )=> square_chunk | ( LEFT_PAREN )=> paren_chunk )?";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA53_5 = input.LA(1);
+                        int LA67_15 = input.LA(1);
 
                          
-                        int index53_5 = input.index();
+                        int index67_15 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA53_5==RIGHT_PAREN) ) {s = 9;}
+                        if ( (LA67_15==LEFT_SQUARE) ) {s = 12;}
 
-                        else if ( (LA53_5==ID||LA53_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.INIT)))) {s = 10;}
+                        else if ( (LA67_15==LEFT_PAREN) ) {s = 21;}
 
+                        else if ( (LA67_15==DOT) ) {s = 11;}
+
+                        else if ( (LA67_15==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA67_15>=VT_COMPILATION_UNIT && LA67_15<=ID)||(LA67_15>=DOT_STAR && LA67_15<=STRING)||LA67_15==COMMA||(LA67_15>=AT && LA67_15<=NULL)||(LA67_15>=RIGHT_SQUARE && LA67_15<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
                          
-                        input.seek(index53_5);
+                        input.seek(index67_15);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA53_4 = input.LA(1);
+                        int LA67_17 = input.LA(1);
 
                          
-                        int index53_4 = input.index();
+                        int index67_17 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {s = 7;}
+                        if ( (LA67_17==LEFT_PAREN) ) {s = 21;}
 
-                        else if ( (true) ) {s = 8;}
+                        else if ( (LA67_17==LEFT_SQUARE) ) {s = 12;}
 
+                        else if ( (LA67_17==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA67_17>=VT_COMPILATION_UNIT && LA67_17<=STRING)||LA67_17==COMMA||(LA67_17>=AT && LA67_17<=NULL)||(LA67_17>=RIGHT_SQUARE && LA67_17<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
                          
-                        input.seek(index53_4);
+                        input.seek(index67_17);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA53_6 = input.LA(1);
+                        int LA67_14 = input.LA(1);
 
                          
-                        int index53_6 = input.index();
+                        int index67_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.INIT))) ) {s = 10;}
+                        if ( (synpred10()) ) {s = 16;}
 
-                        else if ( (true) ) {s = 9;}
+                        else if ( (true) ) {s = 3;}
 
                          
-                        input.seek(index53_6);
+                        input.seek(index67_14);
                         if ( s>=0 ) return s;
                         break;
-            }
-            if (backtracking>0) {failed=true; return -1;}
-            NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 53, _s, input);
-            error(nvae);
-            throw nvae;
-        }
-    }
-    static final String DFA57_eotS =
-        "\13\uffff";
-    static final String DFA57_eofS =
-        "\13\uffff";
-    static final String DFA57_minS =
-        "\1\126\1\133\2\4\1\0\1\126\1\0\4\uffff";
-    static final String DFA57_maxS =
-        "\1\126\1\133\2\173\1\0\1\135\1\0\4\uffff";
-    static final String DFA57_acceptS =
-        "\7\uffff\1\1\1\2\1\1\1\2";
-    static final String DFA57_specialS =
-        "\1\4\1\2\1\1\1\0\1\5\1\6\1\3\4\uffff}>";
-    static final String[] DFA57_transitionS = {
-            "\1\1",
-            "\1\2",
-            "\127\3\1\4\1\3\1\5\36\3",
-            "\127\3\1\6\1\3\1\5\36\3",
-            "\1\uffff",
-            "\1\11\5\uffff\1\11\1\12",
-            "\1\uffff",
-            "",
-            "",
-            "",
-            ""
-    };
+                    case 3 : 
+                        int LA67_9 = input.LA(1);
 
-    static final short[] DFA57_eot = DFA.unpackEncodedString(DFA57_eotS);
-    static final short[] DFA57_eof = DFA.unpackEncodedString(DFA57_eofS);
-    static final char[] DFA57_min = DFA.unpackEncodedStringToUnsignedChars(DFA57_minS);
-    static final char[] DFA57_max = DFA.unpackEncodedStringToUnsignedChars(DFA57_maxS);
-    static final short[] DFA57_accept = DFA.unpackEncodedString(DFA57_acceptS);
-    static final short[] DFA57_special = DFA.unpackEncodedString(DFA57_specialS);
-    static final short[][] DFA57_transition;
+                         
+                        int index67_9 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred10()) ) {s = 7;}
 
-    static {
-        int numStates = DFA57_transitionS.length;
-        DFA57_transition = new short[numStates][];
-        for (int i=0; i<numStates; i++) {
-            DFA57_transition[i] = DFA.unpackEncodedString(DFA57_transitionS[i]);
-        }
-    }
+                        else if ( (true) ) {s = 3;}
 
-    class DFA57 extends DFA {
+                         
+                        input.seek(index67_9);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA67_5 = input.LA(1);
 
-        public DFA57(BaseRecognizer recognizer) {
-            this.recognizer = recognizer;
-            this.decisionNumber = 57;
-            this.eot = DFA57_eot;
-            this.eof = DFA57_eof;
-            this.min = DFA57_min;
-            this.max = DFA57_max;
-            this.accept = DFA57_accept;
-            this.special = DFA57_special;
-            this.transition = DFA57_transition;
-        }
-        public String getDescription() {
-            return "566: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_3 = input.LA(1);
+                         
+                        int index67_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred10()) ) {s = 7;}
 
+                        else if ( (true) ) {s = 3;}
+
                          
-                        int index57_3 = input.index();
+                        input.seek(index67_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA67_12 = input.LA(1);
+
+                         
+                        int index67_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_3==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 5;}
+                        if ( (LA67_12==RIGHT_SQUARE) ) {s = 17;}
 
-                        else if ( ((LA57_3>=VT_COMPILATION_UNIT && LA57_3<=STRING)||LA57_3==COMMA||(LA57_3>=COLON && LA57_3<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 3;}
+                        else if ( (LA67_12==RIGHT_PAREN) && (synpred10())) {s = 7;}
 
-                        else if ( (LA57_3==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 6;}
+                        else if ( ((LA67_12>=VT_COMPILATION_UNIT && LA67_12<=STRING)||LA67_12==COMMA||(LA67_12>=AT && LA67_12<=LEFT_SQUARE)||(LA67_12>=THEN && LA67_12<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
 
+                        else if ( (LA67_12==LEFT_PAREN) && (synpred10())) {s = 16;}
+
                          
-                        input.seek(index57_3);
+                        input.seek(index67_12);
                         if ( s>=0 ) return s;
                         break;
-                    case 1 : 
-                        int LA57_2 = input.LA(1);
+                    case 6 : 
+                        int LA67_13 = input.LA(1);
 
                          
-                        int index57_2 = input.index();
+                        int index67_13 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((LA57_2>=VT_COMPILATION_UNIT && LA57_2<=STRING)||LA57_2==COMMA||(LA57_2>=COLON && LA57_2<=MULTI_LINE_COMMENT)) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 3;}
+                        if ( (LA67_13==DOT) ) {s = 18;}
 
-                        else if ( (LA57_2==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 4;}
+                        else if ( (LA67_13==LEFT_SQUARE) ) {s = 19;}
 
-                        else if ( (LA57_2==RIGHT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 5;}
+                        else if ( (LA67_13==LEFT_PAREN) ) {s = 20;}
 
+                        else if ( (LA67_13==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA67_13>=VT_COMPILATION_UNIT && LA67_13<=ID)||(LA67_13>=DOT_STAR && LA67_13<=STRING)||LA67_13==COMMA||(LA67_13>=AT && LA67_13<=NULL)||(LA67_13>=RIGHT_SQUARE && LA67_13<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
                          
-                        input.seek(index57_2);
+                        input.seek(index67_13);
                         if ( s>=0 ) return s;
                         break;
-                    case 2 : 
-                        int LA57_1 = input.LA(1);
+                    case 7 : 
+                        int LA67_2 = input.LA(1);
 
                          
-                        int index57_1 = input.index();
+                        int index67_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_1==LEFT_PAREN) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 2;}
+                        if ( (LA67_2==ID) ) {s = 4;}
 
+                        else if ( (LA67_2==LEFT_PAREN) ) {s = 5;}
+
+                        else if ( ((LA67_2>=VT_COMPILATION_UNIT && LA67_2<=SEMICOLON)||(LA67_2>=DOT && LA67_2<=STRING)||LA67_2==COMMA||(LA67_2>=AT && LA67_2<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                        else if ( (LA67_2==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
                          
-                        input.seek(index57_1);
+                        input.seek(index67_2);
                         if ( s>=0 ) return s;
                         break;
-                    case 3 : 
-                        int LA57_6 = input.LA(1);
+                    case 8 : 
+                        int LA67_0 = input.LA(1);
 
                          
-                        int index57_6 = input.index();
+                        int index67_0 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 9;}
+                        if ( (LA67_0==LEFT_SQUARE) && (synpred9())) {s = 1;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 10;}
+                        else if ( (LA67_0==LEFT_PAREN) ) {s = 2;}
 
+                        else if ( ((LA67_0>=SEMICOLON && LA67_0<=DOT)||LA67_0==END||(LA67_0>=COMMA && LA67_0<=RIGHT_PAREN)||(LA67_0>=DOUBLE_PIPE && LA67_0<=DOUBLE_AMPER)||LA67_0==THEN) ) {s = 3;}
+
                          
-                        input.seek(index57_6);
+                        input.seek(index67_0);
                         if ( s>=0 ) return s;
                         break;
-                    case 4 : 
-                        int LA57_0 = input.LA(1);
+                    case 9 : 
+                        int LA67_10 = input.LA(1);
 
                          
-                        int index57_0 = input.index();
+                        int index67_10 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_0==ID) && (((validateIdentifierKey(DroolsSoftKeywords.REVERSE))||(validateIdentifierKey(DroolsSoftKeywords.RESULT))))) {s = 1;}
+                        if ( (synpred10()) ) {s = 7;}
 
+                        else if ( (true) ) {s = 3;}
+
                          
-                        input.seek(index57_0);
+                        input.seek(index67_10);
                         if ( s>=0 ) return s;
                         break;
-                    case 5 : 
-                        int LA57_4 = input.LA(1);
+                    case 10 : 
+                        int LA67_8 = input.LA(1);
 
                          
-                        int index57_4 = input.index();
+                        int index67_8 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( ((validateIdentifierKey(DroolsSoftKeywords.REVERSE))) ) {s = 7;}
+                        if ( (LA67_8==ID) ) {s = 13;}
 
-                        else if ( ((validateIdentifierKey(DroolsSoftKeywords.RESULT))) ) {s = 8;}
+                        else if ( (LA67_8==LEFT_PAREN) ) {s = 14;}
 
+                        else if ( (LA67_8==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA67_8>=VT_COMPILATION_UNIT && LA67_8<=SEMICOLON)||(LA67_8>=DOT && LA67_8<=STRING)||LA67_8==COMMA||(LA67_8>=AT && LA67_8<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
                          
-                        input.seek(index57_4);
+                        input.seek(index67_8);
                         if ( s>=0 ) return s;
                         break;
-                    case 6 : 
-                        int LA57_5 = input.LA(1);
+                    case 11 : 
+                        int LA67_11 = input.LA(1);
 
                          
-                        int index57_5 = input.index();
+                        int index67_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA57_5==ID||LA57_5==COMMA) && ((validateIdentifierKey(DroolsSoftKeywords.REVERSE)))) {s = 9;}
+                        if ( (LA67_11==ID) ) {s = 15;}
 
-                        else if ( (LA57_5==RIGHT_PAREN) && ((validateIdentifierKey(DroolsSoftKeywords.RESULT)))) {s = 10;}
+                        else if ( (LA67_11==RIGHT_PAREN) && (synpred10())) {s = 7;}
 
+                        else if ( ((LA67_11>=VT_COMPILATION_UNIT && LA67_11<=SEMICOLON)||(LA67_11>=DOT && LA67_11<=STRING)||LA67_11==COMMA||(LA67_11>=AT && LA67_11<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                        else if ( (LA67_11==LEFT_PAREN) && (synpred10())) {s = 16;}
+
                          
-                        input.seek(index57_5);
+                        input.seek(index67_11);
                         if ( s>=0 ) return s;
                         break;
+                    case 12 : 
+                        int LA67_4 = input.LA(1);
+
+                         
+                        int index67_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA67_4==COLON) ) {s = 8;}
+
+                        else if ( (LA67_4==ID) ) {s = 9;}
+
+                        else if ( (LA67_4==LEFT_PAREN) ) {s = 10;}
+
+                        else if ( (LA67_4==DOT) ) {s = 11;}
+
+                        else if ( (LA67_4==LEFT_SQUARE) ) {s = 12;}
+
+                        else if ( (LA67_4==RIGHT_PAREN) && (synpred10())) {s = 7;}
+
+                        else if ( ((LA67_4>=VT_COMPILATION_UNIT && LA67_4<=SEMICOLON)||(LA67_4>=DOT_STAR && LA67_4<=STRING)||LA67_4==COMMA||LA67_4==AT||(LA67_4>=EQUALS && LA67_4<=NULL)||(LA67_4>=RIGHT_SQUARE && LA67_4<=MULTI_LINE_COMMENT)) && (synpred10())) {s = 6;}
+
+                         
+                        input.seek(index67_4);
+                        if ( s>=0 ) return s;
+                        break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 57, _s, input);
+                new NoViableAltException(getDescription(), 67, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA74_eotS =
+    static final String DFA80_eotS =
         "\45\uffff";
-    static final String DFA74_eofS =
+    static final String DFA80_eofS =
         "\45\uffff";
-    static final String DFA74_minS =
-        "\1\134\1\uffff\2\126\7\uffff\1\0\1\126\1\uffff\1\0\1\126\2\0\1\4"+
-        "\6\uffff\1\155\1\4\2\0\1\4\7\0";
-    static final String DFA74_maxS =
-        "\1\142\1\uffff\1\152\1\155\7\uffff\1\0\1\155\1\uffff\1\0\1\126\2"+
-        "\0\1\173\6\uffff\1\155\1\173\2\0\1\173\7\0";
-    static final String DFA74_acceptS =
-        "\1\uffff\1\2\2\uffff\7\1\2\uffff\1\1\5\uffff\6\1\14\uffff";
-    static final String DFA74_specialS =
-        "\2\uffff\1\7\1\6\7\uffff\1\1\1\2\1\uffff\1\3\1\uffff\1\0\1\4\11"+
-        "\uffff\1\10\1\5\10\uffff}>";
-    static final String[] DFA74_transitionS = {
-            "\2\1\3\uffff\1\2\1\1",
+    static final String DFA80_minS =
+        "\1\136\1\uffff\2\130\1\0\7\uffff\1\130\1\uffff\1\0\1\130\1\4\2\0"+
+        "\6\uffff\1\162\1\4\2\0\1\4\7\0";
+    static final String DFA80_maxS =
+        "\1\146\1\uffff\1\157\1\162\1\0\7\uffff\1\162\1\uffff\1\0\1\130\1"+
+        "\u0080\2\0\6\uffff\1\162\1\u0080\2\0\1\u0080\7\0";
+    static final String DFA80_acceptS =
+        "\1\uffff\1\2\3\uffff\7\1\1\uffff\1\1\5\uffff\6\1\14\uffff";
+    static final String DFA80_specialS =
+        "\2\uffff\1\5\1\3\1\0\7\uffff\1\10\1\uffff\1\1\2\uffff\1\7\1\6\10"+
+        "\uffff\1\4\1\2\10\uffff}>";
+    static final String[] DFA80_transitionS = {
+            "\2\1\5\uffff\1\2\1\1",
             "",
-            "\1\3\4\uffff\1\13\10\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
-            "\1\14\1\1\2\uffff\1\15\1\16\2\uffff\1\1\2\15\3\uffff\6\1\1\17"+
-            "\2\15\1\1",
+            "\1\3\4\uffff\1\4\13\uffff\1\5\1\6\1\7\1\10\1\11\1\12\1\13",
+            "\1\14\1\1\2\uffff\1\15\1\16\3\uffff\1\1\1\uffff\2\15\4\uffff"+
+            "\6\1\1\17\2\15\1\1",
+            "\1\uffff",
             "",
             "",
             "",
@@ -19385,16 +18307,15 @@
             "",
             "",
             "",
-            "\1\uffff",
-            "\1\20\1\24\2\uffff\1\21\1\22\1\27\1\30\1\uffff\2\21\1\26\1\25"+
-            "\7\uffff\1\1\2\21\1\23",
+            "\1\21\1\24\2\uffff\1\22\1\20\1\27\1\30\3\uffff\2\22\1\26\1\25"+
+            "\10\uffff\1\1\2\22\1\23",
             "",
             "\1\uffff",
             "\1\31",
+            "\124\36\1\32\3\36\1\35\1\33\1\36\1\34\3\36\2\35\13\36\2\35\17"+
+            "\36",
             "\1\uffff",
             "\1\uffff",
-            "\122\36\1\32\3\36\1\35\1\33\1\36\1\34\1\36\2\35\12\36\2\35\17"+
-            "\36",
             "",
             "",
             "",
@@ -19402,10 +18323,10 @@
             "",
             "",
             "\1\37",
-            "\123\36\1\41\3\36\1\44\1\42\1\43\17\36\1\40\16\36",
+            "\125\36\1\41\3\36\1\44\1\42\1\43\22\36\1\40\16\36",
             "\1\uffff",
             "\1\uffff",
-            "\127\36\1\44\1\42\1\43\36\36",
+            "\131\36\1\44\1\42\1\43\41\36",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -19415,107 +18336,112 @@
             "\1\uffff"
     };
 
-    static final short[] DFA74_eot = DFA.unpackEncodedString(DFA74_eotS);
-    static final short[] DFA74_eof = DFA.unpackEncodedString(DFA74_eofS);
-    static final char[] DFA74_min = DFA.unpackEncodedStringToUnsignedChars(DFA74_minS);
-    static final char[] DFA74_max = DFA.unpackEncodedStringToUnsignedChars(DFA74_maxS);
-    static final short[] DFA74_accept = DFA.unpackEncodedString(DFA74_acceptS);
-    static final short[] DFA74_special = DFA.unpackEncodedString(DFA74_specialS);
-    static final short[][] DFA74_transition;
+    static final short[] DFA80_eot = DFA.unpackEncodedString(DFA80_eotS);
+    static final short[] DFA80_eof = DFA.unpackEncodedString(DFA80_eofS);
+    static final char[] DFA80_min = DFA.unpackEncodedStringToUnsignedChars(DFA80_minS);
+    static final char[] DFA80_max = DFA.unpackEncodedStringToUnsignedChars(DFA80_maxS);
+    static final short[] DFA80_accept = DFA.unpackEncodedString(DFA80_acceptS);
+    static final short[] DFA80_special = DFA.unpackEncodedString(DFA80_specialS);
+    static final short[][] DFA80_transition;
 
     static {
-        int numStates = DFA74_transitionS.length;
-        DFA74_transition = new short[numStates][];
+        int numStates = DFA80_transitionS.length;
+        DFA80_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA74_transition[i] = DFA.unpackEncodedString(DFA74_transitionS[i]);
+            DFA80_transition[i] = DFA.unpackEncodedString(DFA80_transitionS[i]);
         }
     }
 
-    class DFA74 extends DFA {
+    class DFA80 extends DFA {
 
-        public DFA74(BaseRecognizer recognizer) {
+        public DFA80(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 74;
-            this.eot = DFA74_eot;
-            this.eof = DFA74_eof;
-            this.min = DFA74_min;
-            this.max = DFA74_max;
-            this.accept = DFA74_accept;
-            this.special = DFA74_special;
-            this.transition = DFA74_transition;
+            this.decisionNumber = 80;
+            this.eot = DFA80_eot;
+            this.eof = DFA80_eof;
+            this.min = DFA80_min;
+            this.max = DFA80_max;
+            this.accept = DFA80_accept;
+            this.special = DFA80_special;
+            this.transition = DFA80_transition;
         }
         public String getDescription() {
-            return "()* loopback of 675:25: ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*";
+            return "()* loopback of 720:25: ( ( DOUBLE_PIPE )=> DOUBLE_PIPE and_restr_connective )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA74_16 = input.LA(1);
+                        int LA80_4 = input.LA(1);
 
                          
-                        int index74_16 = input.index();
+                        int index80_4 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 24;}
+                        if ( (synpred11()) ) {s = 13;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index74_16);
+                        input.seek(index80_4);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA74_11 = input.LA(1);
+                        int LA80_14 = input.LA(1);
 
                          
-                        int index74_11 = input.index();
+                        int index80_14 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 13;}
+                        if ( (synpred11()) ) {s = 24;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index74_11);
+                        input.seek(index80_14);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA74_12 = input.LA(1);
+                        int LA80_28 = input.LA(1);
 
                          
-                        int index74_12 = input.index();
+                        int index80_28 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA74_12==ID) ) {s = 16;}
+                        if ( (synpred11()) ) {s = 24;}
 
-                        else if ( (LA74_12==STRING||(LA74_12>=BOOL && LA74_12<=INT)||(LA74_12>=FLOAT && LA74_12<=NULL)) ) {s = 17;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( (LA74_12==LEFT_PAREN) ) {s = 18;}
+                         
+                        input.seek(index80_28);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA80_3 = input.LA(1);
 
-                        else if ( (LA74_12==LEFT_SQUARE) && (synpred11())) {s = 19;}
+                         
+                        int index80_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (LA80_3==DOT||LA80_3==COLON||(LA80_3>=EQUAL && LA80_3<=NOT_EQUAL)||LA80_3==LEFT_SQUARE) ) {s = 1;}
 
-                        else if ( (LA74_12==DOT) && (synpred11())) {s = 20;}
+                        else if ( (LA80_3==ID) ) {s = 12;}
 
-                        else if ( (LA74_12==DOUBLE_AMPER) && (synpred11())) {s = 21;}
+                        else if ( (LA80_3==STRING||(LA80_3>=BOOL && LA80_3<=INT)||(LA80_3>=FLOAT && LA80_3<=NULL)) && (synpred11())) {s = 13;}
 
-                        else if ( (LA74_12==DOUBLE_PIPE) && (synpred11())) {s = 22;}
+                        else if ( (LA80_3==LEFT_PAREN) ) {s = 14;}
 
-                        else if ( (LA74_12==COMMA) && (synpred11())) {s = 23;}
+                        else if ( (LA80_3==GRAVE_ACCENT) ) {s = 15;}
 
-                        else if ( (LA74_12==RIGHT_PAREN) && (synpred11())) {s = 24;}
-
-                        else if ( (LA74_12==GRAVE_ACCENT) ) {s = 1;}
-
                          
-                        input.seek(index74_12);
+                        input.seek(index80_3);
                         if ( s>=0 ) return s;
                         break;
-                    case 3 : 
-                        int LA74_14 = input.LA(1);
+                    case 4 : 
+                        int LA80_27 = input.LA(1);
 
                          
-                        int index74_14 = input.index();
+                        int index80_27 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred11()) ) {s = 24;}
@@ -19523,29 +18449,43 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index74_14);
+                        input.seek(index80_27);
                         if ( s>=0 ) return s;
                         break;
-                    case 4 : 
-                        int LA74_17 = input.LA(1);
+                    case 5 : 
+                        int LA80_2 = input.LA(1);
 
                          
-                        int index74_17 = input.index();
+                        int index80_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred11()) ) {s = 24;}
+                        if ( (LA80_2==ID) ) {s = 3;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( (LA80_2==LEFT_PAREN) ) {s = 4;}
 
+                        else if ( (LA80_2==EQUAL) && (synpred11())) {s = 5;}
+
+                        else if ( (LA80_2==GREATER) && (synpred11())) {s = 6;}
+
+                        else if ( (LA80_2==GREATER_EQUAL) && (synpred11())) {s = 7;}
+
+                        else if ( (LA80_2==LESS) && (synpred11())) {s = 8;}
+
+                        else if ( (LA80_2==LESS_EQUAL) && (synpred11())) {s = 9;}
+
+                        else if ( (LA80_2==NOT_EQUAL) && (synpred11())) {s = 10;}
+
+                        else if ( (LA80_2==GRAVE_ACCENT) && (synpred11())) {s = 11;}
+
                          
-                        input.seek(index74_17);
+                        input.seek(index80_2);
                         if ( s>=0 ) return s;
                         break;
-                    case 5 : 
-                        int LA74_28 = input.LA(1);
+                    case 6 : 
+                        int LA80_18 = input.LA(1);
 
                          
-                        int index74_28 = input.index();
+                        int index80_18 = input.index();
                         input.rewind();
                         s = -1;
                         if ( (synpred11()) ) {s = 24;}
@@ -19553,105 +18493,86 @@
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index74_28);
+                        input.seek(index80_18);
                         if ( s>=0 ) return s;
                         break;
-                    case 6 : 
-                        int LA74_3 = input.LA(1);
+                    case 7 : 
+                        int LA80_17 = input.LA(1);
 
                          
-                        int index74_3 = input.index();
+                        int index80_17 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA74_3==DOT||LA74_3==COLON||(LA74_3>=EQUAL && LA74_3<=NOT_EQUAL)||LA74_3==LEFT_SQUARE) ) {s = 1;}
+                        if ( (synpred11()) ) {s = 24;}
 
-                        else if ( (LA74_3==ID) ) {s = 12;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( (LA74_3==STRING||(LA74_3>=BOOL && LA74_3<=INT)||(LA74_3>=FLOAT && LA74_3<=NULL)) && (synpred11())) {s = 13;}
-
-                        else if ( (LA74_3==LEFT_PAREN) ) {s = 14;}
-
-                        else if ( (LA74_3==GRAVE_ACCENT) ) {s = 15;}
-
                          
-                        input.seek(index74_3);
+                        input.seek(index80_17);
                         if ( s>=0 ) return s;
                         break;
-                    case 7 : 
-                        int LA74_2 = input.LA(1);
+                    case 8 : 
+                        int LA80_12 = input.LA(1);
 
                          
-                        int index74_2 = input.index();
+                        int index80_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA74_2==ID) ) {s = 3;}
+                        if ( (LA80_12==LEFT_PAREN) ) {s = 16;}
 
-                        else if ( (LA74_2==EQUAL) && (synpred11())) {s = 4;}
+                        else if ( (LA80_12==ID) ) {s = 17;}
 
-                        else if ( (LA74_2==GREATER) && (synpred11())) {s = 5;}
+                        else if ( (LA80_12==STRING||(LA80_12>=BOOL && LA80_12<=INT)||(LA80_12>=FLOAT && LA80_12<=NULL)) ) {s = 18;}
 
-                        else if ( (LA74_2==GREATER_EQUAL) && (synpred11())) {s = 6;}
+                        else if ( (LA80_12==GRAVE_ACCENT) ) {s = 1;}
 
-                        else if ( (LA74_2==LESS) && (synpred11())) {s = 7;}
+                        else if ( (LA80_12==LEFT_SQUARE) && (synpred11())) {s = 19;}
 
-                        else if ( (LA74_2==LESS_EQUAL) && (synpred11())) {s = 8;}
+                        else if ( (LA80_12==DOT) && (synpred11())) {s = 20;}
 
-                        else if ( (LA74_2==NOT_EQUAL) && (synpred11())) {s = 9;}
+                        else if ( (LA80_12==DOUBLE_AMPER) && (synpred11())) {s = 21;}
 
-                        else if ( (LA74_2==GRAVE_ACCENT) && (synpred11())) {s = 10;}
+                        else if ( (LA80_12==DOUBLE_PIPE) && (synpred11())) {s = 22;}
 
-                        else if ( (LA74_2==LEFT_PAREN) ) {s = 11;}
+                        else if ( (LA80_12==COMMA) && (synpred11())) {s = 23;}
 
-                         
-                        input.seek(index74_2);
-                        if ( s>=0 ) return s;
-                        break;
-                    case 8 : 
-                        int LA74_27 = input.LA(1);
+                        else if ( (LA80_12==RIGHT_PAREN) && (synpred11())) {s = 24;}
 
                          
-                        int index74_27 = input.index();
-                        input.rewind();
-                        s = -1;
-                        if ( (synpred11()) ) {s = 24;}
-
-                        else if ( (true) ) {s = 1;}
-
-                         
-                        input.seek(index74_27);
+                        input.seek(index80_12);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 74, _s, input);
+                new NoViableAltException(getDescription(), 80, _s, input);
             error(nvae);
             throw nvae;
         }
     }
-    static final String DFA75_eotS =
-        "\102\uffff";
-    static final String DFA75_eofS =
-        "\102\uffff";
-    static final String DFA75_minS =
-        "\1\134\1\uffff\2\126\7\uffff\2\126\1\uffff\1\4\2\126\1\0\7\uffff"+
-        "\2\0\1\4\6\uffff\1\4\2\0\2\4\13\0\1\uffff\17\0";
-    static final String DFA75_maxS =
-        "\1\142\1\uffff\1\152\1\155\7\uffff\1\152\1\155\1\uffff\1\173\1\126"+
-        "\1\155\1\0\7\uffff\2\0\1\173\6\uffff\1\173\2\0\2\173\13\0\1\uffff"+
-        "\17\0";
-    static final String DFA75_acceptS =
-        "\1\uffff\1\2\2\uffff\7\1\2\uffff\1\1\4\uffff\7\1\3\uffff\6\1\20"+
-        "\uffff\1\1\17\uffff";
-    static final String DFA75_specialS =
-        "\2\uffff\1\0\1\5\7\uffff\1\10\1\11\3\uffff\1\4\1\1\7\uffff\1\7\1"+
-        "\2\10\uffff\1\6\1\3\35\uffff}>";
-    static final String[] DFA75_transitionS = {
-            "\2\1\3\uffff\1\1\1\2",
+    static final String DFA81_eotS =
+        "\103\uffff";
+    static final String DFA81_eofS =
+        "\103\uffff";
+    static final String DFA81_minS =
+        "\1\136\1\uffff\2\130\7\uffff\2\130\1\uffff\1\4\2\130\7\uffff\3\0"+
+        "\1\4\6\uffff\1\4\2\0\3\4\10\0\1\uffff\22\0";
+    static final String DFA81_maxS =
+        "\1\146\1\uffff\1\157\1\162\7\uffff\1\157\1\162\1\uffff\1\u0080\1"+
+        "\130\1\162\7\uffff\3\0\1\u0080\6\uffff\1\u0080\2\0\3\u0080\10\0"+
+        "\1\uffff\22\0";
+    static final String DFA81_acceptS =
+        "\1\uffff\1\2\2\uffff\7\1\2\uffff\1\1\3\uffff\7\1\4\uffff\6\1\16"+
+        "\uffff\1\1\22\uffff";
+    static final String DFA81_specialS =
+        "\2\uffff\1\11\1\6\7\uffff\1\0\1\10\3\uffff\1\5\7\uffff\1\4\1\7\1"+
+        "\2\10\uffff\1\1\1\3\36\uffff}>";
+    static final String[] DFA81_transitionS = {
+            "\2\1\5\uffff\1\1\1\2",
             "",
-            "\1\3\4\uffff\1\13\10\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
-            "\1\14\1\1\2\uffff\1\15\1\16\2\uffff\1\1\2\15\3\uffff\6\1\1\17"+
-            "\2\15\1\1",
+            "\1\3\4\uffff\1\13\13\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12",
+            "\1\14\1\1\2\uffff\1\15\1\16\3\uffff\1\1\1\uffff\2\15\4\uffff"+
+            "\6\1\1\17\2\15\1\1",
             "",
             "",
             "",
@@ -19659,17 +18580,16 @@
             "",
             "",
             "",
-            "\1\20\4\uffff\1\21\10\uffff\1\22\1\23\1\24\1\25\1\26\1\27\1"+
-            "\30",
-            "\1\31\1\35\2\uffff\1\32\1\33\1\40\1\41\1\uffff\2\32\1\36\1\37"+
-            "\7\uffff\1\1\2\32\1\34",
+            "\1\20\4\uffff\1\30\13\uffff\1\21\1\22\1\23\1\24\1\25\1\26\1"+
+            "\27",
+            "\1\31\1\35\2\uffff\1\32\1\33\1\40\1\41\3\uffff\2\32\1\36\1\37"+
+            "\10\uffff\1\1\2\32\1\34",
             "",
-            "\122\55\1\42\3\55\1\54\1\43\1\55\1\44\1\55\2\54\3\55\1\45\1"+
-            "\46\1\47\1\50\1\51\1\52\1\53\2\54\17\55",
+            "\124\55\1\42\3\55\1\45\1\43\1\55\1\44\3\55\2\45\4\55\1\46\1"+
+            "\47\1\50\1\51\1\52\1\53\1\54\2\45\17\55",
             "\1\56",
-            "\1\57\1\1\2\uffff\1\62\1\61\2\uffff\1\1\2\62\3\uffff\6\1\1\60"+
-            "\2\62\1\1",
-            "\1\uffff",
+            "\1\57\1\1\2\uffff\1\60\1\61\3\uffff\1\1\1\uffff\2\60\4\uffff"+
+            "\6\1\1\62\2\60\1\1",
             "",
             "",
             "",
@@ -19679,7 +18599,8 @@
             "",
             "\1\uffff",
             "\1\uffff",
-            "\122\67\1\63\3\67\1\66\1\64\1\67\1\65\1\67\2\66\12\67\2\66\17"+
+            "\1\uffff",
+            "\124\67\1\63\3\67\1\66\1\64\1\67\1\65\3\67\2\66\13\67\2\66\17"+
             "\67",
             "",
             "",
@@ -19687,13 +18608,14 @@
             "",
             "",
             "",
-            "\122\55\1\70\1\74\2\55\1\71\1\72\1\75\1\76\1\55\2\71\11\55\1"+
-            "\77\2\71\1\73\16\55",
+            "\124\55\1\70\1\75\2\55\1\71\1\72\1\76\1\73\3\55\2\71\12\55\1"+
+            "\77\2\71\1\74\16\55",
             "\1\uffff",
             "\1\uffff",
-            "\122\55\1\100\3\55\1\71\1\101\1\55\1\44\1\55\2\71\12\55\2\71"+
+            "\131\55\1\100\1\76\1\73\41\55",
+            "\124\55\1\101\3\55\1\71\1\102\1\55\1\44\3\55\2\71\13\55\2\71"+
             "\17\55",
-            "\122\55\1\100\3\55\1\71\1\101\1\55\1\44\1\55\2\71\12\55\2\71"+
+            "\124\55\1\101\3\55\1\71\1\102\1\55\1\44\3\55\2\71\13\55\2\71"+
             "\17\55",
             "\1\uffff",
             "\1\uffff",
@@ -19703,10 +18625,10 @@
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
+            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
-            "",
             "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -19724,668 +18646,694 @@
             "\1\uffff"
     };
 
-    static final short[] DFA75_eot = DFA.unpackEncodedString(DFA75_eotS);
-    static final short[] DFA75_eof = DFA.unpackEncodedString(DFA75_eofS);
-    static final char[] DFA75_min = DFA.unpackEncodedStringToUnsignedChars(DFA75_minS);
-    static final char[] DFA75_max = DFA.unpackEncodedStringToUnsignedChars(DFA75_maxS);
-    static final short[] DFA75_accept = DFA.unpackEncodedString(DFA75_acceptS);
-    static final short[] DFA75_special = DFA.unpackEncodedString(DFA75_specialS);
-    static final short[][] DFA75_transition;
+    static final short[] DFA81_eot = DFA.unpackEncodedString(DFA81_eotS);
+    static final short[] DFA81_eof = DFA.unpackEncodedString(DFA81_eofS);
+    static final char[] DFA81_min = DFA.unpackEncodedStringToUnsignedChars(DFA81_minS);
+    static final char[] DFA81_max = DFA.unpackEncodedStringToUnsignedChars(DFA81_maxS);
+    static final short[] DFA81_accept = DFA.unpackEncodedString(DFA81_acceptS);
+    static final short[] DFA81_special = DFA.unpackEncodedString(DFA81_specialS);
+    static final short[][] DFA81_transition;
 
     static {
-        int numStates = DFA75_transitionS.length;
-        DFA75_transition = new short[numStates][];
+        int numStates = DFA81_transitionS.length;
+        DFA81_transition = new short[numStates][];
         for (int i=0; i<numStates; i++) {
-            DFA75_transition[i] = DFA.unpackEncodedString(DFA75_transitionS[i]);
+            DFA81_transition[i] = DFA.unpackEncodedString(DFA81_transitionS[i]);
         }
     }
 
-    class DFA75 extends DFA {
+    class DFA81 extends DFA {
 
-        public DFA75(BaseRecognizer recognizer) {
+        public DFA81(BaseRecognizer recognizer) {
             this.recognizer = recognizer;
-            this.decisionNumber = 75;
-            this.eot = DFA75_eot;
-            this.eof = DFA75_eof;
-            this.min = DFA75_min;
-            this.max = DFA75_max;
-            this.accept = DFA75_accept;
-            this.special = DFA75_special;
-            this.transition = DFA75_transition;
+            this.decisionNumber = 81;
+            this.eot = DFA81_eot;
+            this.eof = DFA81_eof;
+            this.min = DFA81_min;
+            this.max = DFA81_max;
+            this.accept = DFA81_accept;
+            this.special = DFA81_special;
+            this.transition = DFA81_transition;
         }
         public String getDescription() {
-            return "()* loopback of 679:26: ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*";
+            return "()* loopback of 724:26: ( ( DOUBLE_AMPER )=> DOUBLE_AMPER constraint_expression )*";
         }
         public int specialStateTransition(int s, IntStream input) throws NoViableAltException {
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA75_2 = input.LA(1);
+                        int LA81_11 = input.LA(1);
 
                          
-                        int index75_2 = input.index();
+                        int index81_11 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA75_2==ID) ) {s = 3;}
+                        if ( (LA81_11==ID) ) {s = 16;}
 
-                        else if ( (LA75_2==EQUAL) && (synpred12())) {s = 4;}
+                        else if ( (LA81_11==EQUAL) && (synpred12())) {s = 17;}
 
-                        else if ( (LA75_2==GREATER) && (synpred12())) {s = 5;}
+                        else if ( (LA81_11==GREATER) && (synpred12())) {s = 18;}
 
-                        else if ( (LA75_2==GREATER_EQUAL) && (synpred12())) {s = 6;}
+                        else if ( (LA81_11==GREATER_EQUAL) && (synpred12())) {s = 19;}
 
-                        else if ( (LA75_2==LESS) && (synpred12())) {s = 7;}
+                        else if ( (LA81_11==LESS) && (synpred12())) {s = 20;}
 
-                        else if ( (LA75_2==LESS_EQUAL) && (synpred12())) {s = 8;}
+                        else if ( (LA81_11==LESS_EQUAL) && (synpred12())) {s = 21;}
 
-                        else if ( (LA75_2==NOT_EQUAL) && (synpred12())) {s = 9;}
+                        else if ( (LA81_11==NOT_EQUAL) && (synpred12())) {s = 22;}
 
-                        else if ( (LA75_2==GRAVE_ACCENT) && (synpred12())) {s = 10;}
+                        else if ( (LA81_11==GRAVE_ACCENT) && (synpred12())) {s = 23;}
 
-                        else if ( (LA75_2==LEFT_PAREN) ) {s = 11;}
+                        else if ( (LA81_11==LEFT_PAREN) ) {s = 24;}
 
                          
-                        input.seek(index75_2);
+                        input.seek(index81_11);
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA75_17 = input.LA(1);
+                        int LA81_35 = input.LA(1);
 
                          
-                        int index75_17 = input.index();
+                        int index81_35 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred12()) ) {s = 50;}
+                        if ( (synpred12()) ) {s = 48;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index75_17);
+                        input.seek(index81_35);
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA75_26 = input.LA(1);
+                        int LA81_26 = input.LA(1);
 
                          
-                        int index75_26 = input.index();
+                        int index81_26 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred12()) ) {s = 50;}
+                        if ( (synpred12()) ) {s = 48;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index75_26);
+                        input.seek(index81_26);
                         if ( s>=0 ) return s;
                         break;
                     case 3 : 
-                        int LA75_36 = input.LA(1);
+                        int LA81_36 = input.LA(1);
 
                          
-                        int index75_36 = input.index();
+                        int index81_36 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred12()) ) {s = 50;}
+                        if ( (synpred12()) ) {s = 48;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index75_36);
+                        input.seek(index81_36);
                         if ( s>=0 ) return s;
                         break;
                     case 4 : 
-                        int LA75_16 = input.LA(1);
+                        int LA81_24 = input.LA(1);
 
                          
-                        int index75_16 = input.index();
+                        int index81_24 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA75_16==DOT||LA75_16==COLON||(LA75_16>=EQUAL && LA75_16<=NOT_EQUAL)||LA75_16==LEFT_SQUARE) ) {s = 1;}
+                        if ( (synpred12()) ) {s = 48;}
 
-                        else if ( (LA75_16==ID) ) {s = 47;}
+                        else if ( (true) ) {s = 1;}
 
-                        else if ( (LA75_16==GRAVE_ACCENT) ) {s = 48;}
-
-                        else if ( (LA75_16==LEFT_PAREN) ) {s = 49;}
-
-                        else if ( (LA75_16==STRING||(LA75_16>=BOOL && LA75_16<=INT)||(LA75_16>=FLOAT && LA75_16<=NULL)) && (synpred12())) {s = 50;}
-
                          
-                        input.seek(index75_16);
+                        input.seek(index81_24);
                         if ( s>=0 ) return s;
                         break;
                     case 5 : 
-                        int LA75_3 = input.LA(1);
+                        int LA81_16 = input.LA(1);
 
                          
-                        int index75_3 = input.index();
+                        int index81_16 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA75_3==DOT||LA75_3==COLON||(LA75_3>=EQUAL && LA75_3<=NOT_EQUAL)||LA75_3==LEFT_SQUARE) ) {s = 1;}
+                        if ( (LA81_16==DOT||LA81_16==COLON||(LA81_16>=EQUAL && LA81_16<=NOT_EQUAL)||LA81_16==LEFT_SQUARE) ) {s = 1;}
 
-                        else if ( (LA75_3==ID) ) {s = 12;}
+                        else if ( (LA81_16==ID) ) {s = 47;}
 
-                        else if ( (LA75_3==STRING||(LA75_3>=BOOL && LA75_3<=INT)||(LA75_3>=FLOAT && LA75_3<=NULL)) && (synpred12())) {s = 13;}
+                        else if ( (LA81_16==STRING||(LA81_16>=BOOL && LA81_16<=INT)||(LA81_16>=FLOAT && LA81_16<=NULL)) && (synpred12())) {s = 48;}
 
-                        else if ( (LA75_3==LEFT_PAREN) ) {s = 14;}
+                        else if ( (LA81_16==LEFT_PAREN) ) {s = 49;}
 
-                        else if ( (LA75_3==GRAVE_ACCENT) ) {s = 15;}
+                        else if ( (LA81_16==GRAVE_ACCENT) ) {s = 50;}
 
                          
-                        input.seek(index75_3);
+                        input.seek(index81_16);
                         if ( s>=0 ) return s;
                         break;
                     case 6 : 
-                        int LA75_35 = input.LA(1);
+                        int LA81_3 = input.LA(1);
 
                          
-                        int index75_35 = input.index();
+                        int index81_3 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred12()) ) {s = 50;}
+                        if ( (LA81_3==DOT||LA81_3==COLON||(LA81_3>=EQUAL && LA81_3<=NOT_EQUAL)||LA81_3==LEFT_SQUARE) ) {s = 1;}
 
-                        else if ( (true) ) {s = 1;}
+                        else if ( (LA81_3==ID) ) {s = 12;}
 
+                        else if ( (LA81_3==STRING||(LA81_3>=BOOL && LA81_3<=INT)||(LA81_3>=FLOAT && LA81_3<=NULL)) && (synpred12())) {s = 13;}
+
+                        else if ( (LA81_3==LEFT_PAREN) ) {s = 14;}
+
+                        else if ( (LA81_3==GRAVE_ACCENT) ) {s = 15;}
+
                          
-                        input.seek(index75_35);
+                        input.seek(index81_3);
                         if ( s>=0 ) return s;
                         break;
                     case 7 : 
-                        int LA75_25 = input.LA(1);
+                        int LA81_25 = input.LA(1);
 
                          
-                        int index75_25 = input.index();
+                        int index81_25 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (synpred12()) ) {s = 50;}
+                        if ( (synpred12()) ) {s = 48;}
 
                         else if ( (true) ) {s = 1;}
 
                          
-                        input.seek(index75_25);
+                        input.seek(index81_25);
                         if ( s>=0 ) return s;
                         break;
                     case 8 : 
-                        int LA75_11 = input.LA(1);
+                        int LA81_12 = input.LA(1);
 
                          
-                        int index75_11 = input.index();
+                        int index81_12 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA75_11==ID) ) {s = 16;}
+                        if ( (LA81_12==ID) ) {s = 25;}
 
-                        else if ( (LA75_11==LEFT_PAREN) ) {s = 17;}
+                        else if ( (LA81_12==STRING||(LA81_12>=BOOL && LA81_12<=INT)||(LA81_12>=FLOAT && LA81_12<=NULL)) ) {s = 26;}
 
-                        else if ( (LA75_11==EQUAL) && (synpred12())) {s = 18;}
+                        else if ( (LA81_12==LEFT_PAREN) ) {s = 27;}
 
-                        else if ( (LA75_11==GREATER) && (synpred12())) {s = 19;}
+                        else if ( (LA81_12==GRAVE_ACCENT) ) {s = 1;}
 
-                        else if ( (LA75_11==GREATER_EQUAL) && (synpred12())) {s = 20;}
+                        else if ( (LA81_12==LEFT_SQUARE) && (synpred12())) {s = 28;}
 
-                        else if ( (LA75_11==LESS) && (synpred12())) {s = 21;}
+                        else if ( (LA81_12==DOT) && (synpred12())) {s = 29;}
 
-                        else if ( (LA75_11==LESS_EQUAL) && (synpred12())) {s = 22;}
+                        else if ( (LA81_12==DOUBLE_PIPE) && (synpred12())) {s = 30;}
 
-                        else if ( (LA75_11==NOT_EQUAL) && (synpred12())) {s = 23;}
+                        else if ( (LA81_12==DOUBLE_AMPER) && (synpred12())) {s = 31;}
 
-                        else if ( (LA75_11==GRAVE_ACCENT) && (synpred12())) {s = 24;}
+                        else if ( (LA81_12==COMMA) && (synpred12())) {s = 32;}
 
+                        else if ( (LA81_12==RIGHT_PAREN) && (synpred12())) {s = 33;}
+
                          
-                        input.seek(index75_11);
+                        input.seek(index81_12);
                         if ( s>=0 ) return s;
                         break;
                     case 9 : 
-                        int LA75_12 = input.LA(1);
+                        int LA81_2 = input.LA(1);
 
                          
-                        int index75_12 = input.index();
+                        int index81_2 = input.index();
                         input.rewind();
                         s = -1;
-                        if ( (LA75_12==ID) ) {s = 25;}
+                        if ( (LA81_2==ID) ) {s = 3;}
 
-                        else if ( (LA75_12==STRING||(LA75_12>=BOOL && LA75_12<=INT)||(LA75_12>=FLOAT && LA75_12<=NULL)) ) {s = 26;}
+                        else if ( (LA81_2==EQUAL) && (synpred12())) {s = 4;}
 
-                        else if ( (LA75_12==LEFT_PAREN) ) {s = 27;}
+                        else if ( (LA81_2==GREATER) && (synpred12())) {s = 5;}
 
-                        else if ( (LA75_12==GRAVE_ACCENT) ) {s = 1;}
+                        else if ( (LA81_2==GREATER_EQUAL) && (synpred12())) {s = 6;}
 
-                        else if ( (LA75_12==LEFT_SQUARE) && (synpred12())) {s = 28;}
+                        else if ( (LA81_2==LESS) && (synpred12())) {s = 7;}
 
-                        else if ( (LA75_12==DOT) && (synpred12())) {s = 29;}
+                        else if ( (LA81_2==LESS_EQUAL) && (synpred12())) {s = 8;}
 
-                        else if ( (LA75_12==DOUBLE_PIPE) && (synpred12())) {s = 30;}
+                        else if ( (LA81_2==NOT_EQUAL) && (synpred12())) {s = 9;}
 
-                        else if ( (LA75_12==DOUBLE_AMPER) && (synpred12())) {s = 31;}
+                        else if ( (LA81_2==GRAVE_ACCENT) && (synpred12())) {s = 10;}
 
-                        else if ( (LA75_12==COMMA) && (synpred12())) {s = 32;}
+                        else if ( (LA81_2==LEFT_PAREN) ) {s = 11;}
 
-                        else if ( (LA75_12==RIGHT_PAREN) && (synpred12())) {s = 33;}
-
                          
-                        input.seek(index75_12);
+                        input.seek(index81_2);
                         if ( s>=0 ) return s;
                         break;
             }
             if (backtracking>0) {failed=true; return -1;}
             NoViableAltException nvae =
-                new NoViableAltException(getDescription(), 75, _s, input);
+                new NoViableAltException(getDescription(), 81, _s, input);
             error(nvae);
             throw nvae;
         }
     }
  
 
-    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_statement461 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_package_id_in_package_statement463 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_package_statement465 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_package_id489 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_DOT_in_package_id495 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_package_id499 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_rule_attribute_in_statement527 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_import_statement_in_statement534 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_statement_in_statement540 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_in_statement546 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_in_statement552 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_template_in_statement557 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_in_statement562 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_query_in_statement567 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_key_in_import_statement589 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_import_name_in_import_statement591 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_import_statement594 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_import_key_in_function_import_statement629 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_function_key_in_function_import_statement631 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_import_name_in_function_import_statement633 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_function_import_statement636 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_name665 = new BitSet(new long[]{0x0000000000000002L,0x0000000001800000L});
-    public static final BitSet FOLLOW_DOT_in_import_name671 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_import_name675 = new BitSet(new long[]{0x0000000000000002L,0x0000000001800000L});
-    public static final BitSet FOLLOW_DOT_STAR_in_import_name682 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_global_key_in_global722 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_data_type_in_global724 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_global_id_in_global726 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_global728 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_global_id754 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_function_key_in_function786 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_data_type_in_function788 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_function_id_in_function791 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_parameters_in_function793 = new BitSet(new long[]{0x0000000000000000L,0x0001000000000000L});
-    public static final BitSet FOLLOW_curly_chunk_in_function795 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_function_id825 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_query_key_in_query857 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
-    public static final BitSet FOLLOW_query_id_in_query859 = new BitSet(new long[]{0x0000000000000000L,0x000000000A400000L});
-    public static final BitSet FOLLOW_parameters_in_query861 = new BitSet(new long[]{0x0000000000000000L,0x000000000A400000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_query864 = new BitSet(new long[]{0x0000000000000000L,0x0000000002000000L});
-    public static final BitSet FOLLOW_END_in_query866 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_query868 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_query_id900 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_query_id916 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_parameters935 = new BitSet(new long[]{0x0000000000000000L,0x0000000020400000L});
-    public static final BitSet FOLLOW_param_definition_in_parameters942 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
-    public static final BitSet FOLLOW_COMMA_in_parameters945 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_param_definition_in_parameters947 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_parameters956 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_data_type_in_param_definition980 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_argument_in_param_definition983 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_argument994 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_dimension_definition_in_argument996 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_template_key_in_template1020 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
-    public static final BitSet FOLLOW_template_id_in_template1022 = new BitSet(new long[]{0x0000000000000000L,0x0000000000600000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template1024 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_template_slot_in_template1029 = new BitSet(new long[]{0x0000000000000000L,0x0000000002400000L});
-    public static final BitSet FOLLOW_END_in_template1034 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template1036 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_template_id1066 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_template_id1082 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_data_type_in_template_slot1102 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_slot_id_in_template_slot1104 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_template_slot1106 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_slot_id1131 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule_key_in_rule1160 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
-    public static final BitSet FOLLOW_rule_id_in_rule1162 = new BitSet(new long[]{0x0000000000000000L,0x0000800000400000L});
-    public static final BitSet FOLLOW_rule_attributes_in_rule1164 = new BitSet(new long[]{0x0000000000000000L,0x0000800000400000L});
-    public static final BitSet FOLLOW_when_part_in_rule1167 = new BitSet(new long[]{0x0000000000000000L,0x0000800000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_in_rule1170 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_when_key_in_when_part1199 = new BitSet(new long[]{0x0000000000000002L,0x0000000048400000L});
-    public static final BitSet FOLLOW_COLON_in_when_part1201 = new BitSet(new long[]{0x0000000000000002L,0x0000000008400000L});
-    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1204 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_id1225 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_rule_id1241 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1262 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
-    public static final BitSet FOLLOW_COLON_in_rule_attributes1264 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1269 = new BitSet(new long[]{0x0000000000000002L,0x0000000010400000L});
-    public static final BitSet FOLLOW_COMMA_in_rule_attributes1273 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1278 = new BitSet(new long[]{0x0000000000000002L,0x0000000010400000L});
-    public static final BitSet FOLLOW_salience_in_rule_attribute1317 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_in_rule_attribute1323 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1330 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_in_rule_attribute1337 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_in_rule_attribute1344 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1350 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_in_rule_attribute1356 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_in_rule_attribute1362 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_in_rule_attribute1368 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1374 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1380 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_in_rule_attribute1385 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_effective_key_in_date_effective1397 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_date_effective1400 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_date_expires_key_in_date_expires1411 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_date_expires1414 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_enabled_key_in_enabled1428 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
-    public static final BitSet FOLLOW_BOOL_in_enabled1431 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_salience_key_in_salience1443 = new BitSet(new long[]{0x0000000000000000L,0x0000000108000000L});
-    public static final BitSet FOLLOW_INT_in_salience1450 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_salience1459 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_no_loop_key_in_no_loop1475 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
-    public static final BitSet FOLLOW_BOOL_in_no_loop1478 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1490 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
-    public static final BitSet FOLLOW_BOOL_in_auto_focus1493 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_activation_group_key_in_activation_group1507 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_activation_group1510 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1521 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_ruleflow_group1524 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1535 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_agenda_group1538 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_duration_key_in_duration1549 = new BitSet(new long[]{0x0000000000000000L,0x0000000100000000L});
-    public static final BitSet FOLLOW_INT_in_duration1552 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_dialect_key_in_dialect1566 = new BitSet(new long[]{0x0000000000000000L,0x0000000004000000L});
-    public static final BitSet FOLLOW_STRING_in_dialect1569 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active1587 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
-    public static final BitSet FOLLOW_BOOL_in_lock_on_active1590 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1602 = new BitSet(new long[]{0x0000000000000002L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs1623 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or1644 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or1648 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1650 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or1653 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1674 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
-    public static final BitSet FOLLOW_or_key_in_lhs_or1696 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or1703 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_and_in_lhs_or1708 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and1746 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and1750 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1752 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and1755 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1776 = new BitSet(new long[]{0x0000000000000002L,0x0000000400400000L});
-    public static final BitSet FOLLOW_and_key_in_lhs_and1798 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and1805 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1810 = new BitSet(new long[]{0x0000000000000002L,0x0000000400400000L});
-    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary1848 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_lhs_not_in_lhs_unary1854 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary1860 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary1866 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary1872 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_unary1875 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary1877 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_pattern_source_in_lhs_unary1883 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary1897 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_exists_key_in_lhs_exist1911 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1935 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist1942 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_exist1944 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist1946 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist1959 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_not_key_in_lhs_not2005 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not2022 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not2029 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_lhs_not2031 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not2033 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not2041 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_eval_key_in_lhs_eval2080 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval2084 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forall_key_in_lhs_forall2108 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall2110 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2112 = new BitSet(new long[]{0x0000000000000000L,0x0000000020400000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall2115 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2147 = new BitSet(new long[]{0x0000000000000002L,0x0000000000400000L});
-    public static final BitSet FOLLOW_from_key_in_pattern_source2156 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2172 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_statement_in_pattern_source2188 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2205 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_from_source_in_pattern_source2221 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement2249 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2253 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2255 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2257 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2265 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2271 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2279 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause2308 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2313 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2315 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause2319 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2323 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2325 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause2331 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2335 = new BitSet(new long[]{0x0000000000000000L,0x0000000010400000L});
-    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2337 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause2343 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2347 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_id_clause2396 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause2400 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_collect_key_in_collect_statement2422 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2426 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_pattern_source_in_collect_statement2428 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2430 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement2452 = new BitSet(new long[]{0x0000000000000000L,0x0000000004400000L});
-    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement2454 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entrypoint_id2477 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_STRING_in_entrypoint_id2490 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_source2506 = new BitSet(new long[]{0x0000000000000002L,0x0000000008800000L});
-    public static final BitSet FOLLOW_paren_chunk_in_from_source2519 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_expression_chain_in_from_source2526 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOT_in_expression_chain2558 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_expression_chain2560 = new BitSet(new long[]{0x0000000000000002L,0x0000200008800000L});
-    public static final BitSet FOLLOW_square_chunk_in_expression_chain2580 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2602 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain2613 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2646 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_lhs_pattern2659 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_fact_binding2679 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding2685 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding2692 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding2694 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding2696 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression2735 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
-    public static final BitSet FOLLOW_or_key_in_fact_binding_expression2747 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression2753 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_fact_in_fact_binding_expression2758 = new BitSet(new long[]{0x0000000000000002L,0x0000000200400000L});
-    public static final BitSet FOLLOW_pattern_type_in_fact2798 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_fact2800 = new BitSet(new long[]{0x0000000000000000L,0x0000000028400000L});
-    public static final BitSet FOLLOW_constraints_in_fact2802 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact2805 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constraint_in_constraints2830 = new BitSet(new long[]{0x0000000000000002L,0x0000000010000000L});
-    public static final BitSet FOLLOW_COMMA_in_constraints2834 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_constraint_in_constraints2837 = new BitSet(new long[]{0x0000000000000002L,0x0000000010000000L});
-    public static final BitSet FOLLOW_or_constr_in_constraint2851 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr2862 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr2866 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_and_constr_in_or_constr2869 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr2884 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr2888 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_unary_constr_in_and_constr2891 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_eval_key_in_unary_constr2912 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_unary_constr2915 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_field_constraint_in_unary_constr2920 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr2925 = new BitSet(new long[]{0x0000000000000000L,0x0000000008400000L});
-    public static final BitSet FOLLOW_or_constr_in_unary_constr2928 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr2930 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_label_in_field_constraint2944 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint2946 = new BitSet(new long[]{0x0000000000000002L,0x000007F808400000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint2950 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ARROW_in_field_constraint2956 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_paren_chunk_in_field_constraint2958 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_field_constraint3012 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3014 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_label3038 = new BitSet(new long[]{0x0000000000000000L,0x0000000040000000L});
-    public static final BitSet FOLLOW_COLON_in_label3040 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3056 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective3064 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
-    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3067 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3082 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective3090 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
-    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3093 = new BitSet(new long[]{0x0000000000000002L,0x0000000400000000L});
-    public static final BitSet FOLLOW_compound_operator_in_constraint_expression3115 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_simple_operator_in_constraint_expression3120 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression3125 = new BitSet(new long[]{0x0000000000000000L,0x000007F008400000L});
-    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression3128 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression3130 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EQUAL_in_simple_operator3142 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_GREATER_in_simple_operator3148 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator3154 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_LESS_in_simple_operator3160 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator3166 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator3172 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_not_key_in_simple_operator3178 = new BitSet(new long[]{0x0000000000000000L,0x0000040000400000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator3181 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3184 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator3187 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator3190 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3194 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3199 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3202 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator3205 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_contains_key_in_simple_operator3211 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_excludes_key_in_simple_operator3217 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_matches_key_in_simple_operator3223 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3229 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_memberof_key_in_simple_operator3235 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3241 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3247 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_simple_operator3250 = new BitSet(new long[]{0x0000000000000000L,0x0000200000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_simple_operator3253 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_expression_value_in_simple_operator3257 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator3272 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_not_key_in_compound_operator3277 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_in_key_in_compound_operator3279 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3284 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3287 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
-    public static final BitSet FOLLOW_COMMA_in_compound_operator3291 = new BitSet(new long[]{0x0000000000000000L,0x000018018C400000L});
-    public static final BitSet FOLLOW_expression_value_in_compound_operator3294 = new BitSet(new long[]{0x0000000000000000L,0x0000000030000000L});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3299 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_path_in_expression_value3310 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_literal_constraint_in_expression_value3315 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_in_expression_value3321 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit408 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit413 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_EOF_in_compilation_unit418 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_package_key_in_package_statement469 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_package_id_in_package_statement471 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_package_statement473 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_id497 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_DOT_in_package_id503 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_package_id507 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_statement545 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_import_statement_in_statement552 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_statement_in_statement558 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_in_statement564 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_in_statement570 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_in_statement578 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_type_declaration_in_statement586 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_in_statement591 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_in_statement596 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_import_statement618 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_import_name_in_import_statement620 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_import_statement623 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_import_key_in_function_import_statement658 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_function_key_in_function_import_statement660 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement662 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_function_import_statement665 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_name694 = new BitSet(new long[]{0x0000000000000002L,0x0000000006000000L});
+    public static final BitSet FOLLOW_DOT_in_import_name700 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_import_name704 = new BitSet(new long[]{0x0000000000000002L,0x0000000006000000L});
+    public static final BitSet FOLLOW_DOT_STAR_in_import_name711 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_global_key_in_global751 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_data_type_in_global753 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_global_id_in_global755 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_global757 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_id783 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_function_key_in_function815 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_data_type_in_function817 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_function_id_in_function820 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_parameters_in_function822 = new BitSet(new long[]{0x0000000000000000L,0x0020000000000000L});
+    public static final BitSet FOLLOW_curly_chunk_in_function824 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_id854 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_query_key_in_query886 = new BitSet(new long[]{0x0000000000000000L,0x0000000011000000L});
+    public static final BitSet FOLLOW_query_id_in_query888 = new BitSet(new long[]{0x0000000000000000L,0x0000000029000000L});
+    public static final BitSet FOLLOW_parameters_in_query890 = new BitSet(new long[]{0x0000000000000000L,0x0000000029000000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_query893 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_END_in_query895 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_query897 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_id929 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_query_id945 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_parameters964 = new BitSet(new long[]{0x0000000000000000L,0x0000000081000000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters971 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
+    public static final BitSet FOLLOW_COMMA_in_parameters974 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_param_definition_in_parameters976 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_parameters985 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_param_definition1009 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_argument_in_param_definition1012 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument1023 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_argument1025 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_declare_key_in_type_declaration1048 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_type_declare_id_in_type_declaration1051 = new BitSet(new long[]{0x0000000000000000L,0x0000000109000000L});
+    public static final BitSet FOLLOW_decl_metadata_in_type_declaration1055 = new BitSet(new long[]{0x0000000000000000L,0x0000000109000000L});
+    public static final BitSet FOLLOW_decl_field_in_type_declaration1060 = new BitSet(new long[]{0x0000000000000000L,0x0000000009000000L});
+    public static final BitSet FOLLOW_END_in_type_declaration1065 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_type_declare_id1097 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_AT_in_decl_metadata1116 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_decl_metadata1118 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_decl_metadata1120 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_decl_field1143 = new BitSet(new long[]{0x0000000000000000L,0x0000000600000000L});
+    public static final BitSet FOLLOW_decl_field_initialization_in_decl_field1145 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
+    public static final BitSet FOLLOW_COLON_in_decl_field1148 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_data_type_in_decl_field1150 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_decl_metadata_in_decl_field1154 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_EQUALS_in_decl_field_initialization1182 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_decl_field_initialization1184 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_template_key_in_template1215 = new BitSet(new long[]{0x0000000000000000L,0x0000000011000000L});
+    public static final BitSet FOLLOW_template_id_in_template1217 = new BitSet(new long[]{0x0000000000000000L,0x0000000001800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template1219 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_template_slot_in_template1224 = new BitSet(new long[]{0x0000000000000000L,0x0000000009000000L});
+    public static final BitSet FOLLOW_END_in_template1229 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template1231 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_id1261 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_template_id1277 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_data_type_in_template_slot1297 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_slot_id_in_template_slot1299 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_template_slot1301 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_slot_id1326 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule_key_in_rule1355 = new BitSet(new long[]{0x0000000000000000L,0x0000000011000000L});
+    public static final BitSet FOLLOW_rule_id_in_rule1357 = new BitSet(new long[]{0x0000000000000000L,0x0010000001000000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule1359 = new BitSet(new long[]{0x0000000000000000L,0x0010000001000000L});
+    public static final BitSet FOLLOW_when_part_in_rule1362 = new BitSet(new long[]{0x0000000000000000L,0x0010000000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_in_rule1365 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_when_key_in_when_part1394 = new BitSet(new long[]{0x0000000000000002L,0x0000000221000000L});
+    public static final BitSet FOLLOW_COLON_in_when_part1396 = new BitSet(new long[]{0x0000000000000002L,0x0000000021000000L});
+    public static final BitSet FOLLOW_normal_lhs_block_in_when_part1399 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_id1420 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_rule_id1436 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_attributes_key_in_rule_attributes1457 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
+    public static final BitSet FOLLOW_COLON_in_rule_attributes1459 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1464 = new BitSet(new long[]{0x0000000000000002L,0x0000000041000000L});
+    public static final BitSet FOLLOW_COMMA_in_rule_attributes1468 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes1473 = new BitSet(new long[]{0x0000000000000002L,0x0000000041000000L});
+    public static final BitSet FOLLOW_salience_in_rule_attribute1512 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_in_rule_attribute1518 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_in_rule_attribute1525 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_in_rule_attribute1532 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_in_rule_attribute1539 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_in_rule_attribute1545 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_in_rule_attribute1551 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_in_rule_attribute1557 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_in_rule_attribute1563 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_in_rule_attribute1569 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_in_rule_attribute1575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_in_rule_attribute1580 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_effective_key_in_date_effective1592 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_date_effective1595 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_date_expires_key_in_date_expires1606 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_date_expires1609 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_enabled_key_in_enabled1623 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
+    public static final BitSet FOLLOW_BOOL_in_enabled1626 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_salience_key_in_salience1638 = new BitSet(new long[]{0x0000000000000000L,0x0000001020000000L});
+    public static final BitSet FOLLOW_INT_in_salience1645 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_salience1654 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_no_loop_key_in_no_loop1670 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+    public static final BitSet FOLLOW_BOOL_in_no_loop1673 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_auto_focus_key_in_auto_focus1685 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+    public static final BitSet FOLLOW_BOOL_in_auto_focus1688 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_activation_group_key_in_activation_group1702 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_activation_group1705 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleflow_group_key_in_ruleflow_group1716 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_ruleflow_group1719 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_agenda_group_key_in_agenda_group1730 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_agenda_group1733 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_duration_key_in_duration1744 = new BitSet(new long[]{0x0000000000000000L,0x0000001000000000L});
+    public static final BitSet FOLLOW_INT_in_duration1747 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_dialect_key_in_dialect1761 = new BitSet(new long[]{0x0000000000000000L,0x0000000010000000L});
+    public static final BitSet FOLLOW_STRING_in_dialect1764 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lock_on_active_key_in_lock_on_active1782 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
+    public static final BitSet FOLLOW_BOOL_in_lock_on_active1785 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_in_normal_lhs_block1797 = new BitSet(new long[]{0x0000000000000002L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs1818 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_or1839 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1843 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1845 = new BitSet(new long[]{0x0000000000000000L,0x00000000A1000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_or1848 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1869 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
+    public static final BitSet FOLLOW_or_key_in_lhs_or1891 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_lhs_or1898 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_and_in_lhs_or1903 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_and1941 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1945 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1947 = new BitSet(new long[]{0x0000000000000000L,0x00000000A1000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_and1950 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and1971 = new BitSet(new long[]{0x0000000000000002L,0x0000004001000000L});
+    public static final BitSet FOLLOW_and_key_in_lhs_and1993 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_lhs_and2000 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_unary_in_lhs_and2005 = new BitSet(new long[]{0x0000000000000002L,0x0000004001000000L});
+    public static final BitSet FOLLOW_lhs_exist_in_lhs_unary2043 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_lhs_not_in_lhs_unary2049 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_lhs_eval_in_lhs_unary2055 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_lhs_forall_in_lhs_unary2061 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_unary2067 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_unary2070 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_unary2072 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_pattern_source_in_lhs_unary2078 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_lhs_unary2092 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_exists_key_in_lhs_exist2106 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2130 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_exist2137 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_exist2139 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_exist2141 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_exist2154 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_not_key_in_lhs_not2200 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not2217 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_not2224 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_lhs_not2226 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_not2228 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_not2236 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_eval_key_in_lhs_eval2275 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_lhs_eval2279 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forall_key_in_lhs_forall2303 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_lhs_forall2305 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs_forall2307 = new BitSet(new long[]{0x0000000000000000L,0x0000000081000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_lhs_forall2310 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_lhs_pattern_in_pattern_source2342 = new BitSet(new long[]{0x0000000000000002L,0x0000008001000000L});
+    public static final BitSet FOLLOW_over_clause_in_pattern_source2346 = new BitSet(new long[]{0x0000000000000002L,0x0000000001000000L});
+    public static final BitSet FOLLOW_from_key_in_pattern_source2356 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_accumulate_statement_in_pattern_source2372 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_statement_in_pattern_source2388 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entrypoint_statement_in_pattern_source2405 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_from_source_in_pattern_source2421 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_OVER_in_over_clause2449 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_over_elements_in_over_clause2452 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COMMA_in_over_clause2455 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_over_elements_in_over_clause2458 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_ID_in_over_elements2471 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
+    public static final BitSet FOLLOW_COLON_in_over_elements2473 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_over_elements2475 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_over_elements2477 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_key_in_accumulate_statement2501 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_accumulate_statement2505 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_lhs_or_in_accumulate_statement2507 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_statement2509 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_statement2517 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_statement2523 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_accumulate_statement2531 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_init_key_in_accumulate_init_clause2560 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2565 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2567 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_action_key_in_accumulate_init_clause2571 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2575 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2577 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_reverse_key_in_accumulate_init_clause2583 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2587 = new BitSet(new long[]{0x0000000000000000L,0x0000000041000000L});
+    public static final BitSet FOLLOW_COMMA_in_accumulate_init_clause2589 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_result_key_in_accumulate_init_clause2595 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_init_clause2599 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause2648 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_accumulate_id_clause2652 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_collect_key_in_collect_statement2674 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_collect_statement2678 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_pattern_source_in_collect_statement2680 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_collect_statement2682 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_entry_point_key_in_entrypoint_statement2704 = new BitSet(new long[]{0x0000000000000000L,0x0000000011000000L});
+    public static final BitSet FOLLOW_entrypoint_id_in_entrypoint_statement2706 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entrypoint_id2729 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_STRING_in_entrypoint_id2742 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_source2758 = new BitSet(new long[]{0x0000000000000002L,0x0000000022000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_from_source2771 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source2778 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOT_in_expression_chain2810 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_expression_chain2812 = new BitSet(new long[]{0x0000000000000002L,0x0004000022000000L});
+    public static final BitSet FOLLOW_square_chunk_in_expression_chain2832 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_chain2854 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain2865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_binding_in_lhs_pattern2898 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_lhs_pattern2911 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_fact_binding2931 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding2937 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact_binding2944 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_fact_binding_expression_in_fact_binding2946 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact_binding2948 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression2987 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
+    public static final BitSet FOLLOW_or_key_in_fact_binding_expression2999 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_binding_expression3005 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_fact_in_fact_binding_expression3010 = new BitSet(new long[]{0x0000000000000002L,0x0000002001000000L});
+    public static final BitSet FOLLOW_pattern_type_in_fact3050 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_fact3052 = new BitSet(new long[]{0x0000000000000000L,0x00000000A1000000L});
+    public static final BitSet FOLLOW_constraints_in_fact3054 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_fact3057 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constraint_in_constraints3082 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_COMMA_in_constraints3086 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_constraint_in_constraints3089 = new BitSet(new long[]{0x0000000000000002L,0x0000000040000000L});
+    public static final BitSet FOLLOW_or_constr_in_constraint3103 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr3114 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_constr3118 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_and_constr_in_or_constr3121 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr3136 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_constr3140 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_unary_constr_in_and_constr3143 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_eval_key_in_unary_constr3164 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_unary_constr3167 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_field_constraint_in_unary_constr3172 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_unary_constr3177 = new BitSet(new long[]{0x0000000000000000L,0x0000000021000000L});
+    public static final BitSet FOLLOW_or_constr_in_unary_constr3180 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_unary_constr3182 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_label_in_field_constraint3196 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint3198 = new BitSet(new long[]{0x0000000000000002L,0x0000FF0021000000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3202 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ARROW_in_field_constraint3208 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_paren_chunk_in_field_constraint3210 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_field_constraint3264 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_field_constraint3266 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_label3290 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
+    public static final BitSet FOLLOW_COLON_in_label3292 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3308 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_or_restr_connective3316 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
+    public static final BitSet FOLLOW_and_restr_connective_in_or_restr_connective3319 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3334 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_and_restr_connective3342 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
+    public static final BitSet FOLLOW_constraint_expression_in_and_restr_connective3345 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_compound_operator_in_constraint_expression3367 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_simple_operator_in_constraint_expression3372 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_constraint_expression3377 = new BitSet(new long[]{0x0000000000000000L,0x0000FE0021000000L});
+    public static final BitSet FOLLOW_or_restr_connective_in_constraint_expression3380 = new BitSet(new long[]{0x0000000000000000L,0x0000000080000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_constraint_expression3382 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EQUAL_in_simple_operator3394 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_GREATER_in_simple_operator3400 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_simple_operator3406 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_LESS_in_simple_operator3412 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_simple_operator3418 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_simple_operator3424 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_not_key_in_simple_operator3430 = new BitSet(new long[]{0x0000000000000000L,0x0000800001000000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator3433 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3436 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator3439 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3442 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3446 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3451 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3454 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3457 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_contains_key_in_simple_operator3463 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_excludes_key_in_simple_operator3469 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_matches_key_in_simple_operator3475 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_soundslike_key_in_simple_operator3481 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_memberof_key_in_simple_operator3487 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3493 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_GRAVE_ACCENT_in_simple_operator3499 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_simple_operator3502 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_simple_operator3505 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_expression_value_in_simple_operator3509 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3524 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_not_key_in_compound_operator3529 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_in_key_in_compound_operator3531 = new BitSet(new long[]{0x0000000000000000L,0x0000000020000000L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_compound_operator3536 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3539 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
+    public static final BitSet FOLLOW_COMMA_in_compound_operator3543 = new BitSet(new long[]{0x0000000000000000L,0x0003001831000000L});
+    public static final BitSet FOLLOW_expression_value_in_compound_operator3546 = new BitSet(new long[]{0x0000000000000000L,0x00000000C0000000L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_compound_operator3551 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_path_in_expression_value3562 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_literal_constraint_in_expression_value3567 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_in_expression_value3573 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_set_in_literal_constraint0 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_pattern_type3365 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
-    public static final BitSet FOLLOW_DOT_in_pattern_type3371 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_pattern_type3375 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
-    public static final BitSet FOLLOW_dimension_definition_in_pattern_type3390 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_ID_in_data_type3416 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
-    public static final BitSet FOLLOW_DOT_in_data_type3420 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_data_type3422 = new BitSet(new long[]{0x0000000000000002L,0x0000200000800000L});
-    public static final BitSet FOLLOW_dimension_definition_in_data_type3427 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3453 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3455 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path3466 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_DOT_in_accessor_path3470 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_accessor_element_in_accessor_path3472 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
-    public static final BitSet FOLLOW_ID_in_accessor_element3496 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_square_chunk_in_accessor_element3498 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3527 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3546 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_rhs_chunk_data3550 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_END_in_rhs_chunk_data3556 = new BitSet(new long[]{0x0000000000000002L,0x0000000000200000L});
-    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3558 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3575 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3594 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_curly_chunk_data3597 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3611 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3616 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3632 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3652 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_paren_chunk_data3655 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3669 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3674 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3691 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data3710 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_set_in_square_chunk_data3713 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data3727 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0x0FFFFFFFFFFFFFFFL});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data3732 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key3751 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_effective_key3753 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_date_effective_key3755 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key3781 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_date_expires_key3783 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_date_expires_key3785 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key3811 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3813 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key3815 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_lock_on_active_key3817 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_lock_on_active_key3819 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key3845 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_no_loop_key3847 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_no_loop_key3849 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key3875 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_auto_focus_key3877 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_auto_focus_key3879 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key3905 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_activation_group_key3907 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_activation_group_key3909 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key3935 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_agenda_group_key3937 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_agenda_group_key3939 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3965 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key3967 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_ruleflow_group_key3969 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_duration_key3994 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_package_key4016 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_import_key4038 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_dialect_key4060 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_salience_key4082 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_enabled_key4104 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_attributes_key4126 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_when_key4148 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_rule_key4170 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_template_key4192 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_query_key4214 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_declare_key4236 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_function_key4258 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_global_key4280 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_eval_key4302 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_contains_key4324 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_matches_key4346 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_excludes_key4368 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_soundslike_key4390 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_memberof_key4412 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_not_key4434 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_in_key4456 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_or_key4478 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_and_key4500 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_exists_key4522 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_forall_key4544 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_from_key4566 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key4589 = new BitSet(new long[]{0x0000000000000000L,0x0004000000000000L});
-    public static final BitSet FOLLOW_MISC_in_entry_point_key4591 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_ID_in_entry_point_key4593 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_accumulate_key4618 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_init_key4640 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_action_key4662 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_reverse_key4684 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_result_key4706 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ID_in_collect_key4728 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred11638 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_or_key_in_synpred11640 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_or_key_in_synpred21687 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred21689 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred31740 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_and_key_in_synpred31742 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred41789 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred41791 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SEMICOLON_in_synpred51893 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred61925 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_or_key_in_synpred61928 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred61930 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred72012 = new BitSet(new long[]{0x0000000000000000L,0x0000000000400000L});
-    public static final BitSet FOLLOW_or_key_in_synpred72015 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_and_key_in_synpred72017 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred82513 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred92574 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred102596 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred113060 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred123086 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_pattern_type3617 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
+    public static final BitSet FOLLOW_DOT_in_pattern_type3623 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_pattern_type3627 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_pattern_type3642 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_ID_in_data_type3668 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
+    public static final BitSet FOLLOW_DOT_in_data_type3672 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_data_type3674 = new BitSet(new long[]{0x0000000000000002L,0x0004000002000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type3679 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition3705 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition3707 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3718 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_DOT_in_accessor_path3722 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_accessor_element_in_accessor_path3724 = new BitSet(new long[]{0x0000000000000002L,0x0000000002000000L});
+    public static final BitSet FOLLOW_ID_in_accessor_element3748 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_square_chunk_in_accessor_element3750 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_rhs_chunk_data_in_rhs_chunk3779 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_THEN_in_rhs_chunk_data3798 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_set_in_rhs_chunk_data3802 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_END_in_rhs_chunk_data3808 = new BitSet(new long[]{0x0000000000000002L,0x0000000000800000L});
+    public static final BitSet FOLLOW_SEMICOLON_in_rhs_chunk_data3810 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk3827 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_CURLY_in_curly_chunk_data3846 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_set_in_curly_chunk_data3849 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_curly_chunk_data_in_curly_chunk_data3863 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_RIGHT_CURLY_in_curly_chunk_data3868 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk3884 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_paren_chunk_data3904 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_set_in_paren_chunk_data3907 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_paren_chunk_data_in_paren_chunk_data3921 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_RIGHT_PAREN_in_paren_chunk_data3926 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk3943 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_square_chunk_data3962 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_set_in_square_chunk_data3965 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_square_chunk_data_in_square_chunk_data3979 = new BitSet(new long[]{0xFFFFFFFFFFFFFFF0L,0xFFFFFFFFFFFFFFFFL,0x0000000000000001L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_square_chunk_data3984 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key4003 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_effective_key4005 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_date_effective_key4007 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key4033 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_date_expires_key4035 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_date_expires_key4037 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key4063 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key4065 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key4067 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_lock_on_active_key4069 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_lock_on_active_key4071 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key4097 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_no_loop_key4099 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_no_loop_key4101 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key4127 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_auto_focus_key4129 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_auto_focus_key4131 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key4157 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_activation_group_key4159 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_activation_group_key4161 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key4187 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_agenda_group_key4189 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_agenda_group_key4191 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key4217 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_ruleflow_group_key4219 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_ruleflow_group_key4221 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_duration_key4246 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_package_key4268 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_import_key4290 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_dialect_key4312 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_salience_key4334 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_enabled_key4356 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_attributes_key4378 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_when_key4400 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_rule_key4422 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_template_key4444 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_query_key4466 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_declare_key4488 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_function_key4510 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_global_key4532 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_eval_key4554 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_contains_key4576 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_matches_key4598 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_excludes_key4620 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_soundslike_key4642 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_memberof_key4664 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_not_key4686 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_in_key4708 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_or_key4730 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_and_key4752 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_exists_key4774 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_forall_key4796 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_from_key4818 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4841 = new BitSet(new long[]{0x0000000000000000L,0x0080000000000000L});
+    public static final BitSet FOLLOW_MISC_in_entry_point_key4843 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_entry_point_key4845 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_accumulate_key4870 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_init_key4892 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_action_key4914 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_reverse_key4936 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_result_key4958 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_collect_key4980 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred11833 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_or_key_in_synpred11835 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_or_key_in_synpred21882 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred21884 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred31935 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_and_key_in_synpred31937 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred41984 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred41986 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMICOLON_in_synpred52088 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred62120 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_or_key_in_synpred62123 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred62125 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred72207 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_or_key_in_synpred72210 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_and_key_in_synpred72212 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred82765 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_synpred92826 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LEFT_PAREN_in_synpred102848 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_synpred113312 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_synpred123338 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DescrBuilderTree.java	2008-07-22 14:14:46 UTC (rev 21169)
@@ -1,29 +1,32 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g 2008-06-05 13:52:43
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g 2008-07-22 10:02:21
 
 	package org.drools.lang;
 
 	import java.util.HashMap;
 	import java.util.Map;
 	import java.util.LinkedList;
+	import org.drools.lang.descr.AccessorDescr;
+	import org.drools.lang.descr.AccumulateDescr;
+	import org.drools.lang.descr.AndDescr;
+	import org.drools.lang.descr.AttributeDescr;
+	import org.drools.lang.descr.BaseDescr;
+	import org.drools.lang.descr.BehaviorDescr;
+	import org.drools.lang.descr.DeclarativeInvokerDescr;
 	import org.drools.lang.descr.DescrFactory;
-	import org.drools.lang.descr.BaseDescr;
-	import org.drools.lang.descr.PackageDescr;
-	import org.drools.lang.descr.AttributeDescr;
-	import org.drools.lang.descr.ImportDescr;
+	import org.drools.lang.descr.FactTemplateDescr;
+	import org.drools.lang.descr.FieldConstraintDescr;
+	import org.drools.lang.descr.FieldTemplateDescr;
+	import org.drools.lang.descr.FromDescr;
+	import org.drools.lang.descr.FunctionDescr;
 	import org.drools.lang.descr.FunctionImportDescr;
 	import org.drools.lang.descr.GlobalDescr;
-	import org.drools.lang.descr.FunctionDescr;
-	import org.drools.lang.descr.FactTemplateDescr;
-	import org.drools.lang.descr.FieldTemplateDescr;
-	import org.drools.lang.descr.AndDescr;
+	import org.drools.lang.descr.ImportDescr;
+	import org.drools.lang.descr.PackageDescr;
+	import org.drools.lang.descr.PatternSourceDescr;
 	import org.drools.lang.descr.QueryDescr;
 	import org.drools.lang.descr.RuleDescr;
-	import org.drools.lang.descr.PatternSourceDescr;
-	import org.drools.lang.descr.AccumulateDescr;
-	import org.drools.lang.descr.AccessorDescr;
-	import org.drools.lang.descr.DeclarativeInvokerDescr;
-	import org.drools.lang.descr.FromDescr;
-	import org.drools.lang.descr.FieldConstraintDescr;
+	import org.drools.lang.descr.TypeDeclarationDescr;
+	import org.drools.lang.descr.TypeFieldDescr;
 
 
 import org.antlr.runtime.*;
@@ -33,129 +36,134 @@
 
 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_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", "GRAVE_ACCENT", "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_TYPE_DECLARE_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_BEHAVIOR", "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", "AT", "COLON", "EQUALS", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "OVER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "GRAVE_ACCENT", "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=92;
-    public static final int VT_PATTERN_TYPE=37;
-    public static final int VT_ACCUMULATE_ID_CLAUSE=26;
-    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=118;
-    public static final int VK_ATTRIBUTES=55;
-    public static final int VT_EXPRESSION_CHAIN=28;
-    public static final int VK_ACCUMULATE=79;
-    public static final int MISC=114;
-    public static final int VT_AND_PREFIX=21;
-    public static final int VK_QUERY=61;
-    public static final int THEN=111;
-    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=38;
-    public static final int LEFT_SQUARE=109;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=121;
-    public static final int VT_DATA_TYPE=36;
-    public static final int VK_MATCHES=67;
+    public static final int COMMA=94;
+    public static final int VT_PATTERN_TYPE=39;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=28;
+    public static final int VK_DIALECT=54;
+    public static final int VK_FUNCTION=65;
+    public static final int END=91;
+    public static final int HexDigit=123;
+    public static final int VK_ATTRIBUTES=57;
+    public static final int VT_EXPRESSION_CHAIN=30;
+    public static final int VK_ACCUMULATE=81;
+    public static final int MISC=119;
+    public static final int VT_AND_PREFIX=23;
+    public static final int VK_QUERY=63;
+    public static final int THEN=116;
+    public static final int VK_AUTO_FOCUS=49;
+    public static final int DOT=89;
+    public static final int VK_IMPORT=60;
+    public static final int VT_SLOT=15;
+    public static final int VT_PACKAGE_ID=40;
+    public static final int LEFT_SQUARE=114;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=126;
+    public static final int VT_DATA_TYPE=38;
+    public static final int VK_MATCHES=69;
     public static final int VT_FACT=6;
-    public static final int LEFT_CURLY=112;
-    public static final int LEFT_PAREN=91;
-    public static final int DOUBLE_AMPER=98;
+    public static final int LEFT_CURLY=117;
+    public static final int AT=96;
+    public static final int LEFT_PAREN=93;
+    public static final int DOUBLE_AMPER=102;
     public static final int VT_QUERY_ID=9;
-    public static final int VT_ACCESSOR_PATH=34;
+    public static final int VT_ACCESSOR_PATH=36;
     public static final int VT_LABEL=8;
-    public static final int VT_ENTRYPOINT_ID=12;
-    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=116;
-    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_GLOBAL=64;
-    public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
-    public static final int VK_REVERSE=82;
-    public static final int GRAVE_ACCENT=106;
-    public static final int VK_DURATION=51;
-    public static final int VT_SQUARE_CHUNK=18;
-    public static final int VK_FORALL=77;
+    public static final int VT_ENTRYPOINT_ID=13;
+    public static final int VK_SOUNDSLIKE=71;
+    public static final int VK_SALIENCE=55;
+    public static final int VT_FIELD=35;
+    public static final int WS=121;
+    public static final int OVER=103;
+    public static final int VK_AND=77;
+    public static final int STRING=92;
+    public static final int VT_ACCESSOR_ELEMENT=37;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=27;
+    public static final int VK_GLOBAL=66;
+    public static final int VK_REVERSE=84;
+    public static final int VT_BEHAVIOR=21;
+    public static final int GRAVE_ACCENT=111;
+    public static final int VK_DURATION=53;
+    public static final int VT_SQUARE_CHUNK=19;
+    public static final int VK_FORALL=79;
+    public static final int VT_PAREN_CHUNK=20;
     public static final int VT_COMPILATION_UNIT=4;
-    public static final int VT_PAREN_CHUNK=19;
-    public static final int VK_ENABLED=54;
-    public static final int VK_RESULT=83;
-    public static final int UnicodeEscape=119;
-    public static final int VK_PACKAGE=59;
-    public static final int VT_RULE_ID=11;
-    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=108;
-    public static final int COLON=94;
-    public static final int MULTI_LINE_COMMENT=123;
-    public static final int VT_RULE_ATTRIBUTES=15;
-    public static final int RIGHT_SQUARE=110;
-    public static final int VK_AGENDA_GROUP=49;
-    public static final int VT_FACT_OR=31;
-    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=107;
-    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=97;
-    public static final int LESS=103;
-    public static final int VT_PATTERN=29;
-    public static final int VK_DATE_EFFECTIVE=43;
-    public static final int EscapeSequence=117;
-    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=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=86;
-    public static final int NOT_EQUAL=105;
-    public static final int RIGHT_CURLY=113;
-    public static final int VK_ENTRY_POINT=71;
-    public static final int VT_AND_INFIX=23;
-    public static final int VT_PARAM_LIST=42;
-    public static final int BOOL=95;
-    public static final int VT_FROM_SOURCE=27;
-    public static final int VK_CONTAINS=66;
-    public static final int VK_LOCK_ON_ACTIVE=45;
+    public static final int VK_ENABLED=56;
+    public static final int EQUALS=98;
+    public static final int VK_RESULT=85;
+    public static final int UnicodeEscape=124;
+    public static final int VK_PACKAGE=61;
+    public static final int VT_RULE_ID=12;
+    public static final int EQUAL=105;
+    public static final int VK_NO_LOOP=48;
+    public static final int SEMICOLON=87;
+    public static final int VK_TEMPLATE=62;
+    public static final int VT_AND_IMPLICIT=22;
+    public static final int NULL=113;
+    public static final int COLON=97;
+    public static final int MULTI_LINE_COMMENT=128;
+    public static final int VT_RULE_ATTRIBUTES=16;
+    public static final int RIGHT_SQUARE=115;
+    public static final int VK_AGENDA_GROUP=51;
+    public static final int VT_FACT_OR=33;
+    public static final int VK_NOT=74;
+    public static final int VK_DATE_EXPIRES=46;
+    public static final int ARROW=104;
+    public static final int FLOAT=112;
+    public static final int VT_SLOT_ID=14;
+    public static final int VT_CURLY_CHUNK=18;
+    public static final int VT_OR_PREFIX=24;
+    public static final int DOUBLE_PIPE=101;
+    public static final int LESS=108;
+    public static final int VT_TYPE_DECLARE_ID=11;
+    public static final int VT_PATTERN=31;
+    public static final int VK_DATE_EFFECTIVE=45;
+    public static final int EscapeSequence=122;
+    public static final int VK_EXISTS=78;
+    public static final int INT=100;
+    public static final int VT_BIND_FIELD=34;
+    public static final int VK_RULE=59;
+    public static final int VK_EVAL=67;
+    public static final int VK_COLLECT=86;
+    public static final int GREATER=106;
+    public static final int VT_FACT_BINDING=32;
+    public static final int ID=88;
+    public static final int NOT_EQUAL=110;
+    public static final int RIGHT_CURLY=118;
+    public static final int VK_ENTRY_POINT=73;
+    public static final int VT_PARAM_LIST=44;
+    public static final int VT_AND_INFIX=25;
+    public static final int BOOL=99;
+    public static final int VT_FROM_SOURCE=29;
+    public static final int VK_CONTAINS=68;
+    public static final int VK_LOCK_ON_ACTIVE=47;
     public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VK_IN=73;
-    public static final int VT_RHS_CHUNK=16;
-    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=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 VK_IN=75;
+    public static final int VT_RHS_CHUNK=17;
+    public static final int VK_MEMBEROF=72;
+    public static final int GREATER_EQUAL=107;
+    public static final int VT_OR_INFIX=26;
+    public static final int DOT_STAR=90;
+    public static final int VK_OR=76;
+    public static final int VT_GLOBAL_ID=42;
+    public static final int LESS_EQUAL=109;
+    public static final int VK_WHEN=58;
+    public static final int VK_RULEFLOW_GROUP=52;
+    public static final int VT_FUNCTION_ID=43;
     public static final int EOF=-1;
     public static final int VT_CONSTRAINTS=7;
-    public static final int VT_IMPORT_ID=39;
-    public static final int EOL=115;
-    public static final int VK_INIT=80;
-    public static final int VK_ACTIVATION_GROUP=48;
-    public static final int OctalEscape=120;
-    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_IMPORT_ID=41;
+    public static final int EOL=120;
+    public static final int VK_INIT=82;
+    public static final int VK_ACTIVATION_GROUP=50;
+    public static final int OctalEscape=125;
+    public static final int VK_ACTION=83;
+    public static final int VK_FROM=80;
+    public static final int VK_EXCLUDES=70;
+    public static final int RIGHT_PAREN=95;
     public static final int VT_TEMPLATE_ID=10;
-    public static final int VK_DECLARE=62;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=122;
+    public static final int VK_DECLARE=64;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=127;
 
         public DescrBuilderTree(TreeNodeStream input) {
             super(input);
@@ -163,7 +171,7 @@
         
 
     public String[] getTokenNames() { return tokenNames; }
-    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g"; }
+    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g"; }
 
 
     	DescrFactory factory = new DescrFactory();
@@ -176,11 +184,11 @@
 
 
     // $ANTLR start compilation_unit
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:45:1: compilation_unit : ^( VT_COMPILATION_UNIT package_statement ( statement )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:48:1: compilation_unit : ^( VT_COMPILATION_UNIT package_statement ( statement )* ) ;
     public final void compilation_unit() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:46:2: ( ^( VT_COMPILATION_UNIT package_statement ( statement )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:46:4: ^( VT_COMPILATION_UNIT package_statement ( statement )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:49:2: ( ^( VT_COMPILATION_UNIT package_statement ( statement )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:49:4: ^( VT_COMPILATION_UNIT package_statement ( statement )* )
             {
             match(input,VT_COMPILATION_UNIT,FOLLOW_VT_COMPILATION_UNIT_in_compilation_unit49); 
 
@@ -190,20 +198,20 @@
                 package_statement();
                 _fsp--;
 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:46:44: ( statement )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:49:44: ( statement )*
                 loop1:
                 do {
                     int alt1=2;
                     int LA1_0 = input.LA(1);
 
-                    if ( (LA1_0==VT_FUNCTION_IMPORT||(LA1_0>=VK_DATE_EFFECTIVE && LA1_0<=VK_ENABLED)||(LA1_0>=VK_RULE && LA1_0<=VK_IMPORT)||(LA1_0>=VK_TEMPLATE && LA1_0<=VK_QUERY)||(LA1_0>=VK_FUNCTION && LA1_0<=VK_GLOBAL)) ) {
+                    if ( (LA1_0==VT_FUNCTION_IMPORT||(LA1_0>=VK_DATE_EFFECTIVE && LA1_0<=VK_ENABLED)||(LA1_0>=VK_RULE && LA1_0<=VK_IMPORT)||(LA1_0>=VK_TEMPLATE && LA1_0<=VK_GLOBAL)) ) {
                         alt1=1;
                     }
 
 
                     switch (alt1) {
                 	case 1 :
-                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:46:44: statement
+                	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:49:44: statement
                 	    {
                 	    pushFollow(FOLLOW_statement_in_compilation_unit53);
                 	    statement();
@@ -237,7 +245,7 @@
 
 
     // $ANTLR start package_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:49:1: package_statement returns [String packageName] : ( ^( VK_PACKAGE packageId= package_id ) | );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:52:1: package_statement returns [String packageName] : ( ^( VK_PACKAGE packageId= package_id ) | );
     public final String package_statement() throws RecognitionException {
         String packageName = null;
 
@@ -245,25 +253,25 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:50:2: ( ^( VK_PACKAGE packageId= package_id ) | )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:53:2: ( ^( VK_PACKAGE packageId= package_id ) | )
             int alt2=2;
             int LA2_0 = input.LA(1);
 
             if ( (LA2_0==VK_PACKAGE) ) {
                 alt2=1;
             }
-            else if ( (LA2_0==UP||LA2_0==VT_FUNCTION_IMPORT||(LA2_0>=VK_DATE_EFFECTIVE && LA2_0<=VK_ENABLED)||(LA2_0>=VK_RULE && LA2_0<=VK_IMPORT)||(LA2_0>=VK_TEMPLATE && LA2_0<=VK_QUERY)||(LA2_0>=VK_FUNCTION && LA2_0<=VK_GLOBAL)) ) {
+            else if ( (LA2_0==UP||LA2_0==VT_FUNCTION_IMPORT||(LA2_0>=VK_DATE_EFFECTIVE && LA2_0<=VK_ENABLED)||(LA2_0>=VK_RULE && LA2_0<=VK_IMPORT)||(LA2_0>=VK_TEMPLATE && LA2_0<=VK_GLOBAL)) ) {
                 alt2=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("49:1: package_statement returns [String packageName] : ( ^( VK_PACKAGE packageId= package_id ) | );", 2, 0, input);
+                    new NoViableAltException("52:1: package_statement returns [String packageName] : ( ^( VK_PACKAGE packageId= package_id ) | );", 2, 0, input);
 
                 throw nvae;
             }
             switch (alt2) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:50:4: ^( VK_PACKAGE packageId= package_id )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:53:4: ^( VK_PACKAGE packageId= package_id )
                     {
                     match(input,VK_PACKAGE,FOLLOW_VK_PACKAGE_in_package_statement71); 
 
@@ -280,7 +288,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:54:2: 
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:57:2: 
                     {
                     	this.packageDescr = factory.createPackage(null);	
                     		packageName = "";	
@@ -302,7 +310,7 @@
 
 
     // $ANTLR start package_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:58:1: package_id returns [List idList] : ^( VT_PACKAGE_ID (tempList+= ID )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:61:1: package_id returns [List idList] : ^( VT_PACKAGE_ID (tempList+= ID )+ ) ;
     public final List package_id() throws RecognitionException {
         List idList = null;
 
@@ -310,13 +318,13 @@
         List list_tempList=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:59:2: ( ^( VT_PACKAGE_ID (tempList+= ID )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:59:4: ^( VT_PACKAGE_ID (tempList+= ID )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:62:2: ( ^( VT_PACKAGE_ID (tempList+= ID )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:62:4: ^( VT_PACKAGE_ID (tempList+= ID )+ )
             {
             match(input,VT_PACKAGE_ID,FOLLOW_VT_PACKAGE_ID_in_package_id102); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:59:28: (tempList+= ID )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:62:28: (tempList+= ID )+
             int cnt3=0;
             loop3:
             do {
@@ -330,7 +338,7 @@
 
                 switch (alt3) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:59:28: tempList+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:62:28: tempList+= ID
             	    {
             	    tempList=(DroolsTree)input.LT(1);
             	    match(input,ID,FOLLOW_ID_in_package_id106); 
@@ -369,7 +377,7 @@
 
 
     // $ANTLR start statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:63:1: statement : (a= rule_attribute | fi= function_import_statement | is= import_statement | gl= global | fn= function | tp= template | rl= rule | qr= query );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:66:1: statement : (a= rule_attribute | fi= function_import_statement | is= import_statement | gl= global | fn= function | tp= template | rl= rule | qr= query | td= type_declaration );
     public final void statement() throws RecognitionException {
         AttributeDescr a = null;
 
@@ -387,10 +395,12 @@
 
         query_return qr = null;
 
+        TypeDeclarationDescr td = null;
 
+
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:64:2: (a= rule_attribute | fi= function_import_statement | is= import_statement | gl= global | fn= function | tp= template | rl= rule | qr= query )
-            int alt4=8;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:67:2: (a= rule_attribute | fi= function_import_statement | is= import_statement | gl= global | fn= function | tp= template | rl= rule | qr= query | td= type_declaration )
+            int alt4=9;
             switch ( input.LA(1) ) {
             case VK_DATE_EFFECTIVE:
             case VK_DATE_EXPIRES:
@@ -443,16 +453,21 @@
                 alt4=8;
                 }
                 break;
+            case VK_DECLARE:
+                {
+                alt4=9;
+                }
+                break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("63:1: statement : (a= rule_attribute | fi= function_import_statement | is= import_statement | gl= global | fn= function | tp= template | rl= rule | qr= query );", 4, 0, input);
+                    new NoViableAltException("66:1: statement : (a= rule_attribute | fi= function_import_statement | is= import_statement | gl= global | fn= function | tp= template | rl= rule | qr= query | td= type_declaration );", 4, 0, input);
 
                 throw nvae;
             }
 
             switch (alt4) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:64:4: a= rule_attribute
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:67:4: a= rule_attribute
                     {
                     pushFollow(FOLLOW_rule_attribute_in_statement124);
                     a=rule_attribute();
@@ -463,7 +478,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:66:4: fi= function_import_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:69:4: fi= function_import_statement
                     {
                     pushFollow(FOLLOW_function_import_statement_in_statement134);
                     fi=function_import_statement();
@@ -474,7 +489,7 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:68:4: is= import_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:71:4: is= import_statement
                     {
                     pushFollow(FOLLOW_import_statement_in_statement144);
                     is=import_statement();
@@ -485,7 +500,7 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:70:4: gl= global
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:73:4: gl= global
                     {
                     pushFollow(FOLLOW_global_in_statement155);
                     gl=global();
@@ -496,7 +511,7 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:72:4: fn= function
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:75:4: fn= function
                     {
                     pushFollow(FOLLOW_function_in_statement165);
                     fn=function();
@@ -507,7 +522,7 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:74:4: tp= template
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:77:4: tp= template
                     {
                     pushFollow(FOLLOW_template_in_statement175);
                     tp=template();
@@ -518,7 +533,7 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:76:4: rl= rule
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:79:4: rl= rule
                     {
                     pushFollow(FOLLOW_rule_in_statement185);
                     rl=rule();
@@ -529,7 +544,7 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:78:4: qr= query
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:81:4: qr= query
                     {
                     pushFollow(FOLLOW_query_in_statement195);
                     qr=query();
@@ -539,7 +554,18 @@
 
                     }
                     break;
+                case 9 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:83:4: td= type_declaration
+                    {
+                    pushFollow(FOLLOW_type_declaration_in_statement205);
+                    td=type_declaration();
+                    _fsp--;
 
+                    	this.packageDescr.addTypeDeclaration(td);	
+
+                    }
+                    break;
+
             }
         }
         catch (RecognitionException re) {
@@ -554,7 +580,7 @@
 
 
     // $ANTLR start import_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:82:1: import_statement returns [ImportDescr importDescr] : ^(importStart= VK_IMPORT importId= import_name ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:87:1: import_statement returns [ImportDescr importDescr] : ^(importStart= VK_IMPORT importId= import_name ) ;
     public final ImportDescr import_statement() throws RecognitionException {
         ImportDescr importDescr = null;
 
@@ -563,14 +589,14 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:83:2: ( ^(importStart= VK_IMPORT importId= import_name ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:83:4: ^(importStart= VK_IMPORT importId= import_name )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:88:2: ( ^(importStart= VK_IMPORT importId= import_name ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:88:4: ^(importStart= VK_IMPORT importId= import_name )
             {
             importStart=(DroolsTree)input.LT(1);
-            match(input,VK_IMPORT,FOLLOW_VK_IMPORT_in_import_statement216); 
+            match(input,VK_IMPORT,FOLLOW_VK_IMPORT_in_import_statement226); 
 
             match(input, Token.DOWN, null); 
-            pushFollow(FOLLOW_import_name_in_import_statement220);
+            pushFollow(FOLLOW_import_name_in_import_statement230);
             importId=import_name();
             _fsp--;
 
@@ -593,7 +619,7 @@
 
 
     // $ANTLR start function_import_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:87:1: function_import_statement returns [FunctionImportDescr functionImportDescr] : ^(importStart= VT_FUNCTION_IMPORT VK_FUNCTION importId= import_name ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:92:1: function_import_statement returns [FunctionImportDescr functionImportDescr] : ^(importStart= VT_FUNCTION_IMPORT VK_FUNCTION importId= import_name ) ;
     public final FunctionImportDescr function_import_statement() throws RecognitionException {
         FunctionImportDescr functionImportDescr = null;
 
@@ -602,15 +628,15 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:88:2: ( ^(importStart= VT_FUNCTION_IMPORT VK_FUNCTION importId= import_name ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:88:4: ^(importStart= VT_FUNCTION_IMPORT VK_FUNCTION importId= import_name )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:93:2: ( ^(importStart= VT_FUNCTION_IMPORT VK_FUNCTION importId= import_name ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:93:4: ^(importStart= VT_FUNCTION_IMPORT VK_FUNCTION importId= import_name )
             {
             importStart=(DroolsTree)input.LT(1);
-            match(input,VT_FUNCTION_IMPORT,FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement242); 
+            match(input,VT_FUNCTION_IMPORT,FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement252); 
 
             match(input, Token.DOWN, null); 
-            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function_import_statement244); 
-            pushFollow(FOLLOW_import_name_in_function_import_statement248);
+            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function_import_statement254); 
+            pushFollow(FOLLOW_import_name_in_function_import_statement258);
             importId=import_name();
             _fsp--;
 
@@ -637,7 +663,7 @@
     };
 
     // $ANTLR start import_name
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:92:1: import_name returns [List idList, DroolsTree dotStar] : ^( VT_IMPORT_ID (tempList+= ID )+ (tempDotStar= DOT_STAR )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:97:1: import_name returns [List idList, DroolsTree dotStar] : ^( VT_IMPORT_ID (tempList+= ID )+ (tempDotStar= DOT_STAR )? ) ;
     public final import_name_return import_name() throws RecognitionException {
         import_name_return retval = new import_name_return();
         retval.start = input.LT(1);
@@ -647,13 +673,13 @@
         List list_tempList=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:93:2: ( ^( VT_IMPORT_ID (tempList+= ID )+ (tempDotStar= DOT_STAR )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:93:4: ^( VT_IMPORT_ID (tempList+= ID )+ (tempDotStar= DOT_STAR )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:98:2: ( ^( VT_IMPORT_ID (tempList+= ID )+ (tempDotStar= DOT_STAR )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:98:4: ^( VT_IMPORT_ID (tempList+= ID )+ (tempDotStar= DOT_STAR )? )
             {
-            match(input,VT_IMPORT_ID,FOLLOW_VT_IMPORT_ID_in_import_name267); 
+            match(input,VT_IMPORT_ID,FOLLOW_VT_IMPORT_ID_in_import_name277); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:93:27: (tempList+= ID )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:98:27: (tempList+= ID )+
             int cnt5=0;
             loop5:
             do {
@@ -667,10 +693,10 @@
 
                 switch (alt5) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:93:27: tempList+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:98:27: tempList+= ID
             	    {
             	    tempList=(DroolsTree)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_import_name271); 
+            	    match(input,ID,FOLLOW_ID_in_import_name281); 
             	    if (list_tempList==null) list_tempList=new ArrayList();
             	    list_tempList.add(tempList);
 
@@ -687,7 +713,7 @@
                 cnt5++;
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:93:44: (tempDotStar= DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:98:44: (tempDotStar= DOT_STAR )?
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -696,10 +722,10 @@
             }
             switch (alt6) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:93:44: tempDotStar= DOT_STAR
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:98:44: tempDotStar= DOT_STAR
                     {
                     tempDotStar=(DroolsTree)input.LT(1);
-                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name276); 
+                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name286); 
 
                     }
                     break;
@@ -729,7 +755,7 @@
     };
 
     // $ANTLR start global
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:98:1: global returns [GlobalDescr globalDescr] : ^(start= VK_GLOBAL dt= data_type globalId= VT_GLOBAL_ID ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:103:1: global returns [GlobalDescr globalDescr] : ^(start= VK_GLOBAL dt= data_type globalId= VT_GLOBAL_ID ) ;
     public final global_return global() throws RecognitionException {
         global_return retval = new global_return();
         retval.start = input.LT(1);
@@ -740,19 +766,19 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:99:2: ( ^(start= VK_GLOBAL dt= data_type globalId= VT_GLOBAL_ID ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:99:4: ^(start= VK_GLOBAL dt= data_type globalId= VT_GLOBAL_ID )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:104:2: ( ^(start= VK_GLOBAL dt= data_type globalId= VT_GLOBAL_ID ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:104:4: ^(start= VK_GLOBAL dt= data_type globalId= VT_GLOBAL_ID )
             {
             start=(DroolsTree)input.LT(1);
-            match(input,VK_GLOBAL,FOLLOW_VK_GLOBAL_in_global299); 
+            match(input,VK_GLOBAL,FOLLOW_VK_GLOBAL_in_global309); 
 
             match(input, Token.DOWN, null); 
-            pushFollow(FOLLOW_data_type_in_global303);
+            pushFollow(FOLLOW_data_type_in_global313);
             dt=data_type();
             _fsp--;
 
             globalId=(DroolsTree)input.LT(1);
-            match(input,VT_GLOBAL_ID,FOLLOW_VT_GLOBAL_ID_in_global307); 
+            match(input,VT_GLOBAL_ID,FOLLOW_VT_GLOBAL_ID_in_global317); 
 
             match(input, Token.UP, null); 
             	retval.globalDescr = factory.createGlobal(start,dt, globalId);	
@@ -775,7 +801,7 @@
     };
 
     // $ANTLR start function
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:103:1: function returns [FunctionDescr functionDescr] : ^(start= VK_FUNCTION (dt= data_type )? functionId= VT_FUNCTION_ID params= parameters content= VT_CURLY_CHUNK ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:108:1: function returns [FunctionDescr functionDescr] : ^(start= VK_FUNCTION (dt= data_type )? functionId= VT_FUNCTION_ID params= parameters content= VT_CURLY_CHUNK ) ;
     public final function_return function() throws RecognitionException {
         function_return retval = new function_return();
         retval.start = input.LT(1);
@@ -789,14 +815,14 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:104:2: ( ^(start= VK_FUNCTION (dt= data_type )? functionId= VT_FUNCTION_ID params= parameters content= VT_CURLY_CHUNK ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:104:4: ^(start= VK_FUNCTION (dt= data_type )? functionId= VT_FUNCTION_ID params= parameters content= VT_CURLY_CHUNK )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:109:2: ( ^(start= VK_FUNCTION (dt= data_type )? functionId= VT_FUNCTION_ID params= parameters content= VT_CURLY_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:109:4: ^(start= VK_FUNCTION (dt= data_type )? functionId= VT_FUNCTION_ID params= parameters content= VT_CURLY_CHUNK )
             {
             start=(DroolsTree)input.LT(1);
-            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function329); 
+            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function339); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:104:26: (dt= data_type )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:109:26: (dt= data_type )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -805,9 +831,9 @@
             }
             switch (alt7) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:104:26: dt= data_type
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:109:26: dt= data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_function333);
+                    pushFollow(FOLLOW_data_type_in_function343);
                     dt=data_type();
                     _fsp--;
 
@@ -818,13 +844,13 @@
             }
 
             functionId=(DroolsTree)input.LT(1);
-            match(input,VT_FUNCTION_ID,FOLLOW_VT_FUNCTION_ID_in_function338); 
-            pushFollow(FOLLOW_parameters_in_function342);
+            match(input,VT_FUNCTION_ID,FOLLOW_VT_FUNCTION_ID_in_function348); 
+            pushFollow(FOLLOW_parameters_in_function352);
             params=parameters();
             _fsp--;
 
             content=(DroolsTree)input.LT(1);
-            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_function346); 
+            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_function356); 
 
             match(input, Token.UP, null); 
             	retval.functionDescr = factory.createFunction(start, dt, functionId, params, content);	
@@ -847,7 +873,7 @@
     };
 
     // $ANTLR start template
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:108:1: template returns [FactTemplateDescr factTemplateDescr] : ^(start= VK_TEMPLATE id= VT_TEMPLATE_ID (ts= template_slot )+ end= END ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:113:1: template returns [FactTemplateDescr factTemplateDescr] : ^(start= VK_TEMPLATE id= VT_TEMPLATE_ID (ts= template_slot )+ end= END ) ;
     public final template_return template() throws RecognitionException {
         template_return retval = new template_return();
         retval.start = input.LT(1);
@@ -862,16 +888,16 @@
         	List slotList = new LinkedList<FieldTemplateDescr>();
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:111:3: ( ^(start= VK_TEMPLATE id= VT_TEMPLATE_ID (ts= template_slot )+ end= END ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:111:5: ^(start= VK_TEMPLATE id= VT_TEMPLATE_ID (ts= template_slot )+ end= END )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:116:3: ( ^(start= VK_TEMPLATE id= VT_TEMPLATE_ID (ts= template_slot )+ end= END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:116:5: ^(start= VK_TEMPLATE id= VT_TEMPLATE_ID (ts= template_slot )+ end= END )
             {
             start=(DroolsTree)input.LT(1);
-            match(input,VK_TEMPLATE,FOLLOW_VK_TEMPLATE_in_template371); 
+            match(input,VK_TEMPLATE,FOLLOW_VK_TEMPLATE_in_template381); 
 
             match(input, Token.DOWN, null); 
             id=(DroolsTree)input.LT(1);
-            match(input,VT_TEMPLATE_ID,FOLLOW_VT_TEMPLATE_ID_in_template375); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:112:4: (ts= template_slot )+
+            match(input,VT_TEMPLATE_ID,FOLLOW_VT_TEMPLATE_ID_in_template385); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:117:4: (ts= template_slot )+
             int cnt8=0;
             loop8:
             do {
@@ -885,9 +911,9 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:112:6: ts= template_slot
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:117:6: ts= template_slot
             	    {
-            	    pushFollow(FOLLOW_template_slot_in_template384);
+            	    pushFollow(FOLLOW_template_slot_in_template394);
             	    ts=template_slot();
             	    _fsp--;
 
@@ -906,7 +932,7 @@
             } while (true);
 
             end=(DroolsTree)input.LT(1);
-            match(input,END,FOLLOW_END_in_template392); 
+            match(input,END,FOLLOW_END_in_template402); 
 
             match(input, Token.UP, null); 
             	retval.factTemplateDescr = factory.createFactTemplate(start, id, slotList, end);	
@@ -926,7 +952,7 @@
 
 
     // $ANTLR start template_slot
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:116:1: template_slot returns [FieldTemplateDescr fieldTemplateDescr] : ^( VT_SLOT dt= data_type id= VT_SLOT_ID ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:121:1: template_slot returns [FieldTemplateDescr fieldTemplateDescr] : ^( VT_SLOT dt= data_type id= VT_SLOT_ID ) ;
     public final FieldTemplateDescr template_slot() throws RecognitionException {
         FieldTemplateDescr fieldTemplateDescr = null;
 
@@ -935,18 +961,18 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:117:2: ( ^( VT_SLOT dt= data_type id= VT_SLOT_ID ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:117:4: ^( VT_SLOT dt= data_type id= VT_SLOT_ID )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:122:2: ( ^( VT_SLOT dt= data_type id= VT_SLOT_ID ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:122:4: ^( VT_SLOT dt= data_type id= VT_SLOT_ID )
             {
-            match(input,VT_SLOT,FOLLOW_VT_SLOT_in_template_slot412); 
+            match(input,VT_SLOT,FOLLOW_VT_SLOT_in_template_slot422); 
 
             match(input, Token.DOWN, null); 
-            pushFollow(FOLLOW_data_type_in_template_slot416);
+            pushFollow(FOLLOW_data_type_in_template_slot426);
             dt=data_type();
             _fsp--;
 
             id=(DroolsTree)input.LT(1);
-            match(input,VT_SLOT_ID,FOLLOW_VT_SLOT_ID_in_template_slot420); 
+            match(input,VT_SLOT_ID,FOLLOW_VT_SLOT_ID_in_template_slot430); 
 
             match(input, Token.UP, null); 
             	fieldTemplateDescr = factory.createFieldTemplate(dt, id);	
@@ -969,7 +995,7 @@
     };
 
     // $ANTLR start query
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:121:1: query returns [QueryDescr queryDescr] : ^(start= VK_QUERY id= VT_QUERY_ID (params= parameters )? lb= lhs_block end= END ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:126:1: query returns [QueryDescr queryDescr] : ^(start= VK_QUERY id= VT_QUERY_ID (params= parameters )? lb= lhs_block end= END ) ;
     public final query_return query() throws RecognitionException {
         query_return retval = new query_return();
         retval.start = input.LT(1);
@@ -983,16 +1009,16 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:122:2: ( ^(start= VK_QUERY id= VT_QUERY_ID (params= parameters )? lb= lhs_block end= END ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:122:4: ^(start= VK_QUERY id= VT_QUERY_ID (params= parameters )? lb= lhs_block end= END )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:127:2: ( ^(start= VK_QUERY id= VT_QUERY_ID (params= parameters )? lb= lhs_block end= END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:127:4: ^(start= VK_QUERY id= VT_QUERY_ID (params= parameters )? lb= lhs_block end= END )
             {
             start=(DroolsTree)input.LT(1);
-            match(input,VK_QUERY,FOLLOW_VK_QUERY_in_query442); 
+            match(input,VK_QUERY,FOLLOW_VK_QUERY_in_query452); 
 
             match(input, Token.DOWN, null); 
             id=(DroolsTree)input.LT(1);
-            match(input,VT_QUERY_ID,FOLLOW_VT_QUERY_ID_in_query446); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:122:42: (params= parameters )?
+            match(input,VT_QUERY_ID,FOLLOW_VT_QUERY_ID_in_query456); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:127:42: (params= parameters )?
             int alt9=2;
             int LA9_0 = input.LA(1);
 
@@ -1001,9 +1027,9 @@
             }
             switch (alt9) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:122:42: params= parameters
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:127:42: params= parameters
                     {
-                    pushFollow(FOLLOW_parameters_in_query450);
+                    pushFollow(FOLLOW_parameters_in_query460);
                     params=parameters();
                     _fsp--;
 
@@ -1013,12 +1039,12 @@
 
             }
 
-            pushFollow(FOLLOW_lhs_block_in_query455);
+            pushFollow(FOLLOW_lhs_block_in_query465);
             lb=lhs_block();
             _fsp--;
 
             end=(DroolsTree)input.LT(1);
-            match(input,END,FOLLOW_END_in_query459); 
+            match(input,END,FOLLOW_END_in_query469); 
 
             match(input, Token.UP, null); 
             	retval.queryDescr = factory.createQuery(start, id, params, lb, end);	
@@ -1041,7 +1067,7 @@
     };
 
     // $ANTLR start rule
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:126:1: rule returns [RuleDescr ruleDescr] : ^(start= VK_RULE id= VT_RULE_ID (ra= rule_attributes )? (wn= when_part )? content= VT_RHS_CHUNK ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:131:1: rule returns [RuleDescr ruleDescr] : ^(start= VK_RULE id= VT_RULE_ID (ra= rule_attributes )? (wn= when_part )? content= VT_RHS_CHUNK ) ;
     public final rule_return rule() throws RecognitionException {
         rule_return retval = new rule_return();
         retval.start = input.LT(1);
@@ -1055,16 +1081,16 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:127:2: ( ^(start= VK_RULE id= VT_RULE_ID (ra= rule_attributes )? (wn= when_part )? content= VT_RHS_CHUNK ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:127:4: ^(start= VK_RULE id= VT_RULE_ID (ra= rule_attributes )? (wn= when_part )? content= VT_RHS_CHUNK )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:132:2: ( ^(start= VK_RULE id= VT_RULE_ID (ra= rule_attributes )? (wn= when_part )? content= VT_RHS_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:132:4: ^(start= VK_RULE id= VT_RULE_ID (ra= rule_attributes )? (wn= when_part )? content= VT_RHS_CHUNK )
             {
             start=(DroolsTree)input.LT(1);
-            match(input,VK_RULE,FOLLOW_VK_RULE_in_rule481); 
+            match(input,VK_RULE,FOLLOW_VK_RULE_in_rule491); 
 
             match(input, Token.DOWN, null); 
             id=(DroolsTree)input.LT(1);
-            match(input,VT_RULE_ID,FOLLOW_VT_RULE_ID_in_rule485); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:127:36: (ra= rule_attributes )?
+            match(input,VT_RULE_ID,FOLLOW_VT_RULE_ID_in_rule495); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:132:36: (ra= rule_attributes )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -1073,9 +1099,9 @@
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:127:36: ra= rule_attributes
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:132:36: ra= rule_attributes
                     {
-                    pushFollow(FOLLOW_rule_attributes_in_rule489);
+                    pushFollow(FOLLOW_rule_attributes_in_rule499);
                     ra=rule_attributes();
                     _fsp--;
 
@@ -1085,7 +1111,7 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:127:56: (wn= when_part )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:132:56: (wn= when_part )?
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -1094,9 +1120,9 @@
             }
             switch (alt11) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:127:56: wn= when_part
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:132:56: wn= when_part
                     {
-                    pushFollow(FOLLOW_when_part_in_rule494);
+                    pushFollow(FOLLOW_when_part_in_rule504);
                     wn=when_part();
                     _fsp--;
 
@@ -1107,7 +1133,7 @@
             }
 
             content=(DroolsTree)input.LT(1);
-            match(input,VT_RHS_CHUNK,FOLLOW_VT_RHS_CHUNK_in_rule499); 
+            match(input,VT_RHS_CHUNK,FOLLOW_VT_RHS_CHUNK_in_rule509); 
 
             match(input, Token.UP, null); 
             	retval.ruleDescr = factory.createRule(start, id, ra, wn, content);	
@@ -1127,7 +1153,7 @@
 
 
     // $ANTLR start when_part
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:131:1: when_part returns [AndDescr andDescr] : VK_WHEN lh= lhs_block ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:136:1: when_part returns [AndDescr andDescr] : VK_WHEN lh= lhs_block ;
     public final AndDescr when_part() throws RecognitionException {
         AndDescr andDescr = null;
 
@@ -1135,11 +1161,11 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:132:2: ( VK_WHEN lh= lhs_block )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:132:4: VK_WHEN lh= lhs_block
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:137:2: ( VK_WHEN lh= lhs_block )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:137:4: VK_WHEN lh= lhs_block
             {
-            match(input,VK_WHEN,FOLLOW_VK_WHEN_in_when_part518); 
-            pushFollow(FOLLOW_lhs_block_in_when_part522);
+            match(input,VK_WHEN,FOLLOW_VK_WHEN_in_when_part528); 
+            pushFollow(FOLLOW_lhs_block_in_when_part532);
             lh=lhs_block();
             _fsp--;
 
@@ -1160,7 +1186,7 @@
 
 
     // $ANTLR start rule_attributes
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:136:1: rule_attributes returns [List attrList] : ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? (rl= rule_attribute )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:141:1: rule_attributes returns [List attrList] : ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? (rl= rule_attribute )+ ) ;
     public final List rule_attributes() throws RecognitionException {
         List attrList = null;
 
@@ -1171,13 +1197,13 @@
         	attrList = new LinkedList<AttributeDescr>();
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:139:3: ( ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? (rl= rule_attribute )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:139:5: ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? (rl= rule_attribute )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:144:3: ( ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? (rl= rule_attribute )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:144:5: ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? (rl= rule_attribute )+ )
             {
-            match(input,VT_RULE_ATTRIBUTES,FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes544); 
+            match(input,VT_RULE_ATTRIBUTES,FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes554); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:139:26: ( VK_ATTRIBUTES )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:144:26: ( VK_ATTRIBUTES )?
             int alt12=2;
             int LA12_0 = input.LA(1);
 
@@ -1186,16 +1212,16 @@
             }
             switch (alt12) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:139:26: VK_ATTRIBUTES
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:144:26: VK_ATTRIBUTES
                     {
-                    match(input,VK_ATTRIBUTES,FOLLOW_VK_ATTRIBUTES_in_rule_attributes546); 
+                    match(input,VK_ATTRIBUTES,FOLLOW_VK_ATTRIBUTES_in_rule_attributes556); 
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:139:41: (rl= rule_attribute )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:144:41: (rl= rule_attribute )+
             int cnt13=0;
             loop13:
             do {
@@ -1209,9 +1235,9 @@
 
                 switch (alt13) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:139:42: rl= rule_attribute
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:144:42: rl= rule_attribute
             	    {
-            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes552);
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes562);
             	    rl=rule_attribute();
             	    _fsp--;
 
@@ -1247,7 +1273,7 @@
 
 
     // $ANTLR start parameters
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:142:1: parameters returns [List paramList] : ^( VT_PARAM_LIST (p= param_definition )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:147:1: parameters returns [List paramList] : ^( VT_PARAM_LIST (p= param_definition )* ) ;
     public final List parameters() throws RecognitionException {
         List paramList = null;
 
@@ -1258,14 +1284,14 @@
         	paramList = new LinkedList<Map<BaseDescr, BaseDescr>>();
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:145:3: ( ^( VT_PARAM_LIST (p= param_definition )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:145:5: ^( VT_PARAM_LIST (p= param_definition )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:150:3: ( ^( VT_PARAM_LIST (p= param_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:150:5: ^( VT_PARAM_LIST (p= param_definition )* )
             {
-            match(input,VT_PARAM_LIST,FOLLOW_VT_PARAM_LIST_in_parameters576); 
+            match(input,VT_PARAM_LIST,FOLLOW_VT_PARAM_LIST_in_parameters586); 
 
             if ( input.LA(1)==Token.DOWN ) {
                 match(input, Token.DOWN, null); 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:145:21: (p= param_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:150:21: (p= param_definition )*
                 loop14:
                 do {
                     int alt14=2;
@@ -1278,9 +1304,9 @@
 
                     switch (alt14) {
                 	case 1 :
-                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:145:22: p= param_definition
+                	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:150:22: p= param_definition
                 	    {
-                	    pushFollow(FOLLOW_param_definition_in_parameters581);
+                	    pushFollow(FOLLOW_param_definition_in_parameters591);
                 	    p=param_definition();
                 	    _fsp--;
 
@@ -1313,7 +1339,7 @@
 
 
     // $ANTLR start param_definition
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:148:1: param_definition returns [Map param] : (dt= data_type )? a= argument ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:153:1: param_definition returns [Map param] : (dt= data_type )? a= argument ;
     public final Map param_definition() throws RecognitionException {
         Map param = null;
 
@@ -1323,10 +1349,10 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:149:2: ( (dt= data_type )? a= argument )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:149:4: (dt= data_type )? a= argument
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:154:2: ( (dt= data_type )? a= argument )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:154:4: (dt= data_type )? a= argument
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:149:6: (dt= data_type )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:154:6: (dt= data_type )?
             int alt15=2;
             int LA15_0 = input.LA(1);
 
@@ -1335,9 +1361,9 @@
             }
             switch (alt15) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:149:6: dt= data_type
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:154:6: dt= data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_param_definition603);
+                    pushFollow(FOLLOW_data_type_in_param_definition613);
                     dt=data_type();
                     _fsp--;
 
@@ -1347,7 +1373,7 @@
 
             }
 
-            pushFollow(FOLLOW_argument_in_param_definition608);
+            pushFollow(FOLLOW_argument_in_param_definition618);
             a=argument();
             _fsp--;
 
@@ -1369,7 +1395,7 @@
 
 
     // $ANTLR start argument
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:154:1: argument returns [BaseDescr arg] : id= ID ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:159:1: argument returns [BaseDescr arg] : id= ID ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ;
     public final BaseDescr argument() throws RecognitionException {
         BaseDescr arg = null;
 
@@ -1378,12 +1404,12 @@
         List list_rightList=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:155:2: (id= ID ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:155:4: id= ID ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:2: (id= ID ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:4: id= ID ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
             {
             id=(DroolsTree)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_argument628); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:155:10: ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
+            match(input,ID,FOLLOW_ID_in_argument638); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:10: ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
             loop16:
             do {
                 int alt16=2;
@@ -1396,11 +1422,11 @@
 
                 switch (alt16) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:155:11: LEFT_SQUARE rightList+= RIGHT_SQUARE
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:11: LEFT_SQUARE rightList+= RIGHT_SQUARE
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_argument631); 
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_argument641); 
             	    rightList=(DroolsTree)input.LT(1);
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_argument635); 
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_argument645); 
             	    if (list_rightList==null) list_rightList=new ArrayList();
             	    list_rightList.add(rightList);
 
@@ -1429,8 +1455,273 @@
     // $ANTLR end argument
 
 
+    // $ANTLR start type_declaration
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:164:1: type_declaration returns [TypeDeclarationDescr declaration] : ^( VK_DECLARE id= VT_TYPE_DECLARE_ID (dm= decl_metadata )* (df= decl_field )* END ) ;
+    public final TypeDeclarationDescr type_declaration() throws RecognitionException {
+        TypeDeclarationDescr declaration = null;
+
+        DroolsTree id=null;
+        Map dm = null;
+
+        TypeFieldDescr df = null;
+
+
+        	List<Map> declMetadaList = new LinkedList<Map>();
+        		List<TypeFieldDescr> declFieldList = new LinkedList<TypeFieldDescr>(); 
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:167:2: ( ^( VK_DECLARE id= VT_TYPE_DECLARE_ID (dm= decl_metadata )* (df= decl_field )* END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:167:4: ^( VK_DECLARE id= VT_TYPE_DECLARE_ID (dm= decl_metadata )* (df= decl_field )* END )
+            {
+            match(input,VK_DECLARE,FOLLOW_VK_DECLARE_in_type_declaration671); 
+
+            match(input, Token.DOWN, null); 
+            id=(DroolsTree)input.LT(1);
+            match(input,VT_TYPE_DECLARE_ID,FOLLOW_VT_TYPE_DECLARE_ID_in_type_declaration675); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:168:4: (dm= decl_metadata )*
+            loop17:
+            do {
+                int alt17=2;
+                int LA17_0 = input.LA(1);
+
+                if ( (LA17_0==AT) ) {
+                    alt17=1;
+                }
+
+
+                switch (alt17) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:168:5: dm= decl_metadata
+            	    {
+            	    pushFollow(FOLLOW_decl_metadata_in_type_declaration684);
+            	    dm=decl_metadata();
+            	    _fsp--;
+
+            	    declMetadaList.add(dm);	
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop17;
+                }
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:169:4: (df= decl_field )*
+            loop18:
+            do {
+                int alt18=2;
+                int LA18_0 = input.LA(1);
+
+                if ( (LA18_0==ID) ) {
+                    alt18=1;
+                }
+
+
+                switch (alt18) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:169:5: df= decl_field
+            	    {
+            	    pushFollow(FOLLOW_decl_field_in_type_declaration697);
+            	    df=decl_field();
+            	    _fsp--;
+
+            	    declFieldList.add(df);	
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop18;
+                }
+            } while (true);
+
+            match(input,END,FOLLOW_END_in_type_declaration703); 
+
+            match(input, Token.UP, null); 
+            	declaration = factory.createTypeDeclr(id, declMetadaList, declFieldList);	
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return declaration;
+    }
+    // $ANTLR end type_declaration
+
+
+    // $ANTLR start decl_metadata
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:173:1: decl_metadata returns [Map attData] : ^( AT att= ID pc= VT_PAREN_CHUNK ) ;
+    public final Map decl_metadata() throws RecognitionException {
+        Map attData = null;
+
+        DroolsTree att=null;
+        DroolsTree pc=null;
+
+        attData = new HashMap();
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:175:2: ( ^( AT att= ID pc= VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:175:4: ^( AT att= ID pc= VT_PAREN_CHUNK )
+            {
+            match(input,AT,FOLLOW_AT_in_decl_metadata728); 
+
+            match(input, Token.DOWN, null); 
+            att=(DroolsTree)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_decl_metadata732); 
+            pc=(DroolsTree)input.LT(1);
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_decl_metadata736); 
+
+            match(input, Token.UP, null); 
+            	attData.put(att, pc);	
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return attData;
+    }
+    // $ANTLR end decl_metadata
+
+
+    // $ANTLR start decl_field
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:179:1: decl_field returns [TypeFieldDescr fieldDescr] : ^(id= ID (init= decl_field_initialization )? dt= data_type (dm= decl_metadata )* ) ;
+    public final TypeFieldDescr decl_field() throws RecognitionException {
+        TypeFieldDescr fieldDescr = null;
+
+        DroolsTree id=null;
+        String init = null;
+
+        BaseDescr dt = null;
+
+        Map dm = null;
+
+
+        List<Map> declMetadaList = new LinkedList<Map>(); 
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:181:2: ( ^(id= ID (init= decl_field_initialization )? dt= data_type (dm= decl_metadata )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:181:4: ^(id= ID (init= decl_field_initialization )? dt= data_type (dm= decl_metadata )* )
+            {
+            id=(DroolsTree)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_decl_field763); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:181:16: (init= decl_field_initialization )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==EQUALS) ) {
+                alt19=1;
+            }
+            switch (alt19) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:181:16: init= decl_field_initialization
+                    {
+                    pushFollow(FOLLOW_decl_field_initialization_in_decl_field767);
+                    init=decl_field_initialization();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_data_type_in_decl_field772);
+            dt=data_type();
+            _fsp--;
+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:181:57: (dm= decl_metadata )*
+            loop20:
+            do {
+                int alt20=2;
+                int LA20_0 = input.LA(1);
+
+                if ( (LA20_0==AT) ) {
+                    alt20=1;
+                }
+
+
+                switch (alt20) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:181:58: dm= decl_metadata
+            	    {
+            	    pushFollow(FOLLOW_decl_metadata_in_decl_field777);
+            	    dm=decl_metadata();
+            	    _fsp--;
+
+            	    declMetadaList.add(dm);
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop20;
+                }
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+            	fieldDescr = factory.createTypeField(id, init, dt, declMetadaList);	
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return fieldDescr;
+    }
+    // $ANTLR end decl_field
+
+
+    // $ANTLR start decl_field_initialization
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:185:1: decl_field_initialization returns [String expr] : ^( EQUALS pc= VT_PAREN_CHUNK ) ;
+    public final String decl_field_initialization() throws RecognitionException {
+        String expr = null;
+
+        DroolsTree pc=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:186:2: ( ^( EQUALS pc= VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:186:4: ^( EQUALS pc= VT_PAREN_CHUNK )
+            {
+            match(input,EQUALS,FOLLOW_EQUALS_in_decl_field_initialization804); 
+
+            match(input, Token.DOWN, null); 
+            pc=(DroolsTree)input.LT(1);
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_decl_field_initialization808); 
+
+            match(input, Token.UP, null); 
+            	expr = pc.getText().substring(1, pc.getText().length() -1 ).trim();	
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return expr;
+    }
+    // $ANTLR end decl_field_initialization
+
+
     // $ANTLR start rule_attribute
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:159:1: rule_attribute returns [AttributeDescr attributeDescr] : ( ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) ) | ^(attrName= VK_NO_LOOP (value= BOOL )? ) | ^(attrName= VK_AGENDA_GROUP value= STRING ) | ^(attrName= VK_DURATION value= INT ) | ^(attrName= VK_ACTIVATION_GROUP value= STRING ) | ^(attrName= VK_AUTO_FOCUS (value= BOOL )? ) | ^(attrName= VK_DATE_EFFECTIVE value= STRING ) | ^(attrName= VK_DATE_EXPIRES value= STRING ) | ^(attrName= VK_ENABLED value= BOOL ) | ^(attrName= VK_RULEFLOW_GROUP value= STRING ) | ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? ) | ^(attrName= VK_DIALECT value= STRING ) ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:190:1: rule_attribute returns [AttributeDescr attributeDescr] : ( ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) ) | ^(attrName= VK_NO_LOOP (value= BOOL )? ) | ^(attrName= VK_AGENDA_GROUP value= STRING ) | ^(attrName= VK_DURATION value= INT ) | ^(attrName= VK_ACTIVATION_GROUP value= STRING ) | ^(attrName= VK_AUTO_FOCUS (value= BOOL )? ) | ^(attrName= VK_DATE_EFFECTIVE value= STRING ) | ^(attrName= VK_DATE_EXPIRES value= STRING ) | ^(attrName= VK_ENABLED value= BOOL ) | ^(attrName= VK_RULEFLOW_GROUP value= STRING ) | ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? ) | ^(attrName= VK_DIALECT value= STRING ) ) ;
     public final AttributeDescr rule_attribute() throws RecognitionException {
         AttributeDescr attributeDescr = null;
 
@@ -1438,117 +1729,117 @@
         DroolsTree value=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:2: ( ( ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) ) | ^(attrName= VK_NO_LOOP (value= BOOL )? ) | ^(attrName= VK_AGENDA_GROUP value= STRING ) | ^(attrName= VK_DURATION value= INT ) | ^(attrName= VK_ACTIVATION_GROUP value= STRING ) | ^(attrName= VK_AUTO_FOCUS (value= BOOL )? ) | ^(attrName= VK_DATE_EFFECTIVE value= STRING ) | ^(attrName= VK_DATE_EXPIRES value= STRING ) | ^(attrName= VK_ENABLED value= BOOL ) | ^(attrName= VK_RULEFLOW_GROUP value= STRING ) | ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? ) | ^(attrName= VK_DIALECT value= STRING ) ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:4: ( ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) ) | ^(attrName= VK_NO_LOOP (value= BOOL )? ) | ^(attrName= VK_AGENDA_GROUP value= STRING ) | ^(attrName= VK_DURATION value= INT ) | ^(attrName= VK_ACTIVATION_GROUP value= STRING ) | ^(attrName= VK_AUTO_FOCUS (value= BOOL )? ) | ^(attrName= VK_DATE_EFFECTIVE value= STRING ) | ^(attrName= VK_DATE_EXPIRES value= STRING ) | ^(attrName= VK_ENABLED value= BOOL ) | ^(attrName= VK_RULEFLOW_GROUP value= STRING ) | ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? ) | ^(attrName= VK_DIALECT value= STRING ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:191:2: ( ( ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) ) | ^(attrName= VK_NO_LOOP (value= BOOL )? ) | ^(attrName= VK_AGENDA_GROUP value= STRING ) | ^(attrName= VK_DURATION value= INT ) | ^(attrName= VK_ACTIVATION_GROUP value= STRING ) | ^(attrName= VK_AUTO_FOCUS (value= BOOL )? ) | ^(attrName= VK_DATE_EFFECTIVE value= STRING ) | ^(attrName= VK_DATE_EXPIRES value= STRING ) | ^(attrName= VK_ENABLED value= BOOL ) | ^(attrName= VK_RULEFLOW_GROUP value= STRING ) | ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? ) | ^(attrName= VK_DIALECT value= STRING ) ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:191:4: ( ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) ) | ^(attrName= VK_NO_LOOP (value= BOOL )? ) | ^(attrName= VK_AGENDA_GROUP value= STRING ) | ^(attrName= VK_DURATION value= INT ) | ^(attrName= VK_ACTIVATION_GROUP value= STRING ) | ^(attrName= VK_AUTO_FOCUS (value= BOOL )? ) | ^(attrName= VK_DATE_EFFECTIVE value= STRING ) | ^(attrName= VK_DATE_EXPIRES value= STRING ) | ^(attrName= VK_ENABLED value= BOOL ) | ^(attrName= VK_RULEFLOW_GROUP value= STRING ) | ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? ) | ^(attrName= VK_DIALECT value= STRING ) )
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:4: ( ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) ) | ^(attrName= VK_NO_LOOP (value= BOOL )? ) | ^(attrName= VK_AGENDA_GROUP value= STRING ) | ^(attrName= VK_DURATION value= INT ) | ^(attrName= VK_ACTIVATION_GROUP value= STRING ) | ^(attrName= VK_AUTO_FOCUS (value= BOOL )? ) | ^(attrName= VK_DATE_EFFECTIVE value= STRING ) | ^(attrName= VK_DATE_EXPIRES value= STRING ) | ^(attrName= VK_ENABLED value= BOOL ) | ^(attrName= VK_RULEFLOW_GROUP value= STRING ) | ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? ) | ^(attrName= VK_DIALECT value= STRING ) )
-            int alt21=12;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:191:4: ( ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) ) | ^(attrName= VK_NO_LOOP (value= BOOL )? ) | ^(attrName= VK_AGENDA_GROUP value= STRING ) | ^(attrName= VK_DURATION value= INT ) | ^(attrName= VK_ACTIVATION_GROUP value= STRING ) | ^(attrName= VK_AUTO_FOCUS (value= BOOL )? ) | ^(attrName= VK_DATE_EFFECTIVE value= STRING ) | ^(attrName= VK_DATE_EXPIRES value= STRING ) | ^(attrName= VK_ENABLED value= BOOL ) | ^(attrName= VK_RULEFLOW_GROUP value= STRING ) | ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? ) | ^(attrName= VK_DIALECT value= STRING ) )
+            int alt25=12;
             switch ( input.LA(1) ) {
             case VK_SALIENCE:
                 {
-                alt21=1;
+                alt25=1;
                 }
                 break;
             case VK_NO_LOOP:
                 {
-                alt21=2;
+                alt25=2;
                 }
                 break;
             case VK_AGENDA_GROUP:
                 {
-                alt21=3;
+                alt25=3;
                 }
                 break;
             case VK_DURATION:
                 {
-                alt21=4;
+                alt25=4;
                 }
                 break;
             case VK_ACTIVATION_GROUP:
                 {
-                alt21=5;
+                alt25=5;
                 }
                 break;
             case VK_AUTO_FOCUS:
                 {
-                alt21=6;
+                alt25=6;
                 }
                 break;
             case VK_DATE_EFFECTIVE:
                 {
-                alt21=7;
+                alt25=7;
                 }
                 break;
             case VK_DATE_EXPIRES:
                 {
-                alt21=8;
+                alt25=8;
                 }
                 break;
             case VK_ENABLED:
                 {
-                alt21=9;
+                alt25=9;
                 }
                 break;
             case VK_RULEFLOW_GROUP:
                 {
-                alt21=10;
+                alt25=10;
                 }
                 break;
             case VK_LOCK_ON_ACTIVE:
                 {
-                alt21=11;
+                alt25=11;
                 }
                 break;
             case VK_DIALECT:
                 {
-                alt21=12;
+                alt25=12;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("160:4: ( ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) ) | ^(attrName= VK_NO_LOOP (value= BOOL )? ) | ^(attrName= VK_AGENDA_GROUP value= STRING ) | ^(attrName= VK_DURATION value= INT ) | ^(attrName= VK_ACTIVATION_GROUP value= STRING ) | ^(attrName= VK_AUTO_FOCUS (value= BOOL )? ) | ^(attrName= VK_DATE_EFFECTIVE value= STRING ) | ^(attrName= VK_DATE_EXPIRES value= STRING ) | ^(attrName= VK_ENABLED value= BOOL ) | ^(attrName= VK_RULEFLOW_GROUP value= STRING ) | ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? ) | ^(attrName= VK_DIALECT value= STRING ) )", 21, 0, input);
+                    new NoViableAltException("191:4: ( ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) ) | ^(attrName= VK_NO_LOOP (value= BOOL )? ) | ^(attrName= VK_AGENDA_GROUP value= STRING ) | ^(attrName= VK_DURATION value= INT ) | ^(attrName= VK_ACTIVATION_GROUP value= STRING ) | ^(attrName= VK_AUTO_FOCUS (value= BOOL )? ) | ^(attrName= VK_DATE_EFFECTIVE value= STRING ) | ^(attrName= VK_DATE_EXPIRES value= STRING ) | ^(attrName= VK_ENABLED value= BOOL ) | ^(attrName= VK_RULEFLOW_GROUP value= STRING ) | ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? ) | ^(attrName= VK_DIALECT value= STRING ) )", 25, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt21) {
+            switch (alt25) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:5: ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:191:5: ^(attrName= VK_SALIENCE (value= INT | value= VT_PAREN_CHUNK ) )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_SALIENCE,FOLLOW_VK_SALIENCE_in_rule_attribute659); 
+                    match(input,VK_SALIENCE,FOLLOW_VK_SALIENCE_in_rule_attribute831); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:28: (value= INT | value= VT_PAREN_CHUNK )
-                    int alt17=2;
-                    int LA17_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:191:28: (value= INT | value= VT_PAREN_CHUNK )
+                    int alt21=2;
+                    int LA21_0 = input.LA(1);
 
-                    if ( (LA17_0==INT) ) {
-                        alt17=1;
+                    if ( (LA21_0==INT) ) {
+                        alt21=1;
                     }
-                    else if ( (LA17_0==VT_PAREN_CHUNK) ) {
-                        alt17=2;
+                    else if ( (LA21_0==VT_PAREN_CHUNK) ) {
+                        alt21=2;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("160:28: (value= INT | value= VT_PAREN_CHUNK )", 17, 0, input);
+                            new NoViableAltException("191:28: (value= INT | value= VT_PAREN_CHUNK )", 21, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt17) {
+                    switch (alt21) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:29: value= INT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:191:29: value= INT
                             {
                             value=(DroolsTree)input.LT(1);
-                            match(input,INT,FOLLOW_INT_in_rule_attribute664); 
+                            match(input,INT,FOLLOW_INT_in_rule_attribute836); 
 
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:160:39: value= VT_PAREN_CHUNK
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:191:39: value= VT_PAREN_CHUNK
                             {
                             value=(DroolsTree)input.LT(1);
-                            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_rule_attribute668); 
+                            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_rule_attribute840); 
 
                             }
                             break;
@@ -1561,26 +1852,26 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:161:4: ^(attrName= VK_NO_LOOP (value= BOOL )? )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:192:4: ^(attrName= VK_NO_LOOP (value= BOOL )? )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_NO_LOOP,FOLLOW_VK_NO_LOOP_in_rule_attribute679); 
+                    match(input,VK_NO_LOOP,FOLLOW_VK_NO_LOOP_in_rule_attribute851); 
 
                     if ( input.LA(1)==Token.DOWN ) {
                         match(input, Token.DOWN, null); 
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:161:31: (value= BOOL )?
-                        int alt18=2;
-                        int LA18_0 = input.LA(1);
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:192:31: (value= BOOL )?
+                        int alt22=2;
+                        int LA22_0 = input.LA(1);
 
-                        if ( (LA18_0==BOOL) ) {
-                            alt18=1;
+                        if ( (LA22_0==BOOL) ) {
+                            alt22=1;
                         }
-                        switch (alt18) {
+                        switch (alt22) {
                             case 1 :
-                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:161:31: value= BOOL
+                                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:192:31: value= BOOL
                                 {
                                 value=(DroolsTree)input.LT(1);
-                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute683); 
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute855); 
 
                                 }
                                 break;
@@ -1594,68 +1885,68 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:162:4: ^(attrName= VK_AGENDA_GROUP value= STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:193:4: ^(attrName= VK_AGENDA_GROUP value= STRING )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_AGENDA_GROUP,FOLLOW_VK_AGENDA_GROUP_in_rule_attribute695); 
+                    match(input,VK_AGENDA_GROUP,FOLLOW_VK_AGENDA_GROUP_in_rule_attribute867); 
 
                     match(input, Token.DOWN, null); 
                     value=(DroolsTree)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute699); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute871); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:163:4: ^(attrName= VK_DURATION value= INT )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:194:4: ^(attrName= VK_DURATION value= INT )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_DURATION,FOLLOW_VK_DURATION_in_rule_attribute710); 
+                    match(input,VK_DURATION,FOLLOW_VK_DURATION_in_rule_attribute882); 
 
                     match(input, Token.DOWN, null); 
                     value=(DroolsTree)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_rule_attribute714); 
+                    match(input,INT,FOLLOW_INT_in_rule_attribute886); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:164:4: ^(attrName= VK_ACTIVATION_GROUP value= STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:195:4: ^(attrName= VK_ACTIVATION_GROUP value= STRING )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_ACTIVATION_GROUP,FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute726); 
+                    match(input,VK_ACTIVATION_GROUP,FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute898); 
 
                     match(input, Token.DOWN, null); 
                     value=(DroolsTree)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute730); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute902); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:165:4: ^(attrName= VK_AUTO_FOCUS (value= BOOL )? )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:196:4: ^(attrName= VK_AUTO_FOCUS (value= BOOL )? )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_AUTO_FOCUS,FOLLOW_VK_AUTO_FOCUS_in_rule_attribute740); 
+                    match(input,VK_AUTO_FOCUS,FOLLOW_VK_AUTO_FOCUS_in_rule_attribute912); 
 
                     if ( input.LA(1)==Token.DOWN ) {
                         match(input, Token.DOWN, null); 
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:165:34: (value= BOOL )?
-                        int alt19=2;
-                        int LA19_0 = input.LA(1);
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:196:34: (value= BOOL )?
+                        int alt23=2;
+                        int LA23_0 = input.LA(1);
 
-                        if ( (LA19_0==BOOL) ) {
-                            alt19=1;
+                        if ( (LA23_0==BOOL) ) {
+                            alt23=1;
                         }
-                        switch (alt19) {
+                        switch (alt23) {
                             case 1 :
-                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:165:34: value= BOOL
+                                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:196:34: value= BOOL
                                 {
                                 value=(DroolsTree)input.LT(1);
-                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute744); 
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute916); 
 
                                 }
                                 break;
@@ -1669,82 +1960,82 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:166:4: ^(attrName= VK_DATE_EFFECTIVE value= STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:197:4: ^(attrName= VK_DATE_EFFECTIVE value= STRING )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_DATE_EFFECTIVE,FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute755); 
+                    match(input,VK_DATE_EFFECTIVE,FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute927); 
 
                     match(input, Token.DOWN, null); 
                     value=(DroolsTree)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute759); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute931); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:167:4: ^(attrName= VK_DATE_EXPIRES value= STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:198:4: ^(attrName= VK_DATE_EXPIRES value= STRING )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_DATE_EXPIRES,FOLLOW_VK_DATE_EXPIRES_in_rule_attribute769); 
+                    match(input,VK_DATE_EXPIRES,FOLLOW_VK_DATE_EXPIRES_in_rule_attribute941); 
 
                     match(input, Token.DOWN, null); 
                     value=(DroolsTree)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute773); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute945); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:168:4: ^(attrName= VK_ENABLED value= BOOL )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:199:4: ^(attrName= VK_ENABLED value= BOOL )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_ENABLED,FOLLOW_VK_ENABLED_in_rule_attribute783); 
+                    match(input,VK_ENABLED,FOLLOW_VK_ENABLED_in_rule_attribute955); 
 
                     match(input, Token.DOWN, null); 
                     value=(DroolsTree)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_rule_attribute787); 
+                    match(input,BOOL,FOLLOW_BOOL_in_rule_attribute959); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:169:4: ^(attrName= VK_RULEFLOW_GROUP value= STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:200:4: ^(attrName= VK_RULEFLOW_GROUP value= STRING )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_RULEFLOW_GROUP,FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute797); 
+                    match(input,VK_RULEFLOW_GROUP,FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute969); 
 
                     match(input, Token.DOWN, null); 
                     value=(DroolsTree)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute801); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute973); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:170:4: ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:201:4: ^(attrName= VK_LOCK_ON_ACTIVE (value= BOOL )? )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_LOCK_ON_ACTIVE,FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute811); 
+                    match(input,VK_LOCK_ON_ACTIVE,FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute983); 
 
                     if ( input.LA(1)==Token.DOWN ) {
                         match(input, Token.DOWN, null); 
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:170:38: (value= BOOL )?
-                        int alt20=2;
-                        int LA20_0 = input.LA(1);
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:201:38: (value= BOOL )?
+                        int alt24=2;
+                        int LA24_0 = input.LA(1);
 
-                        if ( (LA20_0==BOOL) ) {
-                            alt20=1;
+                        if ( (LA24_0==BOOL) ) {
+                            alt24=1;
                         }
-                        switch (alt20) {
+                        switch (alt24) {
                             case 1 :
-                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:170:38: value= BOOL
+                                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:201:38: value= BOOL
                                 {
                                 value=(DroolsTree)input.LT(1);
-                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute815); 
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute987); 
 
                                 }
                                 break;
@@ -1758,14 +2049,14 @@
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:171:4: ^(attrName= VK_DIALECT value= STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:202:4: ^(attrName= VK_DIALECT value= STRING )
                     {
                     attrName=(DroolsTree)input.LT(1);
-                    match(input,VK_DIALECT,FOLLOW_VK_DIALECT_in_rule_attribute825); 
+                    match(input,VK_DIALECT,FOLLOW_VK_DIALECT_in_rule_attribute997); 
 
                     match(input, Token.DOWN, null); 
                     value=(DroolsTree)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute829); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute1001); 
 
                     match(input, Token.UP, null); 
 
@@ -1791,7 +2082,7 @@
 
 
     // $ANTLR start lhs_block
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:175:1: lhs_block returns [AndDescr andDescr] : ^( VT_AND_IMPLICIT (dt= lhs )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:206:1: lhs_block returns [AndDescr andDescr] : ^( VT_AND_IMPLICIT (dt= lhs )* ) ;
     public final AndDescr lhs_block() throws RecognitionException {
         AndDescr andDescr = null;
 
@@ -1802,29 +2093,29 @@
         	andDescr = new AndDescr();
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:178:3: ( ^( VT_AND_IMPLICIT (dt= lhs )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:178:5: ^( VT_AND_IMPLICIT (dt= lhs )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:209:3: ( ^( VT_AND_IMPLICIT (dt= lhs )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:209:5: ^( VT_AND_IMPLICIT (dt= lhs )* )
             {
-            match(input,VT_AND_IMPLICIT,FOLLOW_VT_AND_IMPLICIT_in_lhs_block854); 
+            match(input,VT_AND_IMPLICIT,FOLLOW_VT_AND_IMPLICIT_in_lhs_block1026); 
 
             if ( input.LA(1)==Token.DOWN ) {
                 match(input, Token.DOWN, null); 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:178:23: (dt= lhs )*
-                loop22:
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:209:23: (dt= lhs )*
+                loop26:
                 do {
-                    int alt22=2;
-                    int LA22_0 = input.LA(1);
+                    int alt26=2;
+                    int LA26_0 = input.LA(1);
 
-                    if ( ((LA22_0>=VT_AND_PREFIX && LA22_0<=VT_OR_INFIX)||LA22_0==VT_PATTERN||LA22_0==VK_EVAL||LA22_0==VK_NOT||(LA22_0>=VK_EXISTS && LA22_0<=VK_FROM)) ) {
-                        alt22=1;
+                    if ( ((LA26_0>=VT_AND_PREFIX && LA26_0<=VT_OR_INFIX)||LA26_0==VT_PATTERN||LA26_0==VK_EVAL||LA26_0==VK_NOT||(LA26_0>=VK_EXISTS && LA26_0<=VK_FROM)) ) {
+                        alt26=1;
                     }
 
 
-                    switch (alt22) {
+                    switch (alt26) {
                 	case 1 :
-                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:178:24: dt= lhs
+                	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:209:24: dt= lhs
                 	    {
-                	    pushFollow(FOLLOW_lhs_in_lhs_block859);
+                	    pushFollow(FOLLOW_lhs_in_lhs_block1031);
                 	    dt=lhs();
                 	    _fsp--;
 
@@ -1834,7 +2125,7 @@
                 	    break;
 
                 	default :
-                	    break loop22;
+                	    break loop26;
                     }
                 } while (true);
 
@@ -1860,7 +2151,7 @@
     };
 
     // $ANTLR start lhs
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:181:1: lhs returns [BaseDescr baseDescr] : ( ^(start= VT_OR_PREFIX (dt= lhs )+ ) | ^(start= VT_OR_INFIX dt1= lhs dt2= lhs ) | ^(start= VT_AND_PREFIX (dt= lhs )+ ) | ^(start= VT_AND_INFIX dt1= lhs dt2= lhs ) | ^(start= VK_EXISTS dt= lhs ) | ^(start= VK_NOT dt= lhs ) | ^(start= VK_EVAL pc= VT_PAREN_CHUNK ) | ^(start= VK_FORALL (dt= lhs )+ ) | ^( VK_FROM pn= lhs_pattern fe= from_elements ) | pn= lhs_pattern );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:212:1: lhs returns [BaseDescr baseDescr] : ( ^(start= VT_OR_PREFIX (dt= lhs )+ ) | ^(start= VT_OR_INFIX dt1= lhs dt2= lhs ) | ^(start= VT_AND_PREFIX (dt= lhs )+ ) | ^(start= VT_AND_INFIX dt1= lhs dt2= lhs ) | ^(start= VK_EXISTS dt= lhs ) | ^(start= VK_NOT dt= lhs ) | ^(start= VK_EVAL pc= VT_PAREN_CHUNK ) | ^(start= VK_FORALL (dt= lhs )+ ) | ^( VK_FROM pn= lhs_pattern fe= from_elements ) | pn= lhs_pattern );
     public final lhs_return lhs() throws RecognitionException {
         lhs_return retval = new lhs_return();
         retval.start = input.LT(1);
@@ -1882,91 +2173,91 @@
         	List<BaseDescr> lhsList = new LinkedList<BaseDescr>();
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:184:3: ( ^(start= VT_OR_PREFIX (dt= lhs )+ ) | ^(start= VT_OR_INFIX dt1= lhs dt2= lhs ) | ^(start= VT_AND_PREFIX (dt= lhs )+ ) | ^(start= VT_AND_INFIX dt1= lhs dt2= lhs ) | ^(start= VK_EXISTS dt= lhs ) | ^(start= VK_NOT dt= lhs ) | ^(start= VK_EVAL pc= VT_PAREN_CHUNK ) | ^(start= VK_FORALL (dt= lhs )+ ) | ^( VK_FROM pn= lhs_pattern fe= from_elements ) | pn= lhs_pattern )
-            int alt26=10;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:215:3: ( ^(start= VT_OR_PREFIX (dt= lhs )+ ) | ^(start= VT_OR_INFIX dt1= lhs dt2= lhs ) | ^(start= VT_AND_PREFIX (dt= lhs )+ ) | ^(start= VT_AND_INFIX dt1= lhs dt2= lhs ) | ^(start= VK_EXISTS dt= lhs ) | ^(start= VK_NOT dt= lhs ) | ^(start= VK_EVAL pc= VT_PAREN_CHUNK ) | ^(start= VK_FORALL (dt= lhs )+ ) | ^( VK_FROM pn= lhs_pattern fe= from_elements ) | pn= lhs_pattern )
+            int alt30=10;
             switch ( input.LA(1) ) {
             case VT_OR_PREFIX:
                 {
-                alt26=1;
+                alt30=1;
                 }
                 break;
             case VT_OR_INFIX:
                 {
-                alt26=2;
+                alt30=2;
                 }
                 break;
             case VT_AND_PREFIX:
                 {
-                alt26=3;
+                alt30=3;
                 }
                 break;
             case VT_AND_INFIX:
                 {
-                alt26=4;
+                alt30=4;
                 }
                 break;
             case VK_EXISTS:
                 {
-                alt26=5;
+                alt30=5;
                 }
                 break;
             case VK_NOT:
                 {
-                alt26=6;
+                alt30=6;
                 }
                 break;
             case VK_EVAL:
                 {
-                alt26=7;
+                alt30=7;
                 }
                 break;
             case VK_FORALL:
                 {
-                alt26=8;
+                alt30=8;
                 }
                 break;
             case VK_FROM:
                 {
-                alt26=9;
+                alt30=9;
                 }
                 break;
             case VT_PATTERN:
                 {
-                alt26=10;
+                alt30=10;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("181:1: lhs returns [BaseDescr baseDescr] : ( ^(start= VT_OR_PREFIX (dt= lhs )+ ) | ^(start= VT_OR_INFIX dt1= lhs dt2= lhs ) | ^(start= VT_AND_PREFIX (dt= lhs )+ ) | ^(start= VT_AND_INFIX dt1= lhs dt2= lhs ) | ^(start= VK_EXISTS dt= lhs ) | ^(start= VK_NOT dt= lhs ) | ^(start= VK_EVAL pc= VT_PAREN_CHUNK ) | ^(start= VK_FORALL (dt= lhs )+ ) | ^( VK_FROM pn= lhs_pattern fe= from_elements ) | pn= lhs_pattern );", 26, 0, input);
+                    new NoViableAltException("212:1: lhs returns [BaseDescr baseDescr] : ( ^(start= VT_OR_PREFIX (dt= lhs )+ ) | ^(start= VT_OR_INFIX dt1= lhs dt2= lhs ) | ^(start= VT_AND_PREFIX (dt= lhs )+ ) | ^(start= VT_AND_INFIX dt1= lhs dt2= lhs ) | ^(start= VK_EXISTS dt= lhs ) | ^(start= VK_NOT dt= lhs ) | ^(start= VK_EVAL pc= VT_PAREN_CHUNK ) | ^(start= VK_FORALL (dt= lhs )+ ) | ^( VK_FROM pn= lhs_pattern fe= from_elements ) | pn= lhs_pattern );", 30, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt26) {
+            switch (alt30) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:184:5: ^(start= VT_OR_PREFIX (dt= lhs )+ )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:215:5: ^(start= VT_OR_PREFIX (dt= lhs )+ )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VT_OR_PREFIX,FOLLOW_VT_OR_PREFIX_in_lhs885); 
+                    match(input,VT_OR_PREFIX,FOLLOW_VT_OR_PREFIX_in_lhs1057); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:184:26: (dt= lhs )+
-                    int cnt23=0;
-                    loop23:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:215:26: (dt= lhs )+
+                    int cnt27=0;
+                    loop27:
                     do {
-                        int alt23=2;
-                        int LA23_0 = input.LA(1);
+                        int alt27=2;
+                        int LA27_0 = input.LA(1);
 
-                        if ( ((LA23_0>=VT_AND_PREFIX && LA23_0<=VT_OR_INFIX)||LA23_0==VT_PATTERN||LA23_0==VK_EVAL||LA23_0==VK_NOT||(LA23_0>=VK_EXISTS && LA23_0<=VK_FROM)) ) {
-                            alt23=1;
+                        if ( ((LA27_0>=VT_AND_PREFIX && LA27_0<=VT_OR_INFIX)||LA27_0==VT_PATTERN||LA27_0==VK_EVAL||LA27_0==VK_NOT||(LA27_0>=VK_EXISTS && LA27_0<=VK_FROM)) ) {
+                            alt27=1;
                         }
 
 
-                        switch (alt23) {
+                        switch (alt27) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:184:27: dt= lhs
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:215:27: dt= lhs
                     	    {
-                    	    pushFollow(FOLLOW_lhs_in_lhs890);
+                    	    pushFollow(FOLLOW_lhs_in_lhs1062);
                     	    dt=lhs();
                     	    _fsp--;
 
@@ -1976,12 +2267,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt23 >= 1 ) break loop23;
+                    	    if ( cnt27 >= 1 ) break loop27;
                                 EarlyExitException eee =
-                                    new EarlyExitException(23, input);
+                                    new EarlyExitException(27, input);
                                 throw eee;
                         }
-                        cnt23++;
+                        cnt27++;
                     } while (true);
 
 
@@ -1991,17 +2282,17 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:186:4: ^(start= VT_OR_INFIX dt1= lhs dt2= lhs )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:217:4: ^(start= VT_OR_INFIX dt1= lhs dt2= lhs )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VT_OR_INFIX,FOLLOW_VT_OR_INFIX_in_lhs906); 
+                    match(input,VT_OR_INFIX,FOLLOW_VT_OR_INFIX_in_lhs1078); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs910);
+                    pushFollow(FOLLOW_lhs_in_lhs1082);
                     dt1=lhs();
                     _fsp--;
 
-                    pushFollow(FOLLOW_lhs_in_lhs914);
+                    pushFollow(FOLLOW_lhs_in_lhs1086);
                     dt2=lhs();
                     _fsp--;
 
@@ -2014,29 +2305,29 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:190:4: ^(start= VT_AND_PREFIX (dt= lhs )+ )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:221:4: ^(start= VT_AND_PREFIX (dt= lhs )+ )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VT_AND_PREFIX,FOLLOW_VT_AND_PREFIX_in_lhs926); 
+                    match(input,VT_AND_PREFIX,FOLLOW_VT_AND_PREFIX_in_lhs1098); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:190:26: (dt= lhs )+
-                    int cnt24=0;
-                    loop24:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:221:26: (dt= lhs )+
+                    int cnt28=0;
+                    loop28:
                     do {
-                        int alt24=2;
-                        int LA24_0 = input.LA(1);
+                        int alt28=2;
+                        int LA28_0 = input.LA(1);
 
-                        if ( ((LA24_0>=VT_AND_PREFIX && LA24_0<=VT_OR_INFIX)||LA24_0==VT_PATTERN||LA24_0==VK_EVAL||LA24_0==VK_NOT||(LA24_0>=VK_EXISTS && LA24_0<=VK_FROM)) ) {
-                            alt24=1;
+                        if ( ((LA28_0>=VT_AND_PREFIX && LA28_0<=VT_OR_INFIX)||LA28_0==VT_PATTERN||LA28_0==VK_EVAL||LA28_0==VK_NOT||(LA28_0>=VK_EXISTS && LA28_0<=VK_FROM)) ) {
+                            alt28=1;
                         }
 
 
-                        switch (alt24) {
+                        switch (alt28) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:190:27: dt= lhs
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:221:27: dt= lhs
                     	    {
-                    	    pushFollow(FOLLOW_lhs_in_lhs931);
+                    	    pushFollow(FOLLOW_lhs_in_lhs1103);
                     	    dt=lhs();
                     	    _fsp--;
 
@@ -2046,12 +2337,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt24 >= 1 ) break loop24;
+                    	    if ( cnt28 >= 1 ) break loop28;
                                 EarlyExitException eee =
-                                    new EarlyExitException(24, input);
+                                    new EarlyExitException(28, input);
                                 throw eee;
                         }
-                        cnt24++;
+                        cnt28++;
                     } while (true);
 
 
@@ -2061,17 +2352,17 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:192:4: ^(start= VT_AND_INFIX dt1= lhs dt2= lhs )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:223:4: ^(start= VT_AND_INFIX dt1= lhs dt2= lhs )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VT_AND_INFIX,FOLLOW_VT_AND_INFIX_in_lhs947); 
+                    match(input,VT_AND_INFIX,FOLLOW_VT_AND_INFIX_in_lhs1119); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs951);
+                    pushFollow(FOLLOW_lhs_in_lhs1123);
                     dt1=lhs();
                     _fsp--;
 
-                    pushFollow(FOLLOW_lhs_in_lhs955);
+                    pushFollow(FOLLOW_lhs_in_lhs1127);
                     dt2=lhs();
                     _fsp--;
 
@@ -2084,13 +2375,13 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:196:4: ^(start= VK_EXISTS dt= lhs )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:227:4: ^(start= VK_EXISTS dt= lhs )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VK_EXISTS,FOLLOW_VK_EXISTS_in_lhs967); 
+                    match(input,VK_EXISTS,FOLLOW_VK_EXISTS_in_lhs1139); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs971);
+                    pushFollow(FOLLOW_lhs_in_lhs1143);
                     dt=lhs();
                     _fsp--;
 
@@ -2101,13 +2392,13 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:198:4: ^(start= VK_NOT dt= lhs )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:229:4: ^(start= VK_NOT dt= lhs )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VK_NOT,FOLLOW_VK_NOT_in_lhs983); 
+                    match(input,VK_NOT,FOLLOW_VK_NOT_in_lhs1155); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs987);
+                    pushFollow(FOLLOW_lhs_in_lhs1159);
                     dt=lhs();
                     _fsp--;
 
@@ -2118,14 +2409,14 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:200:4: ^(start= VK_EVAL pc= VT_PAREN_CHUNK )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:231:4: ^(start= VK_EVAL pc= VT_PAREN_CHUNK )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_lhs999); 
+                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_lhs1171); 
 
                     match(input, Token.DOWN, null); 
                     pc=(DroolsTree)input.LT(1);
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_lhs1003); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_lhs1175); 
 
                     match(input, Token.UP, null); 
                     	retval.baseDescr = factory.createEval(start, pc);	
@@ -2133,29 +2424,29 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:202:4: ^(start= VK_FORALL (dt= lhs )+ )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:233:4: ^(start= VK_FORALL (dt= lhs )+ )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VK_FORALL,FOLLOW_VK_FORALL_in_lhs1015); 
+                    match(input,VK_FORALL,FOLLOW_VK_FORALL_in_lhs1187); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:202:22: (dt= lhs )+
-                    int cnt25=0;
-                    loop25:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:233:22: (dt= lhs )+
+                    int cnt29=0;
+                    loop29:
                     do {
-                        int alt25=2;
-                        int LA25_0 = input.LA(1);
+                        int alt29=2;
+                        int LA29_0 = input.LA(1);
 
-                        if ( ((LA25_0>=VT_AND_PREFIX && LA25_0<=VT_OR_INFIX)||LA25_0==VT_PATTERN||LA25_0==VK_EVAL||LA25_0==VK_NOT||(LA25_0>=VK_EXISTS && LA25_0<=VK_FROM)) ) {
-                            alt25=1;
+                        if ( ((LA29_0>=VT_AND_PREFIX && LA29_0<=VT_OR_INFIX)||LA29_0==VT_PATTERN||LA29_0==VK_EVAL||LA29_0==VK_NOT||(LA29_0>=VK_EXISTS && LA29_0<=VK_FROM)) ) {
+                            alt29=1;
                         }
 
 
-                        switch (alt25) {
+                        switch (alt29) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:202:23: dt= lhs
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:233:23: dt= lhs
                     	    {
-                    	    pushFollow(FOLLOW_lhs_in_lhs1020);
+                    	    pushFollow(FOLLOW_lhs_in_lhs1192);
                     	    dt=lhs();
                     	    _fsp--;
 
@@ -2165,12 +2456,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt25 >= 1 ) break loop25;
+                    	    if ( cnt29 >= 1 ) break loop29;
                                 EarlyExitException eee =
-                                    new EarlyExitException(25, input);
+                                    new EarlyExitException(29, input);
                                 throw eee;
                         }
-                        cnt25++;
+                        cnt29++;
                     } while (true);
 
 
@@ -2180,16 +2471,16 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:204:4: ^( VK_FROM pn= lhs_pattern fe= from_elements )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:235:4: ^( VK_FROM pn= lhs_pattern fe= from_elements )
                     {
-                    match(input,VK_FROM,FOLLOW_VK_FROM_in_lhs1034); 
+                    match(input,VK_FROM,FOLLOW_VK_FROM_in_lhs1206); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs1038);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs1210);
                     pn=lhs_pattern();
                     _fsp--;
 
-                    pushFollow(FOLLOW_from_elements_in_lhs1042);
+                    pushFollow(FOLLOW_from_elements_in_lhs1214);
                     fe=from_elements();
                     _fsp--;
 
@@ -2200,9 +2491,9 @@
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:206:4: pn= lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:237:4: pn= lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs1053);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs1225);
                     pn=lhs_pattern();
                     _fsp--;
 
@@ -2228,7 +2519,7 @@
     };
 
     // $ANTLR start from_elements
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:210:1: from_elements returns [PatternSourceDescr patternSourceDescr] : ( ^(start= VK_ACCUMULATE dt= lhs ret= accumulate_parts[$patternSourceDescr] ) | ^(start= VK_COLLECT dt= lhs ) | ^(start= VK_ENTRY_POINT entryId= VT_ENTRYPOINT_ID ) | fs= from_source_clause );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:241:1: from_elements returns [PatternSourceDescr patternSourceDescr] : ( ^(start= VK_ACCUMULATE dt= lhs ret= accumulate_parts[$patternSourceDescr] ) | ^(start= VK_COLLECT dt= lhs ) | ^(start= VK_ENTRY_POINT entryId= VT_ENTRYPOINT_ID ) | fs= from_source_clause );
     public final from_elements_return from_elements() throws RecognitionException {
         from_elements_return retval = new from_elements_return();
         retval.start = input.LT(1);
@@ -2243,50 +2534,50 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:211:2: ( ^(start= VK_ACCUMULATE dt= lhs ret= accumulate_parts[$patternSourceDescr] ) | ^(start= VK_COLLECT dt= lhs ) | ^(start= VK_ENTRY_POINT entryId= VT_ENTRYPOINT_ID ) | fs= from_source_clause )
-            int alt27=4;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:242:2: ( ^(start= VK_ACCUMULATE dt= lhs ret= accumulate_parts[$patternSourceDescr] ) | ^(start= VK_COLLECT dt= lhs ) | ^(start= VK_ENTRY_POINT entryId= VT_ENTRYPOINT_ID ) | fs= from_source_clause )
+            int alt31=4;
             switch ( input.LA(1) ) {
             case VK_ACCUMULATE:
                 {
-                alt27=1;
+                alt31=1;
                 }
                 break;
             case VK_COLLECT:
                 {
-                alt27=2;
+                alt31=2;
                 }
                 break;
             case VK_ENTRY_POINT:
                 {
-                alt27=3;
+                alt31=3;
                 }
                 break;
             case VT_FROM_SOURCE:
                 {
-                alt27=4;
+                alt31=4;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("210:1: from_elements returns [PatternSourceDescr patternSourceDescr] : ( ^(start= VK_ACCUMULATE dt= lhs ret= accumulate_parts[$patternSourceDescr] ) | ^(start= VK_COLLECT dt= lhs ) | ^(start= VK_ENTRY_POINT entryId= VT_ENTRYPOINT_ID ) | fs= from_source_clause );", 27, 0, input);
+                    new NoViableAltException("241:1: from_elements returns [PatternSourceDescr patternSourceDescr] : ( ^(start= VK_ACCUMULATE dt= lhs ret= accumulate_parts[$patternSourceDescr] ) | ^(start= VK_COLLECT dt= lhs ) | ^(start= VK_ENTRY_POINT entryId= VT_ENTRYPOINT_ID ) | fs= from_source_clause );", 31, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt27) {
+            switch (alt31) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:211:4: ^(start= VK_ACCUMULATE dt= lhs ret= accumulate_parts[$patternSourceDescr] )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:242:4: ^(start= VK_ACCUMULATE dt= lhs ret= accumulate_parts[$patternSourceDescr] )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VK_ACCUMULATE,FOLLOW_VK_ACCUMULATE_in_from_elements1074); 
+                    match(input,VK_ACCUMULATE,FOLLOW_VK_ACCUMULATE_in_from_elements1246); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_from_elements1078);
+                    pushFollow(FOLLOW_lhs_in_from_elements1250);
                     dt=lhs();
                     _fsp--;
 
                     	retval.patternSourceDescr = factory.createAccumulate(start, dt.baseDescr);	
-                    pushFollow(FOLLOW_accumulate_parts_in_from_elements1088);
+                    pushFollow(FOLLOW_accumulate_parts_in_from_elements1260);
                     ret=accumulate_parts(retval.patternSourceDescr);
                     _fsp--;
 
@@ -2297,13 +2588,13 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:215:4: ^(start= VK_COLLECT dt= lhs )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:246:4: ^(start= VK_COLLECT dt= lhs )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VK_COLLECT,FOLLOW_VK_COLLECT_in_from_elements1101); 
+                    match(input,VK_COLLECT,FOLLOW_VK_COLLECT_in_from_elements1273); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_from_elements1105);
+                    pushFollow(FOLLOW_lhs_in_from_elements1277);
                     dt=lhs();
                     _fsp--;
 
@@ -2314,14 +2605,14 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:217:4: ^(start= VK_ENTRY_POINT entryId= VT_ENTRYPOINT_ID )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:248:4: ^(start= VK_ENTRY_POINT entryId= VT_ENTRYPOINT_ID )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VK_ENTRY_POINT,FOLLOW_VK_ENTRY_POINT_in_from_elements1117); 
+                    match(input,VK_ENTRY_POINT,FOLLOW_VK_ENTRY_POINT_in_from_elements1289); 
 
                     match(input, Token.DOWN, null); 
                     entryId=(DroolsTree)input.LT(1);
-                    match(input,VT_ENTRYPOINT_ID,FOLLOW_VT_ENTRYPOINT_ID_in_from_elements1121); 
+                    match(input,VT_ENTRYPOINT_ID,FOLLOW_VT_ENTRYPOINT_ID_in_from_elements1293); 
 
                     match(input, Token.UP, null); 
                     	retval.patternSourceDescr = factory.createEntryPoint(start, entryId);	
@@ -2329,9 +2620,9 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:219:4: fs= from_source_clause
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:250:4: fs= from_source_clause
                     {
-                    pushFollow(FOLLOW_from_source_clause_in_from_elements1132);
+                    pushFollow(FOLLOW_from_source_clause_in_from_elements1304);
                     fs=from_source_clause();
                     _fsp--;
 
@@ -2354,7 +2645,7 @@
 
 
     // $ANTLR start accumulate_parts
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:223:1: accumulate_parts[PatternSourceDescr patternSourceDescr] returns [AccumulateDescr accumulateDescr] : (ac1= accumulate_init_clause[$patternSourceDescr] | ac2= accumulate_id_clause[$patternSourceDescr] );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:254:1: accumulate_parts[PatternSourceDescr patternSourceDescr] returns [AccumulateDescr accumulateDescr] : (ac1= accumulate_init_clause[$patternSourceDescr] | ac2= accumulate_id_clause[$patternSourceDescr] );
     public final AccumulateDescr accumulate_parts(PatternSourceDescr patternSourceDescr) throws RecognitionException {
         AccumulateDescr accumulateDescr = null;
 
@@ -2364,27 +2655,27 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:224:2: (ac1= accumulate_init_clause[$patternSourceDescr] | ac2= accumulate_id_clause[$patternSourceDescr] )
-            int alt28=2;
-            int LA28_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:255:2: (ac1= accumulate_init_clause[$patternSourceDescr] | ac2= accumulate_id_clause[$patternSourceDescr] )
+            int alt32=2;
+            int LA32_0 = input.LA(1);
 
-            if ( (LA28_0==VT_ACCUMULATE_INIT_CLAUSE) ) {
-                alt28=1;
+            if ( (LA32_0==VT_ACCUMULATE_INIT_CLAUSE) ) {
+                alt32=1;
             }
-            else if ( (LA28_0==VT_ACCUMULATE_ID_CLAUSE) ) {
-                alt28=2;
+            else if ( (LA32_0==VT_ACCUMULATE_ID_CLAUSE) ) {
+                alt32=2;
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("223:1: accumulate_parts[PatternSourceDescr patternSourceDescr] returns [AccumulateDescr accumulateDescr] : (ac1= accumulate_init_clause[$patternSourceDescr] | ac2= accumulate_id_clause[$patternSourceDescr] );", 28, 0, input);
+                    new NoViableAltException("254:1: accumulate_parts[PatternSourceDescr patternSourceDescr] returns [AccumulateDescr accumulateDescr] : (ac1= accumulate_init_clause[$patternSourceDescr] | ac2= accumulate_id_clause[$patternSourceDescr] );", 32, 0, input);
 
                 throw nvae;
             }
-            switch (alt28) {
+            switch (alt32) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:224:4: ac1= accumulate_init_clause[$patternSourceDescr]
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:255:4: ac1= accumulate_init_clause[$patternSourceDescr]
                     {
-                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_parts1153);
+                    pushFollow(FOLLOW_accumulate_init_clause_in_accumulate_parts1325);
                     ac1=accumulate_init_clause(patternSourceDescr);
                     _fsp--;
 
@@ -2393,9 +2684,9 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:226:4: ac2= accumulate_id_clause[$patternSourceDescr]
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:257:4: ac2= accumulate_id_clause[$patternSourceDescr]
                     {
-                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_parts1164);
+                    pushFollow(FOLLOW_accumulate_id_clause_in_accumulate_parts1336);
                     ac2=accumulate_id_clause(patternSourceDescr);
                     _fsp--;
 
@@ -2421,7 +2712,7 @@
     };
 
     // $ANTLR start accumulate_init_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:230:1: accumulate_init_clause[PatternSourceDescr accumulateParam] returns [AccumulateDescr accumulateDescr] : ^( VT_ACCUMULATE_INIT_CLAUSE ^(start= VK_INIT pc1= VT_PAREN_CHUNK ) ^( VK_ACTION pc2= VT_PAREN_CHUNK ) (rev= accumulate_init_reverse_clause )? ^( VK_RESULT pc3= VT_PAREN_CHUNK ) ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:261:1: accumulate_init_clause[PatternSourceDescr accumulateParam] returns [AccumulateDescr accumulateDescr] : ^( VT_ACCUMULATE_INIT_CLAUSE ^(start= VK_INIT pc1= VT_PAREN_CHUNK ) ^( VK_ACTION pc2= VT_PAREN_CHUNK ) (rev= accumulate_init_reverse_clause )? ^( VK_RESULT pc3= VT_PAREN_CHUNK ) ) ;
     public final accumulate_init_clause_return accumulate_init_clause(PatternSourceDescr accumulateParam) throws RecognitionException {
         accumulate_init_clause_return retval = new accumulate_init_clause_return();
         retval.start = input.LT(1);
@@ -2434,39 +2725,39 @@
 
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:231:2: ( ^( VT_ACCUMULATE_INIT_CLAUSE ^(start= VK_INIT pc1= VT_PAREN_CHUNK ) ^( VK_ACTION pc2= VT_PAREN_CHUNK ) (rev= accumulate_init_reverse_clause )? ^( VK_RESULT pc3= VT_PAREN_CHUNK ) ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:231:4: ^( VT_ACCUMULATE_INIT_CLAUSE ^(start= VK_INIT pc1= VT_PAREN_CHUNK ) ^( VK_ACTION pc2= VT_PAREN_CHUNK ) (rev= accumulate_init_reverse_clause )? ^( VK_RESULT pc3= VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:262:2: ( ^( VT_ACCUMULATE_INIT_CLAUSE ^(start= VK_INIT pc1= VT_PAREN_CHUNK ) ^( VK_ACTION pc2= VT_PAREN_CHUNK ) (rev= accumulate_init_reverse_clause )? ^( VK_RESULT pc3= VT_PAREN_CHUNK ) ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:262:4: ^( VT_ACCUMULATE_INIT_CLAUSE ^(start= VK_INIT pc1= VT_PAREN_CHUNK ) ^( VK_ACTION pc2= VT_PAREN_CHUNK ) (rev= accumulate_init_reverse_clause )? ^( VK_RESULT pc3= VT_PAREN_CHUNK ) )
             {
-            match(input,VT_ACCUMULATE_INIT_CLAUSE,FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause1187); 
+            match(input,VT_ACCUMULATE_INIT_CLAUSE,FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause1359); 
 
             match(input, Token.DOWN, null); 
             start=(DroolsTree)input.LT(1);
-            match(input,VK_INIT,FOLLOW_VK_INIT_in_accumulate_init_clause1196); 
+            match(input,VK_INIT,FOLLOW_VK_INIT_in_accumulate_init_clause1368); 
 
             match(input, Token.DOWN, null); 
             pc1=(DroolsTree)input.LT(1);
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1200); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1372); 
 
             match(input, Token.UP, null); 
-            match(input,VK_ACTION,FOLLOW_VK_ACTION_in_accumulate_init_clause1208); 
+            match(input,VK_ACTION,FOLLOW_VK_ACTION_in_accumulate_init_clause1380); 
 
             match(input, Token.DOWN, null); 
             pc2=(DroolsTree)input.LT(1);
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1212); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1384); 
 
             match(input, Token.UP, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:234:7: (rev= accumulate_init_reverse_clause )?
-            int alt29=2;
-            int LA29_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:265:7: (rev= accumulate_init_reverse_clause )?
+            int alt33=2;
+            int LA33_0 = input.LA(1);
 
-            if ( (LA29_0==VK_REVERSE) ) {
-                alt29=1;
+            if ( (LA33_0==VK_REVERSE) ) {
+                alt33=1;
             }
-            switch (alt29) {
+            switch (alt33) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:234:7: rev= accumulate_init_reverse_clause
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:265:7: rev= accumulate_init_reverse_clause
                     {
-                    pushFollow(FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause1221);
+                    pushFollow(FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause1393);
                     rev=accumulate_init_reverse_clause();
                     _fsp--;
 
@@ -2476,11 +2767,11 @@
 
             }
 
-            match(input,VK_RESULT,FOLLOW_VK_RESULT_in_accumulate_init_clause1228); 
+            match(input,VK_RESULT,FOLLOW_VK_RESULT_in_accumulate_init_clause1400); 
 
             match(input, Token.DOWN, null); 
             pc3=(DroolsTree)input.LT(1);
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1232); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1404); 
 
             match(input, Token.UP, null); 
 
@@ -2510,7 +2801,7 @@
     };
 
     // $ANTLR start accumulate_init_reverse_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:243:1: accumulate_init_reverse_clause returns [DroolsTree vkReverse, DroolsTree vkReverseChunk] : ^(vk= VK_REVERSE pc= VT_PAREN_CHUNK ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:274:1: accumulate_init_reverse_clause returns [DroolsTree vkReverse, DroolsTree vkReverseChunk] : ^(vk= VK_REVERSE pc= VT_PAREN_CHUNK ) ;
     public final accumulate_init_reverse_clause_return accumulate_init_reverse_clause() throws RecognitionException {
         accumulate_init_reverse_clause_return retval = new accumulate_init_reverse_clause_return();
         retval.start = input.LT(1);
@@ -2519,15 +2810,15 @@
         DroolsTree pc=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:244:2: ( ^(vk= VK_REVERSE pc= VT_PAREN_CHUNK ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:244:4: ^(vk= VK_REVERSE pc= VT_PAREN_CHUNK )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:275:2: ( ^(vk= VK_REVERSE pc= VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:275:4: ^(vk= VK_REVERSE pc= VT_PAREN_CHUNK )
             {
             vk=(DroolsTree)input.LT(1);
-            match(input,VK_REVERSE,FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause1255); 
+            match(input,VK_REVERSE,FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause1427); 
 
             match(input, Token.DOWN, null); 
             pc=(DroolsTree)input.LT(1);
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause1259); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause1431); 
 
             match(input, Token.UP, null); 
             	retval.vkReverse = vk;
@@ -2548,7 +2839,7 @@
 
 
     // $ANTLR start accumulate_id_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:249:1: accumulate_id_clause[PatternSourceDescr accumulateParam] returns [AccumulateDescr accumulateDescr] : ^( VT_ACCUMULATE_ID_CLAUSE id= ID pc= VT_PAREN_CHUNK ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:280:1: accumulate_id_clause[PatternSourceDescr accumulateParam] returns [AccumulateDescr accumulateDescr] : ^( VT_ACCUMULATE_ID_CLAUSE id= ID pc= VT_PAREN_CHUNK ) ;
     public final AccumulateDescr accumulate_id_clause(PatternSourceDescr accumulateParam) throws RecognitionException {
         AccumulateDescr accumulateDescr = null;
 
@@ -2556,16 +2847,16 @@
         DroolsTree pc=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:250:2: ( ^( VT_ACCUMULATE_ID_CLAUSE id= ID pc= VT_PAREN_CHUNK ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:250:4: ^( VT_ACCUMULATE_ID_CLAUSE id= ID pc= VT_PAREN_CHUNK )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:281:2: ( ^( VT_ACCUMULATE_ID_CLAUSE id= ID pc= VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:281:4: ^( VT_ACCUMULATE_ID_CLAUSE id= ID pc= VT_PAREN_CHUNK )
             {
-            match(input,VT_ACCUMULATE_ID_CLAUSE,FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause1281); 
+            match(input,VT_ACCUMULATE_ID_CLAUSE,FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause1453); 
 
             match(input, Token.DOWN, null); 
             id=(DroolsTree)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accumulate_id_clause1285); 
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause1457); 
             pc=(DroolsTree)input.LT(1);
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause1289); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause1461); 
 
             match(input, Token.UP, null); 
             	accumulateDescr = factory.setupAccumulateId(accumulateParam, id, pc);	
@@ -2594,7 +2885,7 @@
     };
 
     // $ANTLR start from_source_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:254:1: from_source_clause returns [FromDescr fromDescr, AccessorDescr retAccessorDescr] : ^( VT_FROM_SOURCE id= ID (pc= VT_PAREN_CHUNK )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:285:1: from_source_clause returns [FromDescr fromDescr, AccessorDescr retAccessorDescr] : ^( VT_FROM_SOURCE id= ID (pc= VT_PAREN_CHUNK )? ( expression_chain )? ) ;
     public final from_source_clause_return from_source_clause() throws RecognitionException {
         from_source_clause_stack.push(new from_source_clause_scope());
         from_source_clause_return retval = new from_source_clause_return();
@@ -2604,27 +2895,27 @@
         DroolsTree pc=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:257:3: ( ^( VT_FROM_SOURCE id= ID (pc= VT_PAREN_CHUNK )? ( expression_chain )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:257:5: ^( VT_FROM_SOURCE id= ID (pc= VT_PAREN_CHUNK )? ( expression_chain )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:288:3: ( ^( VT_FROM_SOURCE id= ID (pc= VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:288:5: ^( VT_FROM_SOURCE id= ID (pc= VT_PAREN_CHUNK )? ( expression_chain )? )
             {
-            match(input,VT_FROM_SOURCE,FOLLOW_VT_FROM_SOURCE_in_from_source_clause1311); 
+            match(input,VT_FROM_SOURCE,FOLLOW_VT_FROM_SOURCE_in_from_source_clause1483); 
 
             match(input, Token.DOWN, null); 
             id=(DroolsTree)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_from_source_clause1315); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:257:30: (pc= VT_PAREN_CHUNK )?
-            int alt30=2;
-            int LA30_0 = input.LA(1);
+            match(input,ID,FOLLOW_ID_in_from_source_clause1487); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:288:30: (pc= VT_PAREN_CHUNK )?
+            int alt34=2;
+            int LA34_0 = input.LA(1);
 
-            if ( (LA30_0==VT_PAREN_CHUNK) ) {
-                alt30=1;
+            if ( (LA34_0==VT_PAREN_CHUNK) ) {
+                alt34=1;
             }
-            switch (alt30) {
+            switch (alt34) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:257:30: pc= VT_PAREN_CHUNK
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:288:30: pc= VT_PAREN_CHUNK
                     {
                     pc=(DroolsTree)input.LT(1);
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_from_source_clause1319); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_from_source_clause1491); 
 
                     }
                     break;
@@ -2633,18 +2924,18 @@
 
             	((from_source_clause_scope)from_source_clause_stack.peek()).accessorDescr = factory.createAccessor(id, pc);	
             		retval.retAccessorDescr = ((from_source_clause_scope)from_source_clause_stack.peek()).accessorDescr;	
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:260:3: ( expression_chain )?
-            int alt31=2;
-            int LA31_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:291:3: ( expression_chain )?
+            int alt35=2;
+            int LA35_0 = input.LA(1);
 
-            if ( (LA31_0==VT_EXPRESSION_CHAIN) ) {
-                alt31=1;
+            if ( (LA35_0==VT_EXPRESSION_CHAIN) ) {
+                alt35=1;
             }
-            switch (alt31) {
+            switch (alt35) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:260:3: expression_chain
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:291:3: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_from_source_clause1328);
+                    pushFollow(FOLLOW_expression_chain_in_from_source_clause1500);
                     expression_chain();
                     _fsp--;
 
@@ -2676,7 +2967,7 @@
     };
 
     // $ANTLR start expression_chain
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:264:1: expression_chain : ^(start= VT_EXPRESSION_CHAIN id= ID (sc= VT_SQUARE_CHUNK )? (pc= VT_PAREN_CHUNK )? ( expression_chain )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:295:1: expression_chain : ^(start= VT_EXPRESSION_CHAIN id= ID (sc= VT_SQUARE_CHUNK )? (pc= VT_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);
@@ -2687,47 +2978,47 @@
         DroolsTree pc=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:265:2: ( ^(start= VT_EXPRESSION_CHAIN id= ID (sc= VT_SQUARE_CHUNK )? (pc= VT_PAREN_CHUNK )? ( expression_chain )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:265:4: ^(start= VT_EXPRESSION_CHAIN id= ID (sc= VT_SQUARE_CHUNK )? (pc= VT_PAREN_CHUNK )? ( expression_chain )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:296:2: ( ^(start= VT_EXPRESSION_CHAIN id= ID (sc= VT_SQUARE_CHUNK )? (pc= VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:296:4: ^(start= VT_EXPRESSION_CHAIN id= ID (sc= VT_SQUARE_CHUNK )? (pc= VT_PAREN_CHUNK )? ( expression_chain )? )
             {
             start=(DroolsTree)input.LT(1);
-            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1347); 
+            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1519); 
 
             match(input, Token.DOWN, null); 
             id=(DroolsTree)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_expression_chain1351); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:265:40: (sc= VT_SQUARE_CHUNK )?
-            int alt32=2;
-            int LA32_0 = input.LA(1);
+            match(input,ID,FOLLOW_ID_in_expression_chain1523); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:296:40: (sc= VT_SQUARE_CHUNK )?
+            int alt36=2;
+            int LA36_0 = input.LA(1);
 
-            if ( (LA32_0==VT_SQUARE_CHUNK) ) {
-                alt32=1;
+            if ( (LA36_0==VT_SQUARE_CHUNK) ) {
+                alt36=1;
             }
-            switch (alt32) {
+            switch (alt36) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:265:40: sc= VT_SQUARE_CHUNK
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:296:40: sc= VT_SQUARE_CHUNK
                     {
                     sc=(DroolsTree)input.LT(1);
-                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1355); 
+                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1527); 
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:265:60: (pc= VT_PAREN_CHUNK )?
-            int alt33=2;
-            int LA33_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:296:60: (pc= VT_PAREN_CHUNK )?
+            int alt37=2;
+            int LA37_0 = input.LA(1);
 
-            if ( (LA33_0==VT_PAREN_CHUNK) ) {
-                alt33=1;
+            if ( (LA37_0==VT_PAREN_CHUNK) ) {
+                alt37=1;
             }
-            switch (alt33) {
+            switch (alt37) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:265:60: pc= VT_PAREN_CHUNK
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:296:60: pc= VT_PAREN_CHUNK
                     {
                     pc=(DroolsTree)input.LT(1);
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain1360); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain1532); 
 
                     }
                     break;
@@ -2736,18 +3027,18 @@
 
             	DeclarativeInvokerDescr declarativeInvokerResult = factory.createExpressionChain(start, id, sc, pc);	
             		((from_source_clause_scope)from_source_clause_stack.peek()).accessorDescr.addInvoker(declarativeInvokerResult);	
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:268:3: ( expression_chain )?
-            int alt34=2;
-            int LA34_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:299:3: ( expression_chain )?
+            int alt38=2;
+            int LA38_0 = input.LA(1);
 
-            if ( (LA34_0==VT_EXPRESSION_CHAIN) ) {
-                alt34=1;
+            if ( (LA38_0==VT_EXPRESSION_CHAIN) ) {
+                alt38=1;
             }
-            switch (alt34) {
+            switch (alt38) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:268:3: expression_chain
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:299:3: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain1368);
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain1540);
                     expression_chain();
                     _fsp--;
 
@@ -2775,30 +3066,53 @@
 
 
     // $ANTLR start lhs_pattern
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:271:1: lhs_pattern returns [BaseDescr baseDescr] : ^( VT_PATTERN fe= fact_expression ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:302:1: lhs_pattern returns [BaseDescr baseDescr] : ^( VT_PATTERN fe= fact_expression ) (oc= over_clause )? ;
     public final BaseDescr lhs_pattern() throws RecognitionException {
         BaseDescr baseDescr = null;
 
         fact_expression_return fe = null;
 
+        List oc = null;
 
+
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:272:2: ( ^( VT_PATTERN fe= fact_expression ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:272:4: ^( VT_PATTERN fe= fact_expression )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:303:2: ( ^( VT_PATTERN fe= fact_expression ) (oc= over_clause )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:303:4: ^( VT_PATTERN fe= fact_expression ) (oc= over_clause )?
             {
-            match(input,VT_PATTERN,FOLLOW_VT_PATTERN_in_lhs_pattern1386); 
+            match(input,VT_PATTERN,FOLLOW_VT_PATTERN_in_lhs_pattern1558); 
 
             match(input, Token.DOWN, null); 
-            pushFollow(FOLLOW_fact_expression_in_lhs_pattern1390);
+            pushFollow(FOLLOW_fact_expression_in_lhs_pattern1562);
             fe=fact_expression();
             _fsp--;
 
 
             match(input, Token.UP, null); 
-            	baseDescr = fe.descr;	
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:303:39: (oc= over_clause )?
+            int alt39=2;
+            int LA39_0 = input.LA(1);
 
+            if ( (LA39_0==OVER) ) {
+                alt39=1;
             }
+            switch (alt39) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:303:39: oc= over_clause
+                    {
+                    pushFollow(FOLLOW_over_clause_in_lhs_pattern1567);
+                    oc=over_clause();
+                    _fsp--;
 
+
+                    }
+                    break;
+
+            }
+
+            	baseDescr = factory.setupBehavior(fe.descr, oc);	
+
+            }
+
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -2810,12 +3124,117 @@
     }
     // $ANTLR end lhs_pattern
 
+
+    // $ANTLR start over_clause
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:307:1: over_clause returns [List behaviorList] : ^( OVER (oe= over_element )+ ) ;
+    public final List over_clause() throws RecognitionException {
+        List behaviorList = null;
+
+        BehaviorDescr oe = null;
+
+
+        behaviorList = new LinkedList();
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:309:2: ( ^( OVER (oe= over_element )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:309:4: ^( OVER (oe= over_element )+ )
+            {
+            match(input,OVER,FOLLOW_OVER_in_over_clause1592); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:309:11: (oe= over_element )+
+            int cnt40=0;
+            loop40:
+            do {
+                int alt40=2;
+                int LA40_0 = input.LA(1);
+
+                if ( (LA40_0==VT_BEHAVIOR) ) {
+                    alt40=1;
+                }
+
+
+                switch (alt40) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:309:12: oe= over_element
+            	    {
+            	    pushFollow(FOLLOW_over_element_in_over_clause1597);
+            	    oe=over_element();
+            	    _fsp--;
+
+            	    behaviorList.add(oe);
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt40 >= 1 ) break loop40;
+                        EarlyExitException eee =
+                            new EarlyExitException(40, input);
+                        throw eee;
+                }
+                cnt40++;
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return behaviorList;
+    }
+    // $ANTLR end over_clause
+
+
+    // $ANTLR start over_element
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:312:1: over_element returns [BehaviorDescr behavior] : ^( VT_BEHAVIOR ID id2= ID pc= VT_PAREN_CHUNK ) ;
+    public final BehaviorDescr over_element() throws RecognitionException {
+        BehaviorDescr behavior = null;
+
+        DroolsTree id2=null;
+        DroolsTree pc=null;
+
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:313:2: ( ^( VT_BEHAVIOR ID id2= ID pc= VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:313:4: ^( VT_BEHAVIOR ID id2= ID pc= VT_PAREN_CHUNK )
+            {
+            match(input,VT_BEHAVIOR,FOLLOW_VT_BEHAVIOR_in_over_element1618); 
+
+            match(input, Token.DOWN, null); 
+            match(input,ID,FOLLOW_ID_in_over_element1620); 
+            id2=(DroolsTree)input.LT(1);
+            match(input,ID,FOLLOW_ID_in_over_element1624); 
+            pc=(DroolsTree)input.LT(1);
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_over_element1628); 
+
+            match(input, Token.UP, null); 
+            	behavior = factory.createBehavior(id2,pc);	
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return behavior;
+    }
+    // $ANTLR end over_element
+
     public static class fact_expression_return extends TreeRuleReturnScope {
         public BaseDescr descr;
     };
 
     // $ANTLR start fact_expression
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:276: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 );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:317: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_M!
 EMBEROF (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);
@@ -2850,183 +3269,183 @@
         	List<BaseDescr> exprList = new LinkedList<BaseDescr>();
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:279: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;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:320: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_exp!
 ression ) | ^(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 alt53=28;
             switch ( input.LA(1) ) {
             case VT_FACT:
                 {
-                alt47=1;
+                alt53=1;
                 }
                 break;
             case VT_FACT_BINDING:
                 {
-                alt47=2;
+                alt53=2;
                 }
                 break;
             case VT_FACT_OR:
                 {
-                alt47=3;
+                alt53=3;
                 }
                 break;
             case VT_FIELD:
                 {
-                alt47=4;
+                alt53=4;
                 }
                 break;
             case VT_BIND_FIELD:
                 {
-                alt47=5;
+                alt53=5;
                 }
                 break;
             case VK_EVAL:
                 {
-                alt47=6;
+                alt53=6;
                 }
                 break;
             case EQUAL:
                 {
-                alt47=7;
+                alt53=7;
                 }
                 break;
             case NOT_EQUAL:
                 {
-                alt47=8;
+                alt53=8;
                 }
                 break;
             case GREATER:
                 {
-                alt47=9;
+                alt53=9;
                 }
                 break;
             case GREATER_EQUAL:
                 {
-                alt47=10;
+                alt53=10;
                 }
                 break;
             case LESS:
                 {
-                alt47=11;
+                alt53=11;
                 }
                 break;
             case LESS_EQUAL:
                 {
-                alt47=12;
+                alt53=12;
                 }
                 break;
             case VK_CONTAINS:
                 {
-                alt47=13;
+                alt53=13;
                 }
                 break;
             case VK_EXCLUDES:
                 {
-                alt47=14;
+                alt53=14;
                 }
                 break;
             case VK_MATCHES:
                 {
-                alt47=15;
+                alt53=15;
                 }
                 break;
             case VK_SOUNDSLIKE:
                 {
-                alt47=16;
+                alt53=16;
                 }
                 break;
             case VK_MEMBEROF:
                 {
-                alt47=17;
+                alt53=17;
                 }
                 break;
             case ID:
                 {
-                alt47=18;
+                alt53=18;
                 }
                 break;
             case VK_IN:
                 {
-                alt47=19;
+                alt53=19;
                 }
                 break;
             case DOUBLE_PIPE:
                 {
-                alt47=20;
+                alt53=20;
                 }
                 break;
             case DOUBLE_AMPER:
                 {
-                alt47=21;
+                alt53=21;
                 }
                 break;
             case VT_ACCESSOR_PATH:
                 {
-                alt47=22;
+                alt53=22;
                 }
                 break;
             case STRING:
                 {
-                alt47=23;
+                alt53=23;
                 }
                 break;
             case INT:
                 {
-                alt47=24;
+                alt53=24;
                 }
                 break;
             case FLOAT:
                 {
-                alt47=25;
+                alt53=25;
                 }
                 break;
             case BOOL:
                 {
-                alt47=26;
+                alt53=26;
                 }
                 break;
             case NULL:
                 {
-                alt47=27;
+                alt53=27;
                 }
                 break;
             case VT_PAREN_CHUNK:
                 {
-                alt47=28;
+                alt53=28;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("276: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);
+                    new NoViableAltException("317: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 );", 53, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt47) {
+            switch (alt53) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:279:5: ^( VT_FACT pt= pattern_type (fe= fact_expression )* )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:320:5: ^( VT_FACT pt= pattern_type (fe= fact_expression )* )
                     {
-                    match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression1413); 
+                    match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression1651); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_pattern_type_in_fact_expression1417);
+                    pushFollow(FOLLOW_pattern_type_in_fact_expression1655);
                     pt=pattern_type();
                     _fsp--;
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:279:31: (fe= fact_expression )*
-                    loop35:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:320:31: (fe= fact_expression )*
+                    loop41:
                     do {
-                        int alt35=2;
-                        int LA35_0 = input.LA(1);
+                        int alt41=2;
+                        int LA41_0 = input.LA(1);
 
-                        if ( (LA35_0==VT_FACT||LA35_0==VT_PAREN_CHUNK||(LA35_0>=VT_FACT_BINDING && LA35_0<=VT_ACCESSOR_PATH)||(LA35_0>=VK_EVAL && LA35_0<=VK_MEMBEROF)||LA35_0==VK_IN||LA35_0==ID||LA35_0==STRING||(LA35_0>=BOOL && LA35_0<=DOUBLE_AMPER)||(LA35_0>=EQUAL && LA35_0<=NOT_EQUAL)||(LA35_0>=FLOAT && LA35_0<=NULL)) ) {
-                            alt35=1;
+                        if ( (LA41_0==VT_FACT||LA41_0==VT_PAREN_CHUNK||(LA41_0>=VT_FACT_BINDING && LA41_0<=VT_ACCESSOR_PATH)||(LA41_0>=VK_EVAL && LA41_0<=VK_MEMBEROF)||LA41_0==VK_IN||LA41_0==ID||LA41_0==STRING||(LA41_0>=BOOL && LA41_0<=DOUBLE_AMPER)||(LA41_0>=EQUAL && LA41_0<=NOT_EQUAL)||(LA41_0>=FLOAT && LA41_0<=NULL)) ) {
+                            alt41=1;
                         }
 
 
-                        switch (alt35) {
+                        switch (alt41) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:279:32: fe= fact_expression
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:320:32: fe= fact_expression
                     	    {
-                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression1422);
+                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression1660);
                     	    fe=fact_expression();
                     	    _fsp--;
 
@@ -3036,7 +3455,7 @@
                     	    break;
 
                     	default :
-                    	    break loop35;
+                    	    break loop41;
                         }
                     } while (true);
 
@@ -3047,14 +3466,14 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:281:4: ^( VT_FACT_BINDING label= VT_LABEL fact= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:322:4: ^( VT_FACT_BINDING label= VT_LABEL fact= fact_expression )
                     {
-                    match(input,VT_FACT_BINDING,FOLLOW_VT_FACT_BINDING_in_fact_expression1436); 
+                    match(input,VT_FACT_BINDING,FOLLOW_VT_FACT_BINDING_in_fact_expression1674); 
 
                     match(input, Token.DOWN, null); 
                     label=(DroolsTree)input.LT(1);
-                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression1440); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1444);
+                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression1678); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1682);
                     fact=fact_expression();
                     _fsp--;
 
@@ -3065,17 +3484,17 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:283:4: ^(start= VT_FACT_OR left= fact_expression right= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:324:4: ^(start= VT_FACT_OR left= fact_expression right= fact_expression )
                     {
                     start=(DroolsTree)input.LT(1);
-                    match(input,VT_FACT_OR,FOLLOW_VT_FACT_OR_in_fact_expression1456); 
+                    match(input,VT_FACT_OR,FOLLOW_VT_FACT_OR_in_fact_expression1694); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1460);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1698);
                     left=fact_expression();
                     _fsp--;
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1464);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1702);
                     right=fact_expression();
                     _fsp--;
 
@@ -3086,27 +3505,27 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:286:4: ^( VT_FIELD field= field_element (fe= fact_expression )? )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:327:4: ^( VT_FIELD field= field_element (fe= fact_expression )? )
                     {
-                    match(input,VT_FIELD,FOLLOW_VT_FIELD_in_fact_expression1475); 
+                    match(input,VT_FIELD,FOLLOW_VT_FIELD_in_fact_expression1713); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_field_element_in_fact_expression1479);
+                    pushFollow(FOLLOW_field_element_in_fact_expression1717);
                     field=field_element();
                     _fsp--;
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:286:37: (fe= fact_expression )?
-                    int alt36=2;
-                    int LA36_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:327:37: (fe= fact_expression )?
+                    int alt42=2;
+                    int LA42_0 = input.LA(1);
 
-                    if ( (LA36_0==VT_FACT||LA36_0==VT_PAREN_CHUNK||(LA36_0>=VT_FACT_BINDING && LA36_0<=VT_ACCESSOR_PATH)||(LA36_0>=VK_EVAL && LA36_0<=VK_MEMBEROF)||LA36_0==VK_IN||LA36_0==ID||LA36_0==STRING||(LA36_0>=BOOL && LA36_0<=DOUBLE_AMPER)||(LA36_0>=EQUAL && LA36_0<=NOT_EQUAL)||(LA36_0>=FLOAT && LA36_0<=NULL)) ) {
-                        alt36=1;
+                    if ( (LA42_0==VT_FACT||LA42_0==VT_PAREN_CHUNK||(LA42_0>=VT_FACT_BINDING && LA42_0<=VT_ACCESSOR_PATH)||(LA42_0>=VK_EVAL && LA42_0<=VK_MEMBEROF)||LA42_0==VK_IN||LA42_0==ID||LA42_0==STRING||(LA42_0>=BOOL && LA42_0<=DOUBLE_AMPER)||(LA42_0>=EQUAL && LA42_0<=NOT_EQUAL)||(LA42_0>=FLOAT && LA42_0<=NULL)) ) {
+                        alt42=1;
                     }
-                    switch (alt36) {
+                    switch (alt42) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:286:37: fe= fact_expression
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:327:37: fe= fact_expression
                             {
-                            pushFollow(FOLLOW_fact_expression_in_fact_expression1483);
+                            pushFollow(FOLLOW_fact_expression_in_fact_expression1721);
                             fe=fact_expression();
                             _fsp--;
 
@@ -3127,14 +3546,14 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:292:4: ^( VT_BIND_FIELD label= VT_LABEL fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:333:4: ^( VT_BIND_FIELD label= VT_LABEL fe= fact_expression )
                     {
-                    match(input,VT_BIND_FIELD,FOLLOW_VT_BIND_FIELD_in_fact_expression1494); 
+                    match(input,VT_BIND_FIELD,FOLLOW_VT_BIND_FIELD_in_fact_expression1732); 
 
                     match(input, Token.DOWN, null); 
                     label=(DroolsTree)input.LT(1);
-                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression1498); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1502);
+                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression1736); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1740);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3145,13 +3564,13 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:295:4: ^( VK_EVAL pc= VT_PAREN_CHUNK )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:336:4: ^( VK_EVAL pc= VT_PAREN_CHUNK )
                     {
-                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_fact_expression1513); 
+                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_fact_expression1751); 
 
                     match(input, Token.DOWN, null); 
                     pc=(DroolsTree)input.LT(1);
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression1517); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression1755); 
 
                     match(input, Token.UP, null); 
                     	retval.descr = factory.createPredicate(pc);	
@@ -3159,13 +3578,13 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:298:4: ^(op= EQUAL fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:339:4: ^(op= EQUAL fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,EQUAL,FOLLOW_EQUAL_in_fact_expression1530); 
+                    match(input,EQUAL,FOLLOW_EQUAL_in_fact_expression1768); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1534);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1772);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3176,13 +3595,13 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:300:4: ^(op= NOT_EQUAL fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:341:4: ^(op= NOT_EQUAL fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_fact_expression1546); 
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_fact_expression1784); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1550);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1788);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3193,13 +3612,13 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:302:4: ^(op= GREATER fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:343:4: ^(op= GREATER fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,GREATER,FOLLOW_GREATER_in_fact_expression1562); 
+                    match(input,GREATER,FOLLOW_GREATER_in_fact_expression1800); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1566);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1804);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3210,13 +3629,13 @@
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:304:4: ^(op= GREATER_EQUAL fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:345:4: ^(op= GREATER_EQUAL fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_fact_expression1578); 
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_fact_expression1816); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1582);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1820);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3227,13 +3646,13 @@
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:306:4: ^(op= LESS fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:347:4: ^(op= LESS fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,LESS,FOLLOW_LESS_in_fact_expression1594); 
+                    match(input,LESS,FOLLOW_LESS_in_fact_expression1832); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1598);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1836);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3244,13 +3663,13 @@
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:308:4: ^(op= LESS_EQUAL fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:349:4: ^(op= LESS_EQUAL fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_fact_expression1610); 
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_fact_expression1848); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1614);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1852);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3261,32 +3680,32 @@
                     }
                     break;
                 case 13 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:310:4: ^(op= VK_CONTAINS (not= VK_NOT )? fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:351:4: ^(op= VK_CONTAINS (not= VK_NOT )? fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,VK_CONTAINS,FOLLOW_VK_CONTAINS_in_fact_expression1626); 
+                    match(input,VK_CONTAINS,FOLLOW_VK_CONTAINS_in_fact_expression1864); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:310:24: (not= VK_NOT )?
-                    int alt37=2;
-                    int LA37_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:351:24: (not= VK_NOT )?
+                    int alt43=2;
+                    int LA43_0 = input.LA(1);
 
-                    if ( (LA37_0==VK_NOT) ) {
-                        alt37=1;
+                    if ( (LA43_0==VK_NOT) ) {
+                        alt43=1;
                     }
-                    switch (alt37) {
+                    switch (alt43) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:310:24: not= VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:351:24: not= VK_NOT
                             {
                             not=(DroolsTree)input.LT(1);
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1630); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1868); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1635);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1873);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3297,32 +3716,32 @@
                     }
                     break;
                 case 14 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:312:4: ^(op= VK_EXCLUDES (not= VK_NOT )? fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:353:4: ^(op= VK_EXCLUDES (not= VK_NOT )? fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,VK_EXCLUDES,FOLLOW_VK_EXCLUDES_in_fact_expression1647); 
+                    match(input,VK_EXCLUDES,FOLLOW_VK_EXCLUDES_in_fact_expression1885); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:312:24: (not= VK_NOT )?
-                    int alt38=2;
-                    int LA38_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:353:24: (not= VK_NOT )?
+                    int alt44=2;
+                    int LA44_0 = input.LA(1);
 
-                    if ( (LA38_0==VK_NOT) ) {
-                        alt38=1;
+                    if ( (LA44_0==VK_NOT) ) {
+                        alt44=1;
                     }
-                    switch (alt38) {
+                    switch (alt44) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:312:24: not= VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:353:24: not= VK_NOT
                             {
                             not=(DroolsTree)input.LT(1);
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1651); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1889); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1656);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1894);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3333,32 +3752,32 @@
                     }
                     break;
                 case 15 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:314:4: ^(op= VK_MATCHES (not= VK_NOT )? fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:355:4: ^(op= VK_MATCHES (not= VK_NOT )? fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,VK_MATCHES,FOLLOW_VK_MATCHES_in_fact_expression1668); 
+                    match(input,VK_MATCHES,FOLLOW_VK_MATCHES_in_fact_expression1906); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:314:23: (not= VK_NOT )?
-                    int alt39=2;
-                    int LA39_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:355:23: (not= VK_NOT )?
+                    int alt45=2;
+                    int LA45_0 = input.LA(1);
 
-                    if ( (LA39_0==VK_NOT) ) {
-                        alt39=1;
+                    if ( (LA45_0==VK_NOT) ) {
+                        alt45=1;
                     }
-                    switch (alt39) {
+                    switch (alt45) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:314:23: not= VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:355:23: not= VK_NOT
                             {
                             not=(DroolsTree)input.LT(1);
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1672); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1910); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1677);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1915);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3369,32 +3788,32 @@
                     }
                     break;
                 case 16 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:316:4: ^(op= VK_SOUNDSLIKE (not= VK_NOT )? fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:357:4: ^(op= VK_SOUNDSLIKE (not= VK_NOT )? fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,VK_SOUNDSLIKE,FOLLOW_VK_SOUNDSLIKE_in_fact_expression1689); 
+                    match(input,VK_SOUNDSLIKE,FOLLOW_VK_SOUNDSLIKE_in_fact_expression1927); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:316:26: (not= VK_NOT )?
-                    int alt40=2;
-                    int LA40_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:357:26: (not= VK_NOT )?
+                    int alt46=2;
+                    int LA46_0 = input.LA(1);
 
-                    if ( (LA40_0==VK_NOT) ) {
-                        alt40=1;
+                    if ( (LA46_0==VK_NOT) ) {
+                        alt46=1;
                     }
-                    switch (alt40) {
+                    switch (alt46) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:316:26: not= VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:357:26: not= VK_NOT
                             {
                             not=(DroolsTree)input.LT(1);
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1693); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1931); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1698);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1936);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3405,32 +3824,32 @@
                     }
                     break;
                 case 17 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:318:4: ^(op= VK_MEMBEROF (not= VK_NOT )? fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:4: ^(op= VK_MEMBEROF (not= VK_NOT )? fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,VK_MEMBEROF,FOLLOW_VK_MEMBEROF_in_fact_expression1710); 
+                    match(input,VK_MEMBEROF,FOLLOW_VK_MEMBEROF_in_fact_expression1948); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:318:24: (not= VK_NOT )?
-                    int alt41=2;
-                    int LA41_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:24: (not= VK_NOT )?
+                    int alt47=2;
+                    int LA47_0 = input.LA(1);
 
-                    if ( (LA41_0==VK_NOT) ) {
-                        alt41=1;
+                    if ( (LA47_0==VK_NOT) ) {
+                        alt47=1;
                     }
-                    switch (alt41) {
+                    switch (alt47) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:318:24: not= VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:24: not= VK_NOT
                             {
                             not=(DroolsTree)input.LT(1);
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1714); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1952); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1719);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1957);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3441,51 +3860,51 @@
                     }
                     break;
                 case 18 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:320:4: ^(op= ID (not= VK_NOT )? (param= VT_SQUARE_CHUNK )? fe= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:361:4: ^(op= ID (not= VK_NOT )? (param= VT_SQUARE_CHUNK )? fe= fact_expression )
                     {
                     op=(DroolsTree)input.LT(1);
-                    match(input,ID,FOLLOW_ID_in_fact_expression1731); 
+                    match(input,ID,FOLLOW_ID_in_fact_expression1969); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:320:15: (not= VK_NOT )?
-                    int alt42=2;
-                    int LA42_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:361:15: (not= VK_NOT )?
+                    int alt48=2;
+                    int LA48_0 = input.LA(1);
 
-                    if ( (LA42_0==VK_NOT) ) {
-                        alt42=1;
+                    if ( (LA48_0==VK_NOT) ) {
+                        alt48=1;
                     }
-                    switch (alt42) {
+                    switch (alt48) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:320:15: not= VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:361:15: not= VK_NOT
                             {
                             not=(DroolsTree)input.LT(1);
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1735); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1973); 
 
                             }
                             break;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:320:29: (param= VT_SQUARE_CHUNK )?
-                    int alt43=2;
-                    int LA43_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:361:29: (param= VT_SQUARE_CHUNK )?
+                    int alt49=2;
+                    int LA49_0 = input.LA(1);
 
-                    if ( (LA43_0==VT_SQUARE_CHUNK) ) {
-                        alt43=1;
+                    if ( (LA49_0==VT_SQUARE_CHUNK) ) {
+                        alt49=1;
                     }
-                    switch (alt43) {
+                    switch (alt49) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:320:29: param= VT_SQUARE_CHUNK
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:361:29: param= VT_SQUARE_CHUNK
                             {
                             param=(DroolsTree)input.LT(1);
-                            match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1740); 
+                            match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1978); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1745);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1983);
                     fe=fact_expression();
                     _fsp--;
 
@@ -3496,47 +3915,47 @@
                     }
                     break;
                 case 19 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:323:4: ^( VK_IN (not= VK_NOT )? (fe= fact_expression )+ )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:4: ^( VK_IN (not= VK_NOT )? (fe= fact_expression )+ )
                     {
-                    match(input,VK_IN,FOLLOW_VK_IN_in_fact_expression1756); 
+                    match(input,VK_IN,FOLLOW_VK_IN_in_fact_expression1994); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:323:15: (not= VK_NOT )?
-                    int alt44=2;
-                    int LA44_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:15: (not= VK_NOT )?
+                    int alt50=2;
+                    int LA50_0 = input.LA(1);
 
-                    if ( (LA44_0==VK_NOT) ) {
-                        alt44=1;
+                    if ( (LA50_0==VK_NOT) ) {
+                        alt50=1;
                     }
-                    switch (alt44) {
+                    switch (alt50) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:323:15: not= VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:15: not= VK_NOT
                             {
                             not=(DroolsTree)input.LT(1);
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1760); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1998); 
 
                             }
                             break;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:323:24: (fe= fact_expression )+
-                    int cnt45=0;
-                    loop45:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:24: (fe= fact_expression )+
+                    int cnt51=0;
+                    loop51:
                     do {
-                        int alt45=2;
-                        int LA45_0 = input.LA(1);
+                        int alt51=2;
+                        int LA51_0 = input.LA(1);
 
-                        if ( (LA45_0==VT_FACT||LA45_0==VT_PAREN_CHUNK||(LA45_0>=VT_FACT_BINDING && LA45_0<=VT_ACCESSOR_PATH)||(LA45_0>=VK_EVAL && LA45_0<=VK_MEMBEROF)||LA45_0==VK_IN||LA45_0==ID||LA45_0==STRING||(LA45_0>=BOOL && LA45_0<=DOUBLE_AMPER)||(LA45_0>=EQUAL && LA45_0<=NOT_EQUAL)||(LA45_0>=FLOAT && LA45_0<=NULL)) ) {
-                            alt45=1;
+                        if ( (LA51_0==VT_FACT||LA51_0==VT_PAREN_CHUNK||(LA51_0>=VT_FACT_BINDING && LA51_0<=VT_ACCESSOR_PATH)||(LA51_0>=VK_EVAL && LA51_0<=VK_MEMBEROF)||LA51_0==VK_IN||LA51_0==ID||LA51_0==STRING||(LA51_0>=BOOL && LA51_0<=DOUBLE_AMPER)||(LA51_0>=EQUAL && LA51_0<=NOT_EQUAL)||(LA51_0>=FLOAT && LA51_0<=NULL)) ) {
+                            alt51=1;
                         }
 
 
-                        switch (alt45) {
+                        switch (alt51) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:323:25: fe= fact_expression
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:25: fe= fact_expression
                     	    {
-                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression1766);
+                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression2004);
                     	    fe=fact_expression();
                     	    _fsp--;
 
@@ -3546,12 +3965,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt45 >= 1 ) break loop45;
+                    	    if ( cnt51 >= 1 ) break loop51;
                                 EarlyExitException eee =
-                                    new EarlyExitException(45, input);
+                                    new EarlyExitException(51, input);
                                 throw eee;
                         }
-                        cnt45++;
+                        cnt51++;
                     } while (true);
 
 
@@ -3561,16 +3980,16 @@
                     }
                     break;
                 case 20 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:326:4: ^( DOUBLE_PIPE left= fact_expression right= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:367:4: ^( DOUBLE_PIPE left= fact_expression right= fact_expression )
                     {
-                    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_expression1781); 
+                    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_expression2019); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1785);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression2023);
                     left=fact_expression();
                     _fsp--;
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1789);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression2027);
                     right=fact_expression();
                     _fsp--;
 
@@ -3581,16 +4000,16 @@
                     }
                     break;
                 case 21 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:328:4: ^( DOUBLE_AMPER left= fact_expression right= fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:369:4: ^( DOUBLE_AMPER left= fact_expression right= fact_expression )
                     {
-                    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_fact_expression1799); 
+                    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_fact_expression2037); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1803);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression2041);
                     left=fact_expression();
                     _fsp--;
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1807);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression2045);
                     right=fact_expression();
                     _fsp--;
 
@@ -3601,28 +4020,28 @@
                     }
                     break;
                 case 22 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:331:4: ^( VT_ACCESSOR_PATH (ae= accessor_element )+ )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:372:4: ^( VT_ACCESSOR_PATH (ae= accessor_element )+ )
                     {
-                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1818); 
+                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression2056); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:331:23: (ae= accessor_element )+
-                    int cnt46=0;
-                    loop46:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:372:23: (ae= accessor_element )+
+                    int cnt52=0;
+                    loop52:
                     do {
-                        int alt46=2;
-                        int LA46_0 = input.LA(1);
+                        int alt52=2;
+                        int LA52_0 = input.LA(1);
 
-                        if ( (LA46_0==VT_ACCESSOR_ELEMENT) ) {
-                            alt46=1;
+                        if ( (LA52_0==VT_ACCESSOR_ELEMENT) ) {
+                            alt52=1;
                         }
 
 
-                        switch (alt46) {
+                        switch (alt52) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:331:24: ae= accessor_element
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:372:24: ae= accessor_element
                     	    {
-                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression1823);
+                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression2061);
                     	    ae=accessor_element();
                     	    _fsp--;
 
@@ -3632,12 +4051,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt46 >= 1 ) break loop46;
+                    	    if ( cnt52 >= 1 ) break loop52;
                                 EarlyExitException eee =
-                                    new EarlyExitException(46, input);
+                                    new EarlyExitException(52, input);
                                 throw eee;
                         }
-                        cnt46++;
+                        cnt52++;
                     } while (true);
 
 
@@ -3647,55 +4066,55 @@
                     }
                     break;
                 case 23 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:333:4: s= STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:374:4: s= STRING
                     {
                     s=(DroolsTree)input.LT(1);
-                    match(input,STRING,FOLLOW_STRING_in_fact_expression1838); 
+                    match(input,STRING,FOLLOW_STRING_in_fact_expression2076); 
                     	retval.descr = factory.createStringLiteralRestriction(s);	
 
                     }
                     break;
                 case 24 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:335:4: i= INT
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:376:4: i= INT
                     {
                     i=(DroolsTree)input.LT(1);
-                    match(input,INT,FOLLOW_INT_in_fact_expression1848); 
+                    match(input,INT,FOLLOW_INT_in_fact_expression2086); 
                     	retval.descr = factory.createIntLiteralRestriction(i);	
 
                     }
                     break;
                 case 25 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:337:4: f= FLOAT
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:378:4: f= FLOAT
                     {
                     f=(DroolsTree)input.LT(1);
-                    match(input,FLOAT,FOLLOW_FLOAT_in_fact_expression1858); 
+                    match(input,FLOAT,FOLLOW_FLOAT_in_fact_expression2096); 
                     	retval.descr = factory.createFloatLiteralRestriction(f);	
 
                     }
                     break;
                 case 26 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:339:4: b= BOOL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:380:4: b= BOOL
                     {
                     b=(DroolsTree)input.LT(1);
-                    match(input,BOOL,FOLLOW_BOOL_in_fact_expression1868); 
+                    match(input,BOOL,FOLLOW_BOOL_in_fact_expression2106); 
                     	retval.descr = factory.createBoolLiteralRestriction(b);	
 
                     }
                     break;
                 case 27 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:341:4: n= NULL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:382:4: n= NULL
                     {
                     n=(DroolsTree)input.LT(1);
-                    match(input,NULL,FOLLOW_NULL_in_fact_expression1878); 
+                    match(input,NULL,FOLLOW_NULL_in_fact_expression2116); 
                     	retval.descr = factory.createNullLiteralRestriction(n);	
 
                     }
                     break;
                 case 28 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:343:4: pc= VT_PAREN_CHUNK
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:384:4: pc= VT_PAREN_CHUNK
                     {
                     pc=(DroolsTree)input.LT(1);
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression1888); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression2126); 
                     	retval.descr = factory.createReturnValue(pc);	
 
                     }
@@ -3715,7 +4134,7 @@
 
 
     // $ANTLR start field_element
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:347:1: field_element returns [FieldConstraintDescr element] : ^( VT_ACCESSOR_PATH (ae= accessor_element )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:388:1: field_element returns [FieldConstraintDescr element] : ^( VT_ACCESSOR_PATH (ae= accessor_element )+ ) ;
     public final FieldConstraintDescr field_element() throws RecognitionException {
         FieldConstraintDescr element = null;
 
@@ -3726,29 +4145,29 @@
         	List<BaseDescr> aeList = new LinkedList<BaseDescr>();
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:350:3: ( ^( VT_ACCESSOR_PATH (ae= accessor_element )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:350:5: ^( VT_ACCESSOR_PATH (ae= accessor_element )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:391:3: ( ^( VT_ACCESSOR_PATH (ae= accessor_element )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:391:5: ^( VT_ACCESSOR_PATH (ae= accessor_element )+ )
             {
-            match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_field_element1910); 
+            match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_field_element2148); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:350:24: (ae= accessor_element )+
-            int cnt48=0;
-            loop48:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:391:24: (ae= accessor_element )+
+            int cnt54=0;
+            loop54:
             do {
-                int alt48=2;
-                int LA48_0 = input.LA(1);
+                int alt54=2;
+                int LA54_0 = input.LA(1);
 
-                if ( (LA48_0==VT_ACCESSOR_ELEMENT) ) {
-                    alt48=1;
+                if ( (LA54_0==VT_ACCESSOR_ELEMENT) ) {
+                    alt54=1;
                 }
 
 
-                switch (alt48) {
+                switch (alt54) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:350:25: ae= accessor_element
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:391:25: ae= accessor_element
             	    {
-            	    pushFollow(FOLLOW_accessor_element_in_field_element1915);
+            	    pushFollow(FOLLOW_accessor_element_in_field_element2153);
             	    ae=accessor_element();
             	    _fsp--;
 
@@ -3758,12 +4177,12 @@
             	    break;
 
             	default :
-            	    if ( cnt48 >= 1 ) break loop48;
+            	    if ( cnt54 >= 1 ) break loop54;
                         EarlyExitException eee =
-                            new EarlyExitException(48, input);
+                            new EarlyExitException(54, input);
                         throw eee;
                 }
-                cnt48++;
+                cnt54++;
             } while (true);
 
 
@@ -3785,7 +4204,7 @@
 
 
     // $ANTLR start accessor_element
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:354:1: accessor_element returns [BaseDescr element] : ^( VT_ACCESSOR_ELEMENT id= ID (sc+= VT_SQUARE_CHUNK )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:395:1: accessor_element returns [BaseDescr element] : ^( VT_ACCESSOR_ELEMENT id= ID (sc+= VT_SQUARE_CHUNK )* ) ;
     public final BaseDescr accessor_element() throws RecognitionException {
         BaseDescr element = null;
 
@@ -3794,31 +4213,31 @@
         List list_sc=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:355:2: ( ^( VT_ACCESSOR_ELEMENT id= ID (sc+= VT_SQUARE_CHUNK )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:355:4: ^( VT_ACCESSOR_ELEMENT id= ID (sc+= VT_SQUARE_CHUNK )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:396:2: ( ^( VT_ACCESSOR_ELEMENT id= ID (sc+= VT_SQUARE_CHUNK )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:396:4: ^( VT_ACCESSOR_ELEMENT id= ID (sc+= VT_SQUARE_CHUNK )* )
             {
-            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1939); 
+            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element2177); 
 
             match(input, Token.DOWN, null); 
             id=(DroolsTree)input.LT(1);
-            match(input,ID,FOLLOW_ID_in_accessor_element1943); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:355:34: (sc+= VT_SQUARE_CHUNK )*
-            loop49:
+            match(input,ID,FOLLOW_ID_in_accessor_element2181); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:396:34: (sc+= VT_SQUARE_CHUNK )*
+            loop55:
             do {
-                int alt49=2;
-                int LA49_0 = input.LA(1);
+                int alt55=2;
+                int LA55_0 = input.LA(1);
 
-                if ( (LA49_0==VT_SQUARE_CHUNK) ) {
-                    alt49=1;
+                if ( (LA55_0==VT_SQUARE_CHUNK) ) {
+                    alt55=1;
                 }
 
 
-                switch (alt49) {
+                switch (alt55) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:355:34: sc+= VT_SQUARE_CHUNK
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:396:34: sc+= VT_SQUARE_CHUNK
             	    {
             	    sc=(DroolsTree)input.LT(1);
-            	    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1947); 
+            	    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element2185); 
             	    if (list_sc==null) list_sc=new ArrayList();
             	    list_sc.add(sc);
 
@@ -3827,7 +4246,7 @@
             	    break;
 
             	default :
-            	    break loop49;
+            	    break loop55;
                 }
             } while (true);
 
@@ -3850,7 +4269,7 @@
 
 
     // $ANTLR start pattern_type
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:359:1: pattern_type returns [BaseDescr dataType] : ^( VT_PATTERN_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:400: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;
 
@@ -3860,30 +4279,30 @@
         List list_rightList=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:360: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:360:4: ^( VT_PATTERN_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:401:2: ( ^( VT_PATTERN_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:401:4: ^( VT_PATTERN_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* )
             {
-            match(input,VT_PATTERN_TYPE,FOLLOW_VT_PATTERN_TYPE_in_pattern_type1968); 
+            match(input,VT_PATTERN_TYPE,FOLLOW_VT_PATTERN_TYPE_in_pattern_type2206); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:360:28: (idList+= ID )+
-            int cnt50=0;
-            loop50:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:401:28: (idList+= ID )+
+            int cnt56=0;
+            loop56:
             do {
-                int alt50=2;
-                int LA50_0 = input.LA(1);
+                int alt56=2;
+                int LA56_0 = input.LA(1);
 
-                if ( (LA50_0==ID) ) {
-                    alt50=1;
+                if ( (LA56_0==ID) ) {
+                    alt56=1;
                 }
 
 
-                switch (alt50) {
+                switch (alt56) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:360:28: idList+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:401:28: idList+= ID
             	    {
             	    idList=(DroolsTree)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_pattern_type1972); 
+            	    match(input,ID,FOLLOW_ID_in_pattern_type2210); 
             	    if (list_idList==null) list_idList=new ArrayList();
             	    list_idList.add(idList);
 
@@ -3892,32 +4311,32 @@
             	    break;
 
             	default :
-            	    if ( cnt50 >= 1 ) break loop50;
+            	    if ( cnt56 >= 1 ) break loop56;
                         EarlyExitException eee =
-                            new EarlyExitException(50, input);
+                            new EarlyExitException(56, input);
                         throw eee;
                 }
-                cnt50++;
+                cnt56++;
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:360:34: ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
-            loop51:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:401:34: ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
+            loop57:
             do {
-                int alt51=2;
-                int LA51_0 = input.LA(1);
+                int alt57=2;
+                int LA57_0 = input.LA(1);
 
-                if ( (LA51_0==LEFT_SQUARE) ) {
-                    alt51=1;
+                if ( (LA57_0==LEFT_SQUARE) ) {
+                    alt57=1;
                 }
 
 
-                switch (alt51) {
+                switch (alt57) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:360:35: LEFT_SQUARE rightList+= RIGHT_SQUARE
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:401:35: LEFT_SQUARE rightList+= RIGHT_SQUARE
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_pattern_type1976); 
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_pattern_type2214); 
             	    rightList=(DroolsTree)input.LT(1);
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_pattern_type1980); 
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_pattern_type2218); 
             	    if (list_rightList==null) list_rightList=new ArrayList();
             	    list_rightList.add(rightList);
 
@@ -3926,7 +4345,7 @@
             	    break;
 
             	default :
-            	    break loop51;
+            	    break loop57;
                 }
             } while (true);
 
@@ -3949,7 +4368,7 @@
 
 
     // $ANTLR start data_type
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:364:1: data_type returns [BaseDescr dataType] : ^( VT_DATA_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:405: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;
 
@@ -3959,30 +4378,30 @@
         List list_rightList=null;
 
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:365: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:365:4: ^( VT_DATA_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:406:2: ( ^( VT_DATA_TYPE (idList+= ID )+ ( LEFT_SQUARE rightList+= RIGHT_SQUARE )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:406: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,VT_DATA_TYPE,FOLLOW_VT_DATA_TYPE_in_data_type2240); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:365:25: (idList+= ID )+
-            int cnt52=0;
-            loop52:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:406:25: (idList+= ID )+
+            int cnt58=0;
+            loop58:
             do {
-                int alt52=2;
-                int LA52_0 = input.LA(1);
+                int alt58=2;
+                int LA58_0 = input.LA(1);
 
-                if ( (LA52_0==ID) ) {
-                    alt52=1;
+                if ( (LA58_0==ID) ) {
+                    alt58=1;
                 }
 
 
-                switch (alt52) {
+                switch (alt58) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:365:25: idList+= ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:406:25: idList+= ID
             	    {
             	    idList=(DroolsTree)input.LT(1);
-            	    match(input,ID,FOLLOW_ID_in_data_type2006); 
+            	    match(input,ID,FOLLOW_ID_in_data_type2244); 
             	    if (list_idList==null) list_idList=new ArrayList();
             	    list_idList.add(idList);
 
@@ -3991,32 +4410,32 @@
             	    break;
 
             	default :
-            	    if ( cnt52 >= 1 ) break loop52;
+            	    if ( cnt58 >= 1 ) break loop58;
                         EarlyExitException eee =
-                            new EarlyExitException(52, input);
+                            new EarlyExitException(58, input);
                         throw eee;
                 }
-                cnt52++;
+                cnt58++;
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:365:31: ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
-            loop53:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:406:31: ( LEFT_SQUARE rightList+= RIGHT_SQUARE )*
+            loop59:
             do {
-                int alt53=2;
-                int LA53_0 = input.LA(1);
+                int alt59=2;
+                int LA59_0 = input.LA(1);
 
-                if ( (LA53_0==LEFT_SQUARE) ) {
-                    alt53=1;
+                if ( (LA59_0==LEFT_SQUARE) ) {
+                    alt59=1;
                 }
 
 
-                switch (alt53) {
+                switch (alt59) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:365:32: LEFT_SQUARE rightList+= RIGHT_SQUARE
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g:406:32: LEFT_SQUARE rightList+= RIGHT_SQUARE
             	    {
-            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_data_type2010); 
+            	    match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_data_type2248); 
             	    rightList=(DroolsTree)input.LT(1);
-            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_data_type2014); 
+            	    match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_data_type2252); 
             	    if (list_rightList==null) list_rightList=new ArrayList();
             	    list_rightList.add(rightList);
 
@@ -4025,7 +4444,7 @@
             	    break;
 
             	default :
-            	    break loop53;
+            	    break loop59;
                 }
             } while (true);
 
@@ -4050,12 +4469,12 @@
  
 
     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[]{0xB67FF80000000028L,0x0000000000000001L});
-    public static final BitSet FOLLOW_statement_in_compilation_unit53 = new BitSet(new long[]{0xB67FF80000000028L,0x0000000000000001L});
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit51 = new BitSet(new long[]{0xD9FFE00000000028L,0x0000000000000007L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit53 = new BitSet(new long[]{0xD9FFE00000000028L,0x0000000000000007L});
     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,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_package_id106 = new BitSet(new long[]{0x0000000000000008L,0x0000000001000000L});
     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});
@@ -4064,211 +4483,233 @@
     public static final BitSet FOLLOW_template_in_statement175 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_rule_in_statement185 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_query_in_statement195 = new BitSet(new long[]{0x0000000000000002L});
-    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[]{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,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[]{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[]{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,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[]{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,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[]{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[]{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,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,0x0000200000000000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_argument631 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument635 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    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});
-    public static final BitSet FOLLOW_VK_NO_LOOP_in_rule_attribute679 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_BOOL_in_rule_attribute683 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_AGENDA_GROUP_in_rule_attribute695 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_STRING_in_rule_attribute699 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_DURATION_in_rule_attribute710 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_INT_in_rule_attribute714 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute726 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_STRING_in_rule_attribute730 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_AUTO_FOCUS_in_rule_attribute740 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_BOOL_in_rule_attribute744 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute755 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_STRING_in_rule_attribute759 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_DATE_EXPIRES_in_rule_attribute769 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_STRING_in_rule_attribute773 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_ENABLED_in_rule_attribute783 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_BOOL_in_rule_attribute787 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute797 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_STRING_in_rule_attribute801 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute811 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_BOOL_in_rule_attribute815 = new BitSet(new long[]{0x0000000000000008L});
-    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,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,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,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,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,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});
-    public static final BitSet FOLLOW_VK_NOT_in_lhs983 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs987 = new BitSet(new long[]{0x0000000000000008L});
-    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,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,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});
-    public static final BitSet FOLLOW_lhs_in_from_elements1078 = new BitSet(new long[]{0x0000000006000000L});
-    public static final BitSet FOLLOW_accumulate_parts_in_from_elements1088 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_COLLECT_in_from_elements1101 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_from_elements1105 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_ENTRY_POINT_in_from_elements1117 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_ENTRYPOINT_ID_in_from_elements1121 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_from_source_clause_in_from_elements1132 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_parts1153 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_parts1164 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause1187 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_INIT_in_accumulate_init_clause1196 = new BitSet(new long[]{0x0000000000000004L});
-    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,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});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause1259 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause1281 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_accumulate_id_clause1285 = new BitSet(new long[]{0x0000000000080000L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause1289 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_FROM_SOURCE_in_from_source_clause1311 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_from_source_clause1315 = new BitSet(new long[]{0x0000000010080008L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_from_source_clause1319 = new BitSet(new long[]{0x0000000010000008L});
-    public static final BitSet FOLLOW_expression_chain_in_from_source_clause1328 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1347 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_expression_chain1351 = new BitSet(new long[]{0x00000000100C0008L});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1355 = new BitSet(new long[]{0x0000000010080008L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_expression_chain1360 = new BitSet(new long[]{0x0000000010000008L});
-    public static final BitSet FOLLOW_expression_chain_in_expression_chain1368 = new BitSet(new long[]{0x0000000000000008L});
-    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_pattern_type_in_fact_expression1417 = new BitSet(new long[]{0x00000007C0080048L,0x00001BF78440027EL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1422 = new BitSet(new long[]{0x00000007C0080048L,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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});
-    public static final BitSet FOLLOW_EQUAL_in_fact_expression1530 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1534 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_NOT_EQUAL_in_fact_expression1546 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1550 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_GREATER_in_fact_expression1562 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1566 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_GREATER_EQUAL_in_fact_expression1578 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1582 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_LESS_in_fact_expression1594 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1598 = new BitSet(new long[]{0x0000000000000008L});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1740 = new BitSet(new long[]{0x00000007C0080040L,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression1766 = new BitSet(new long[]{0x00000007C0080048L,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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});
-    public static final BitSet FOLLOW_STRING_in_fact_expression1838 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_fact_expression1848 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_fact_expression1858 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BOOL_in_fact_expression1868 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NULL_in_fact_expression1878 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression1888 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_field_element1910 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_accessor_element_in_field_element1915 = new BitSet(new long[]{0x0000000800000008L});
-    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_PATTERN_TYPE_in_pattern_type1968 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_pattern_type1972 = new BitSet(new long[]{0x0000000000000008L,0x0000200000400000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_pattern_type1976 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_pattern_type1980 = new BitSet(new long[]{0x0000000000000008L,0x0000200000000000L});
-    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,0x0000200000400000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_data_type2010 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
-    public static final BitSet FOLLOW_RIGHT_SQUARE_in_data_type2014 = new BitSet(new long[]{0x0000000000000008L,0x0000200000000000L});
+    public static final BitSet FOLLOW_type_declaration_in_statement205 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VK_IMPORT_in_import_statement226 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_import_name_in_import_statement230 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement252 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_FUNCTION_in_function_import_statement254 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement258 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_IMPORT_ID_in_import_name277 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_import_name281 = new BitSet(new long[]{0x0000000000000008L,0x0000000005000000L});
+    public static final BitSet FOLLOW_DOT_STAR_in_import_name286 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_GLOBAL_in_global309 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_global313 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_VT_GLOBAL_ID_in_global317 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_FUNCTION_in_function339 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_function343 = new BitSet(new long[]{0x0000080000000000L});
+    public static final BitSet FOLLOW_VT_FUNCTION_ID_in_function348 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_parameters_in_function352 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_VT_CURLY_CHUNK_in_function356 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_TEMPLATE_in_template381 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_TEMPLATE_ID_in_template385 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_template_slot_in_template394 = new BitSet(new long[]{0x0000000000008000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_END_in_template402 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_SLOT_in_template_slot422 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_template_slot426 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_VT_SLOT_ID_in_template_slot430 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_QUERY_in_query452 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_QUERY_ID_in_query456 = new BitSet(new long[]{0x0000100000400000L});
+    public static final BitSet FOLLOW_parameters_in_query460 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_lhs_block_in_query465 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_END_in_query469 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_RULE_in_rule491 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_RULE_ID_in_rule495 = new BitSet(new long[]{0x0400000000030000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule499 = new BitSet(new long[]{0x0400000000020000L});
+    public static final BitSet FOLLOW_when_part_in_rule504 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_VT_RHS_CHUNK_in_rule509 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_WHEN_in_when_part528 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_lhs_block_in_when_part532 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes554 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_ATTRIBUTES_in_rule_attributes556 = new BitSet(new long[]{0x01FFE00000000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes562 = new BitSet(new long[]{0x01FFE00000000008L});
+    public static final BitSet FOLLOW_VT_PARAM_LIST_in_parameters586 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_param_definition_in_parameters591 = new BitSet(new long[]{0x0000004000000008L,0x0000000001000000L});
+    public static final BitSet FOLLOW_data_type_in_param_definition613 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_argument_in_param_definition618 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument638 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_argument641 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_argument645 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_VK_DECLARE_in_type_declaration671 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_TYPE_DECLARE_ID_in_type_declaration675 = new BitSet(new long[]{0x0000000000000000L,0x0000000109000000L});
+    public static final BitSet FOLLOW_decl_metadata_in_type_declaration684 = new BitSet(new long[]{0x0000000000000000L,0x0000000109000000L});
+    public static final BitSet FOLLOW_decl_field_in_type_declaration697 = new BitSet(new long[]{0x0000000000000000L,0x0000000009000000L});
+    public static final BitSet FOLLOW_END_in_type_declaration703 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_AT_in_decl_metadata728 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_decl_metadata732 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_decl_metadata736 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_ID_in_decl_field763 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_decl_field_initialization_in_decl_field767 = new BitSet(new long[]{0x0000004000000000L});
+    public static final BitSet FOLLOW_data_type_in_decl_field772 = new BitSet(new long[]{0x0000000000000008L,0x0000000100000000L});
+    public static final BitSet FOLLOW_decl_metadata_in_decl_field777 = new BitSet(new long[]{0x0000000000000008L,0x0000000100000000L});
+    public static final BitSet FOLLOW_EQUALS_in_decl_field_initialization804 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_decl_field_initialization808 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_SALIENCE_in_rule_attribute831 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_INT_in_rule_attribute836 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_rule_attribute840 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_NO_LOOP_in_rule_attribute851 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute855 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_AGENDA_GROUP_in_rule_attribute867 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute871 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DURATION_in_rule_attribute882 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_INT_in_rule_attribute886 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute898 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute902 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_AUTO_FOCUS_in_rule_attribute912 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute916 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute927 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute931 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DATE_EXPIRES_in_rule_attribute941 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute945 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ENABLED_in_rule_attribute955 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute959 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute969 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute973 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute983 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute987 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DIALECT_in_rule_attribute997 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute1001 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_AND_IMPLICIT_in_lhs_block1026 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs_block1031 = new BitSet(new long[]{0x0000000087800008L,0x000000000001C408L});
+    public static final BitSet FOLLOW_VT_OR_PREFIX_in_lhs1057 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs1062 = new BitSet(new long[]{0x0000000087800008L,0x000000000001C408L});
+    public static final BitSet FOLLOW_VT_OR_INFIX_in_lhs1078 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs1082 = new BitSet(new long[]{0x0000000087800000L,0x000000000001C408L});
+    public static final BitSet FOLLOW_lhs_in_lhs1086 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_AND_PREFIX_in_lhs1098 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs1103 = new BitSet(new long[]{0x0000000087800008L,0x000000000001C408L});
+    public static final BitSet FOLLOW_VT_AND_INFIX_in_lhs1119 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs1123 = new BitSet(new long[]{0x0000000087800000L,0x000000000001C408L});
+    public static final BitSet FOLLOW_lhs_in_lhs1127 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EXISTS_in_lhs1139 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs1143 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_NOT_in_lhs1155 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs1159 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EVAL_in_lhs1171 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_lhs1175 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_FORALL_in_lhs1187 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs1192 = new BitSet(new long[]{0x0000000087800008L,0x000000000001C408L});
+    public static final BitSet FOLLOW_VK_FROM_in_lhs1206 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs1210 = new BitSet(new long[]{0x0000000020000000L,0x0000000000420200L});
+    public static final BitSet FOLLOW_from_elements_in_lhs1214 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs1225 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VK_ACCUMULATE_in_from_elements1246 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_from_elements1250 = new BitSet(new long[]{0x0000000018000000L});
+    public static final BitSet FOLLOW_accumulate_parts_in_from_elements1260 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_COLLECT_in_from_elements1273 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_from_elements1277 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ENTRY_POINT_in_from_elements1289 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_ENTRYPOINT_ID_in_from_elements1293 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_from_source_clause_in_from_elements1304 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_accumulate_parts1325 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_accumulate_parts1336 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause1359 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_INIT_in_accumulate_init_clause1368 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1372 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ACTION_in_accumulate_init_clause1380 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1384 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause1393 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_VK_RESULT_in_accumulate_init_clause1400 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause1404 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause1427 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause1431 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause1453 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause1457 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause1461 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FROM_SOURCE_in_from_source_clause1483 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_from_source_clause1487 = new BitSet(new long[]{0x0000000040100008L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_from_source_clause1491 = new BitSet(new long[]{0x0000000040000008L});
+    public static final BitSet FOLLOW_expression_chain_in_from_source_clause1500 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1519 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_expression_chain1523 = new BitSet(new long[]{0x0000000040180008L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1527 = new BitSet(new long[]{0x0000000040100008L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_expression_chain1532 = new BitSet(new long[]{0x0000000040000008L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain1540 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PATTERN_in_lhs_pattern1558 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_lhs_pattern1562 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_over_clause_in_lhs_pattern1567 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_OVER_in_over_clause1592 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_over_element_in_over_clause1597 = new BitSet(new long[]{0x0000000000200008L});
+    public static final BitSet FOLLOW_VT_BEHAVIOR_in_over_element1618 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_over_element1620 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_over_element1624 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_over_element1628 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FACT_in_fact_expression1651 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_pattern_type_in_fact_expression1655 = new BitSet(new long[]{0x0000001F00100048L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1660 = new BitSet(new long[]{0x0000001F00100048L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_VT_FACT_BINDING_in_fact_expression1674 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1678 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1682 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FACT_OR_in_fact_expression1694 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1698 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1702 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FIELD_in_fact_expression1713 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_field_element_in_fact_expression1717 = new BitSet(new long[]{0x0000001F00100048L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1721 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_BIND_FIELD_in_fact_expression1732 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1736 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1740 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EVAL_in_fact_expression1751 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression1755 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_EQUAL_in_fact_expression1768 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1772 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_fact_expression1784 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1788 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_GREATER_in_fact_expression1800 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1804 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_fact_expression1816 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1820 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_LESS_in_fact_expression1832 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1836 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_fact_expression1848 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1852 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_CONTAINS_in_fact_expression1864 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1868 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1873 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EXCLUDES_in_fact_expression1885 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1889 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1894 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_MATCHES_in_fact_expression1906 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1910 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1915 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_SOUNDSLIKE_in_fact_expression1927 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1931 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1936 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_MEMBEROF_in_fact_expression1948 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1952 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1957 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_ID_in_fact_expression1969 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1973 = new BitSet(new long[]{0x0000001F00180040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1978 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1983 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_IN_in_fact_expression1994 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1998 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2004 = new BitSet(new long[]{0x0000001F00100048L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_expression2019 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2023 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2027 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_fact_expression2037 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2041 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression2045 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression2056 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_accessor_element_in_fact_expression2061 = new BitSet(new long[]{0x0000002000000008L});
+    public static final BitSet FOLLOW_STRING_in_fact_expression2076 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_fact_expression2086 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_fact_expression2096 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_fact_expression2106 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_fact_expression2116 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression2126 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_field_element2148 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_accessor_element_in_field_element2153 = new BitSet(new long[]{0x0000002000000008L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element2177 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accessor_element2181 = new BitSet(new long[]{0x0000000000080008L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element2185 = new BitSet(new long[]{0x0000000000080008L});
+    public static final BitSet FOLLOW_VT_PATTERN_TYPE_in_pattern_type2206 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_pattern_type2210 = new BitSet(new long[]{0x0000000000000008L,0x0004000001000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_pattern_type2214 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_pattern_type2218 = new BitSet(new long[]{0x0000000000000008L,0x0004000000000000L});
+    public static final BitSet FOLLOW_VT_DATA_TYPE_in_data_type2240 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_data_type2244 = new BitSet(new long[]{0x0000000000000008L,0x0004000001000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_data_type2248 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_data_type2252 = new BitSet(new long[]{0x0000000000000008L,0x0004000000000000L});
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DroolsParaphareseTypes.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DroolsParaphareseTypes.java	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/DroolsParaphareseTypes.java	2008-07-22 14:14:46 UTC (rev 21169)
@@ -17,4 +17,5 @@
 	public static int RULE = 7;
 	public static int RULE_ATTRIBUTE = 8;
 	public static int PATTERN = 9;
+	public static int TYPE_DECLARE = 10;
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/lang/descr/DescrFactory.java	2008-07-22 14:14:46 UTC (rev 21169)
@@ -342,6 +342,70 @@
 	}
 
 	/**
+	 * Factory method that creates a TypeDeclarationDescr.
+	 * 
+	 * @param id
+	 *            type declaration descriptior id
+	 * @param declMetadaList
+	 *            metadata list
+	 * @param declFieldList
+	 *            field list
+	 * @return TypeDeclarationDescr filled
+	 */
+	@SuppressWarnings("unchecked")
+	public TypeDeclarationDescr createTypeDeclr(DroolsTree id,
+			List<Map> declMetadaList, List<TypeFieldDescr> declFieldList) {
+		TypeDeclarationDescr typeDeclr = new TypeDeclarationDescr();
+		typeDeclr.setTypeName(id.getText());
+
+		for (Map activeMetadata : declMetadaList) {
+			Entry activeEntry = (Entry) activeMetadata.entrySet().iterator()
+					.next();
+			String chunkData = ((DroolsTree) activeEntry.getValue()).getText();
+			typeDeclr.addMetaAttribute(((DroolsTree) activeEntry.getKey())
+					.getText(), chunkData.substring(1, chunkData.length() - 1)
+					.trim());
+		}
+
+		for (TypeFieldDescr typeFieldDescr : declFieldList) {
+			typeDeclr.addField(typeFieldDescr);
+		}
+		return typeDeclr;
+	}
+
+	/**
+	 * Factory method that creates a TypeFieldDescr.
+	 * 
+	 * @param id
+	 *            type field id
+	 * @param initExpr
+	 *            initial expression
+	 * @param dt
+	 *            data type
+	 * @param declMetadaList
+	 *            metadata list
+	 * @return TypeFieldDescr filled
+	 */
+	@SuppressWarnings("unchecked")
+	public TypeFieldDescr createTypeField(DroolsTree id, String initExpr,
+			BaseDescr dt, List<Map> declMetadaList) {
+		TypeFieldDescr field = new TypeFieldDescr(id.getText());
+		if (null != initExpr) {
+			field.setInitExpr(initExpr);
+		}
+		field.setPattern(new PatternDescr(dt.getText()));
+		for (Map activeMetadata : declMetadaList) {
+			Entry activeEntry = (Entry) activeMetadata.entrySet().iterator()
+					.next();
+			String chunkData = ((DroolsTree) activeEntry.getValue()).getText();
+			field.addMetaAttribute(((DroolsTree) activeEntry.getKey())
+					.getText(), chunkData.substring(1, chunkData.length() - 1));
+		}
+
+		return field;
+	}
+
+	/**
 	 * Factory method that creates a RuleDescr.
 	 * 
 	 * @param start
@@ -786,6 +850,39 @@
 	}
 
 	/**
+	 * Method that setups the PatternDescr, setting all the behavior data
+	 * 
+	 * @param descr
+	 *            PatternDescr to be setted
+	 * @param behaviorList
+	 *            list of behaviors
+	 * @return BaseDescr setted
+	 */
+	public BaseDescr setupBehavior(BaseDescr descr,
+			List<BehaviorDescr> behaviorList) {
+		if (null != behaviorList && descr instanceof PatternDescr) {
+			for (BehaviorDescr activeBehavior : behaviorList) {
+				((PatternDescr) descr).addBehavior(activeBehavior);
+			}
+		}
+		return descr;
+	}
+
+	/**
+	 * Factory method that creates a BehaviorDescr.
+	 * 
+	 * @param type
+	 *            behavior type
+	 * @param param
+	 *            chunk data
+	 * @return BehaviorDescr filled
+	 */
+	public BehaviorDescr createBehavior(DroolsTree type, DroolsTree param) {
+		return new SlidingWindowDescr(type.getText(), param.getText()
+				.substring(1, param.getText().length() - 1));
+	}
+
+	/**
 	 * Factory method that creates a FromDescr.
 	 * 
 	 * @param accessor

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DRL.g	2008-07-22 14:14:46 UTC (rev 21169)
@@ -14,6 +14,7 @@
 
 	VT_QUERY_ID;
 	VT_TEMPLATE_ID;
+	VT_TYPE_DECLARE_ID;
 	VT_RULE_ID;
 	VT_ENTRYPOINT_ID;
 	VT_SLOT_ID;
@@ -25,6 +26,7 @@
 	VT_CURLY_CHUNK;
 	VT_SQUARE_CHUNK;
 	VT_PAREN_CHUNK;
+	VT_BEHAVIOR;
 
 	VT_AND_IMPLICIT;
 	VT_AND_PREFIX;
@@ -265,12 +267,15 @@
 	;
 
 statement
-	:	rule_attribute
+options{
+k = 2;
+}	:	rule_attribute
 	|{(validateLT(1, "import") && validateLT(2, "function") )}?=> function_import_statement 
 	|	import_statement 
 	|	global 
 	|	function
-	|	template
+	|	{(validateLT(1, DroolsSoftKeywords.TEMPLATE))}?=> template
+	|	{(validateLT(1, DroolsSoftKeywords.DECLARE))}?=> type_declaration
 	|	rule
 	|	query
 	;
@@ -350,7 +355,37 @@
 	:	ID dimension_definition*
 	;
 
+type_declaration
+ at init  { pushParaphrases(DroolsParaphareseTypes.TYPE_DECLARE); }
+ at after { paraphrases.pop(); }
+	:	declare_key  type_declare_id
+		decl_metadata*
+		decl_field*
+		END
+		-> ^(declare_key type_declare_id decl_metadata* decl_field* END)
+	;
 
+type_declare_id
+	: 	id=ID
+	{	setParaphrasesValue(DroolsParaphareseTypes.TYPE_DECLARE, $id.text);	} -> VT_TYPE_DECLARE_ID[$id]
+	;
+
+decl_metadata
+	:	AT ID paren_chunk
+		-> ^(AT ID paren_chunk)
+	;
+
+decl_field
+	:	ID decl_field_initialization? COLON data_type
+		decl_metadata*
+		-> ^(ID decl_field_initialization? data_type decl_metadata*)
+	;
+
+decl_field_initialization
+	:	EQUALS paren_chunk
+	-> ^(EQUALS paren_chunk)
+	;
+
 template
 @init  { pushParaphrases(DroolsParaphareseTypes.TEMPLATE); }
 @after { paraphrases.pop(); }
@@ -537,8 +572,9 @@
 	;
 
 pattern_source
-options { k=3;}
+options { backtrack=true;}
 	:	lhs_pattern
+		over_clause?
 		(
 			from_key^
 		        (  accumulate_statement
@@ -549,6 +585,15 @@
 		)?
 	;
 
+over_clause
+	:	OVER^ over_elements (COMMA! over_elements)*
+	;
+
+over_elements
+	:	ID COLON ID paren_chunk
+	-> ^(VT_BEHAVIOR ID ID paren_chunk)
+	;
+
 accumulate_statement
 	:	accumulate_key
 		LEFT_PAREN lhs_or COMMA? 
@@ -1050,6 +1095,9 @@
 
 NULL	:	'null';
 
+OVER
+	:	'over'
+	;
 
 THEN
 	:	'then'
@@ -1062,6 +1110,13 @@
 	:	'`'
 	;
 
+AT	:	'@'
+	;
+
+EQUALS
+	:	'='
+	;
+
 SEMICOLON
 	:	';'
 	;
@@ -1161,5 +1216,5 @@
 	;
 
 MISC 	:
-		'!' | '@' | '$' | '%' | '^' | '*' | '_' | '-' | '+'  | '?' | '=' | '/' | '\'' | '\\' | '|' | '&'
+		'!' | '$' | '%' | '^' | '*' | '_' | '-' | '+'  | '?' | '/' | '\'' | '\\' | '|' | '&'
 	;
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/DescrBuilderTree.g	2008-07-22 14:14:46 UTC (rev 21169)
@@ -12,25 +12,28 @@
 	import java.util.HashMap;
 	import java.util.Map;
 	import java.util.LinkedList;
+	import org.drools.lang.descr.AccessorDescr;
+	import org.drools.lang.descr.AccumulateDescr;
+	import org.drools.lang.descr.AndDescr;
+	import org.drools.lang.descr.AttributeDescr;
+	import org.drools.lang.descr.BaseDescr;
+	import org.drools.lang.descr.BehaviorDescr;
+	import org.drools.lang.descr.DeclarativeInvokerDescr;
 	import org.drools.lang.descr.DescrFactory;
-	import org.drools.lang.descr.BaseDescr;
-	import org.drools.lang.descr.PackageDescr;
-	import org.drools.lang.descr.AttributeDescr;
-	import org.drools.lang.descr.ImportDescr;
+	import org.drools.lang.descr.FactTemplateDescr;
+	import org.drools.lang.descr.FieldConstraintDescr;
+	import org.drools.lang.descr.FieldTemplateDescr;
+	import org.drools.lang.descr.FromDescr;
+	import org.drools.lang.descr.FunctionDescr;
 	import org.drools.lang.descr.FunctionImportDescr;
 	import org.drools.lang.descr.GlobalDescr;
-	import org.drools.lang.descr.FunctionDescr;
-	import org.drools.lang.descr.FactTemplateDescr;
-	import org.drools.lang.descr.FieldTemplateDescr;
-	import org.drools.lang.descr.AndDescr;
+	import org.drools.lang.descr.ImportDescr;
+	import org.drools.lang.descr.PackageDescr;
+	import org.drools.lang.descr.PatternSourceDescr;
 	import org.drools.lang.descr.QueryDescr;
 	import org.drools.lang.descr.RuleDescr;
-	import org.drools.lang.descr.PatternSourceDescr;
-	import org.drools.lang.descr.AccumulateDescr;
-	import org.drools.lang.descr.AccessorDescr;
-	import org.drools.lang.descr.DeclarativeInvokerDescr;
-	import org.drools.lang.descr.FromDescr;
-	import org.drools.lang.descr.FieldConstraintDescr;
+	import org.drools.lang.descr.TypeDeclarationDescr;
+	import org.drools.lang.descr.TypeFieldDescr;
 }
 
 @members {
@@ -77,6 +80,8 @@
 	{	this.packageDescr.addRule($rl.ruleDescr);	}
 	|	qr=query
 	{	this.packageDescr.addRule($qr.queryDescr);	}
+	|	td=type_declaration
+	{	this.packageDescr.addTypeDeclaration($td.declaration);	}
 	;
 
 import_statement returns [ImportDescr importDescr]
@@ -156,6 +161,32 @@
 	{	$arg = factory.createArgument($id, $rightList);	}
 	;
 
+type_declaration returns [TypeDeclarationDescr declaration]
+ at init {	List<Map> declMetadaList = new LinkedList<Map>();
+		List<TypeFieldDescr> declFieldList = new LinkedList<TypeFieldDescr>(); }
+	:	^(VK_DECLARE id=VT_TYPE_DECLARE_ID 
+			(dm=decl_metadata {declMetadaList.add($dm.attData);	})* 
+			(df=decl_field {declFieldList.add($df.fieldDescr);	})* END)
+	{	$declaration = factory.createTypeDeclr($id, declMetadaList, declFieldList);	}
+	;
+
+decl_metadata returns [Map attData]
+ at init {attData = new HashMap();}
+	:	^(AT att=ID pc=VT_PAREN_CHUNK)
+	{	$attData.put($att, $pc);	}
+	;
+
+decl_field returns [TypeFieldDescr fieldDescr]
+ at init {List<Map> declMetadaList = new LinkedList<Map>(); }
+	:	^(id=ID init=decl_field_initialization? dt=data_type (dm=decl_metadata {declMetadaList.add($dm.attData);})*)
+	{	$fieldDescr = factory.createTypeField($id, $init.expr, $dt.dataType, declMetadaList);	}			
+	;
+
+decl_field_initialization returns [String expr]
+	:	^(EQUALS pc=VT_PAREN_CHUNK)
+	{	$expr = $pc.text.substring(1, $pc.text.length() -1 ).trim();	}
+	;
+
 rule_attribute returns [AttributeDescr attributeDescr]
 	:	(^(attrName=VK_SALIENCE (value=INT|value=VT_PAREN_CHUNK)) 
 	|	^(attrName=VK_NO_LOOP value=BOOL?)  
@@ -269,10 +300,20 @@
 	;
 
 lhs_pattern returns [BaseDescr baseDescr]
-	:	^(VT_PATTERN fe=fact_expression)
-	{	$baseDescr = $fe.descr;	}
+	:	^(VT_PATTERN fe=fact_expression) oc=over_clause?
+	{	$baseDescr = factory.setupBehavior($fe.descr, $oc.behaviorList);	}
 	;
 
+over_clause returns [List behaviorList]
+ at init {$behaviorList = new LinkedList();}
+	:	^(OVER (oe=over_element {$behaviorList.add($oe.behavior);})+)
+	;
+
+over_element returns [BehaviorDescr behavior]
+	:	^(VT_BEHAVIOR ID id2=ID pc=VT_PAREN_CHUNK)
+	{	$behavior = factory.createBehavior($id2,$pc);	}
+	;
+
 fact_expression returns [BaseDescr descr]
 @init{
 	List<BaseDescr> exprList = new LinkedList<BaseDescr>();

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g	2008-07-22 14:14:46 UTC (rev 21169)
@@ -31,6 +31,7 @@
 	|	template
 	|	rule
 	|	query
+	|	type_declaration
 	;
 
 import_statement
@@ -69,7 +70,22 @@
 	:	ID dimension_definition*
 	;
 
+type_declaration
+	:	^(VK_DECLARE VT_TYPE_DECLARE_ID decl_metadata* decl_field* END)
+	;
 
+decl_metadata
+	:	^(AT ID VT_PAREN_CHUNK)
+	;
+
+decl_field
+	:	^(ID decl_field_initialization? data_type decl_metadata*)
+	;
+
+decl_field_initialization
+	:	^(EQUALS VT_PAREN_CHUNK)
+	;
+
 template
 	:	^(VK_TEMPLATE VT_TEMPLATE_ID template_slot+ END)
 	;
@@ -146,9 +162,17 @@
 	;
 
 lhs_pattern
-	:	^(VT_PATTERN fact_expression)
+	:	^(VT_PATTERN fact_expression) over_clause?
 	;
 
+over_clause
+	:	^(OVER over_element+)
+	;
+
+over_element
+	:	^(VT_BEHAVIOR ID ID VT_PAREN_CHUNK)
+	;
+
 fact_expression
 	:	^(DOUBLE_PIPE fact_expression fact_expression)
 	|	^(DOUBLE_AMPER fact_expression fact_expression)

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ConsequenceOffsetTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ConsequenceOffsetTest.java	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ConsequenceOffsetTest.java	2008-07-22 14:14:46 UTC (rev 21169)
@@ -5,11 +5,8 @@
 
 import junit.framework.TestCase;
 
-import org.antlr.runtime.ANTLRReaderStream;
-import org.antlr.runtime.CommonTokenStream;
+import org.drools.compiler.DrlParser;
 import org.drools.compiler.PackageBuilder;
-import org.drools.lang.DRLLexer;
-import org.drools.lang.DRLParser;
 import org.drools.lang.descr.PackageDescr;
 import org.drools.lang.descr.RuleDescr;
 
@@ -17,10 +14,10 @@
     
     public void testConsequenceOffset() throws Exception {
         int offset = -1;
+        DrlParser parser = new DrlParser();
         Reader reader = new InputStreamReader( ConsequenceOffsetTest.class.getResourceAsStream( "test_consequenceOffset.drl" ) );
-        DRLParser parser = new DRLParser( new CommonTokenStream( new DRLLexer( new ANTLRReaderStream( reader ) ) ) );
-        parser.compilation_unit();
-        PackageDescr packageDescr = parser.getPackageDescr();
+        
+        PackageDescr packageDescr = parser.parse(reader);
         PackageBuilder packageBuilder = new PackageBuilder();
         packageBuilder.addPackage(packageDescr);
         assertEquals(false, packageBuilder.hasErrors());
@@ -32,15 +29,11 @@
         }
         
         reader = new InputStreamReader( ConsequenceOffsetTest.class.getResourceAsStream( "test_consequenceOffset2.drl" ) );
-        parser = new DRLParser( new CommonTokenStream( new DRLLexer( new ANTLRReaderStream( reader ) ) ) );
-        parser.compilation_unit();
-        packageDescr = parser.getPackageDescr();
+        packageDescr = parser.parse(reader);
         packageBuilder = new PackageBuilder();
         packageBuilder.addPackage(packageDescr);
         reader = new InputStreamReader( ConsequenceOffsetTest.class.getResourceAsStream( "test_consequenceOffset.drl" ) );
-        parser = new DRLParser( new CommonTokenStream( new DRLLexer( new ANTLRReaderStream( reader ) ) ) );
-        parser.compilation_unit();
-        packageDescr = parser.getPackageDescr();
+        packageDescr = parser.parse(reader);
         packageBuilder.addPackage(packageDescr);
         assertEquals(false, packageBuilder.hasErrors());
         for (Object o: packageDescr.getRules()) {
@@ -55,9 +48,8 @@
     
     public void testLargeSetOfImports() throws Exception {
         Reader reader = new InputStreamReader( ConsequenceOffsetTest.class.getResourceAsStream( "test_consequenceOffsetImports.drl" ) );
-        DRLParser parser = new DRLParser( new CommonTokenStream( new DRLLexer( new ANTLRReaderStream( reader ) ) ) );
-        parser.compilation_unit();
-        PackageDescr packageDescr = parser.getPackageDescr();
+        DrlParser parser = new DrlParser();
+        PackageDescr packageDescr = parser.parse(reader);
         PackageBuilder packageBuilder = new PackageBuilder();
         packageBuilder.addPackage(packageDescr);
         assertEquals(false, packageBuilder.hasErrors());

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java	2008-07-22 14:14:46 UTC (rev 21169)
@@ -95,8 +95,7 @@
         return SerializationHelper.serializeObject(ruleBase);
     }
 
-    //FIXME current parser does not support declare statement
-    public void FIXME_testEventAssertion() throws Exception {
+    public void testEventAssertion() throws Exception {
         // read in the source
         final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_EntryPoint.drl" ) );
         final RuleBase ruleBase = loadRuleBase( reader );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java	2008-07-22 14:07:23 UTC (rev 21168)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/Tree2TestDRL.java	2008-07-22 14:14:46 UTC (rev 21169)
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g 2008-06-05 13:52:46
+// $ANTLR 3.0.1 /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g 2008-07-22 11:06:35
 
 	package org.drools.lang;
 
@@ -10,129 +10,134 @@
 
 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_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", "GRAVE_ACCENT", "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_TYPE_DECLARE_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_BEHAVIOR", "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", "AT", "COLON", "EQUALS", "BOOL", "INT", "DOUBLE_PIPE", "DOUBLE_AMPER", "OVER", "ARROW", "EQUAL", "GREATER", "GREATER_EQUAL", "LESS", "LESS_EQUAL", "NOT_EQUAL", "GRAVE_ACCENT", "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=92;
-    public static final int VT_PATTERN_TYPE=37;
-    public static final int VT_ACCUMULATE_ID_CLAUSE=26;
-    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=118;
-    public static final int VK_ATTRIBUTES=55;
-    public static final int VT_EXPRESSION_CHAIN=28;
-    public static final int VK_ACCUMULATE=79;
-    public static final int MISC=114;
-    public static final int VT_AND_PREFIX=21;
-    public static final int VK_QUERY=61;
-    public static final int THEN=111;
-    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=38;
-    public static final int LEFT_SQUARE=109;
-    public static final int SH_STYLE_SINGLE_LINE_COMMENT=121;
-    public static final int VT_DATA_TYPE=36;
-    public static final int VK_MATCHES=67;
+    public static final int COMMA=94;
+    public static final int VT_PATTERN_TYPE=39;
+    public static final int VT_ACCUMULATE_ID_CLAUSE=28;
+    public static final int VK_DIALECT=54;
+    public static final int VK_FUNCTION=65;
+    public static final int END=91;
+    public static final int HexDigit=123;
+    public static final int VK_ATTRIBUTES=57;
+    public static final int VT_EXPRESSION_CHAIN=30;
+    public static final int VK_ACCUMULATE=81;
+    public static final int MISC=119;
+    public static final int VT_AND_PREFIX=23;
+    public static final int VK_QUERY=63;
+    public static final int THEN=116;
+    public static final int VK_AUTO_FOCUS=49;
+    public static final int DOT=89;
+    public static final int VK_IMPORT=60;
+    public static final int VT_SLOT=15;
+    public static final int VT_PACKAGE_ID=40;
+    public static final int LEFT_SQUARE=114;
+    public static final int SH_STYLE_SINGLE_LINE_COMMENT=126;
+    public static final int VT_DATA_TYPE=38;
+    public static final int VK_MATCHES=69;
     public static final int VT_FACT=6;
-    public static final int LEFT_CURLY=112;
-    public static final int LEFT_PAREN=91;
-    public static final int DOUBLE_AMPER=98;
+    public static final int LEFT_CURLY=117;
+    public static final int AT=96;
+    public static final int LEFT_PAREN=93;
+    public static final int DOUBLE_AMPER=102;
     public static final int VT_QUERY_ID=9;
-    public static final int VT_ACCESSOR_PATH=34;
+    public static final int VT_ACCESSOR_PATH=36;
     public static final int VT_LABEL=8;
-    public static final int VT_ENTRYPOINT_ID=12;
-    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=116;
-    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_GLOBAL=64;
-    public static final int VT_ACCUMULATE_INIT_CLAUSE=25;
-    public static final int VK_REVERSE=82;
-    public static final int GRAVE_ACCENT=106;
-    public static final int VK_DURATION=51;
-    public static final int VT_SQUARE_CHUNK=18;
-    public static final int VK_FORALL=77;
+    public static final int VT_ENTRYPOINT_ID=13;
+    public static final int VK_SOUNDSLIKE=71;
+    public static final int VK_SALIENCE=55;
+    public static final int VT_FIELD=35;
+    public static final int WS=121;
+    public static final int OVER=103;
+    public static final int VK_AND=77;
+    public static final int STRING=92;
+    public static final int VT_ACCESSOR_ELEMENT=37;
+    public static final int VT_ACCUMULATE_INIT_CLAUSE=27;
+    public static final int VK_GLOBAL=66;
+    public static final int VK_REVERSE=84;
+    public static final int VT_BEHAVIOR=21;
+    public static final int GRAVE_ACCENT=111;
+    public static final int VK_DURATION=53;
+    public static final int VT_SQUARE_CHUNK=19;
+    public static final int VK_FORALL=79;
+    public static final int VT_PAREN_CHUNK=20;
     public static final int VT_COMPILATION_UNIT=4;
-    public static final int VT_PAREN_CHUNK=19;
-    public static final int VK_ENABLED=54;
-    public static final int VK_RESULT=83;
-    public static final int UnicodeEscape=119;
-    public static final int VK_PACKAGE=59;
-    public static final int VT_RULE_ID=11;
-    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=108;
-    public static final int COLON=94;
-    public static final int MULTI_LINE_COMMENT=123;
-    public static final int VT_RULE_ATTRIBUTES=15;
-    public static final int RIGHT_SQUARE=110;
-    public static final int VK_AGENDA_GROUP=49;
-    public static final int VT_FACT_OR=31;
-    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=107;
-    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=97;
-    public static final int LESS=103;
-    public static final int VT_PATTERN=29;
-    public static final int VK_DATE_EFFECTIVE=43;
-    public static final int EscapeSequence=117;
-    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=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=86;
-    public static final int NOT_EQUAL=105;
-    public static final int RIGHT_CURLY=113;
-    public static final int VK_ENTRY_POINT=71;
-    public static final int VT_AND_INFIX=23;
-    public static final int VT_PARAM_LIST=42;
-    public static final int BOOL=95;
-    public static final int VT_FROM_SOURCE=27;
-    public static final int VK_CONTAINS=66;
-    public static final int VK_LOCK_ON_ACTIVE=45;
+    public static final int VK_ENABLED=56;
+    public static final int EQUALS=98;
+    public static final int VK_RESULT=85;
+    public static final int UnicodeEscape=124;
+    public static final int VK_PACKAGE=61;
+    public static final int VT_RULE_ID=12;
+    public static final int EQUAL=105;
+    public static final int VK_NO_LOOP=48;
+    public static final int SEMICOLON=87;
+    public static final int VK_TEMPLATE=62;
+    public static final int VT_AND_IMPLICIT=22;
+    public static final int NULL=113;
+    public static final int COLON=97;
+    public static final int MULTI_LINE_COMMENT=128;
+    public static final int VT_RULE_ATTRIBUTES=16;
+    public static final int RIGHT_SQUARE=115;
+    public static final int VK_AGENDA_GROUP=51;
+    public static final int VT_FACT_OR=33;
+    public static final int VK_NOT=74;
+    public static final int VK_DATE_EXPIRES=46;
+    public static final int ARROW=104;
+    public static final int FLOAT=112;
+    public static final int VT_SLOT_ID=14;
+    public static final int VT_CURLY_CHUNK=18;
+    public static final int VT_OR_PREFIX=24;
+    public static final int DOUBLE_PIPE=101;
+    public static final int LESS=108;
+    public static final int VT_TYPE_DECLARE_ID=11;
+    public static final int VT_PATTERN=31;
+    public static final int VK_DATE_EFFECTIVE=45;
+    public static final int EscapeSequence=122;
+    public static final int VK_EXISTS=78;
+    public static final int INT=100;
+    public static final int VT_BIND_FIELD=34;
+    public static final int VK_RULE=59;
+    public static final int VK_EVAL=67;
+    public static final int VK_COLLECT=86;
+    public static final int GREATER=106;
+    public static final int VT_FACT_BINDING=32;
+    public static final int ID=88;
+    public static final int NOT_EQUAL=110;
+    public static final int RIGHT_CURLY=118;
+    public static final int VK_ENTRY_POINT=73;
+    public static final int VT_PARAM_LIST=44;
+    public static final int VT_AND_INFIX=25;
+    public static final int BOOL=99;
+    public static final int VT_FROM_SOURCE=29;
+    public static final int VK_CONTAINS=68;
+    public static final int VK_LOCK_ON_ACTIVE=47;
     public static final int VT_FUNCTION_IMPORT=5;
-    public static final int VK_IN=73;
-    public static final int VT_RHS_CHUNK=16;
-    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=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 VK_IN=75;
+    public static final int VT_RHS_CHUNK=17;
+    public static final int VK_MEMBEROF=72;
+    public static final int GREATER_EQUAL=107;
+    public static final int VT_OR_INFIX=26;
+    public static final int DOT_STAR=90;
+    public static final int VK_OR=76;
+    public static final int VT_GLOBAL_ID=42;
+    public static final int LESS_EQUAL=109;
+    public static final int VK_WHEN=58;
+    public static final int VK_RULEFLOW_GROUP=52;
+    public static final int VT_FUNCTION_ID=43;
     public static final int EOF=-1;
     public static final int VT_CONSTRAINTS=7;
-    public static final int VT_IMPORT_ID=39;
-    public static final int EOL=115;
-    public static final int VK_INIT=80;
-    public static final int VK_ACTIVATION_GROUP=48;
-    public static final int OctalEscape=120;
-    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_IMPORT_ID=41;
+    public static final int EOL=120;
+    public static final int VK_INIT=82;
+    public static final int VK_ACTIVATION_GROUP=50;
+    public static final int OctalEscape=125;
+    public static final int VK_ACTION=83;
+    public static final int VK_FROM=80;
+    public static final int VK_EXCLUDES=70;
+    public static final int RIGHT_PAREN=95;
     public static final int VT_TEMPLATE_ID=10;
-    public static final int VK_DECLARE=62;
-    public static final int C_STYLE_SINGLE_LINE_COMMENT=122;
+    public static final int VK_DECLARE=64;
+    public static final int C_STYLE_SINGLE_LINE_COMMENT=127;
 
         public Tree2TestDRL(TreeNodeStream input) {
             super(input);
@@ -140,22 +145,22 @@
         
 
     public String[] getTokenNames() { return tokenNames; }
-    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g"; }
+    public String getGrammarFileName() { return "/Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g"; }
 
 
 
     // $ANTLR start compilation_unit
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:13:1: compilation_unit : ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:13:1: compilation_unit : ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) ;
     public final void compilation_unit() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:2: ( ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:4: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:2: ( ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:4: ^( VT_COMPILATION_UNIT ( package_statement )? ( statement )* )
             {
             match(input,VT_COMPILATION_UNIT,FOLLOW_VT_COMPILATION_UNIT_in_compilation_unit43); 
 
             if ( input.LA(1)==Token.DOWN ) {
                 match(input, Token.DOWN, null); 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:26: ( package_statement )?
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:26: ( package_statement )?
                 int alt1=2;
                 int LA1_0 = input.LA(1);
 
@@ -164,7 +169,7 @@
                 }
                 switch (alt1) {
                     case 1 :
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:26: package_statement
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:26: package_statement
                         {
                         pushFollow(FOLLOW_package_statement_in_compilation_unit45);
                         package_statement();
@@ -176,20 +181,20 @@
 
                 }
 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:45: ( statement )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:45: ( statement )*
                 loop2:
                 do {
                     int alt2=2;
                     int LA2_0 = input.LA(1);
 
-                    if ( (LA2_0==VT_FUNCTION_IMPORT||(LA2_0>=VK_DATE_EFFECTIVE && LA2_0<=VK_ENABLED)||(LA2_0>=VK_RULE && LA2_0<=VK_IMPORT)||(LA2_0>=VK_TEMPLATE && LA2_0<=VK_QUERY)||(LA2_0>=VK_FUNCTION && LA2_0<=VK_GLOBAL)) ) {
+                    if ( (LA2_0==VT_FUNCTION_IMPORT||(LA2_0>=VK_DATE_EFFECTIVE && LA2_0<=VK_ENABLED)||(LA2_0>=VK_RULE && LA2_0<=VK_IMPORT)||(LA2_0>=VK_TEMPLATE && LA2_0<=VK_GLOBAL)) ) {
                         alt2=1;
                     }
 
 
                     switch (alt2) {
                 	case 1 :
-                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:45: statement
+                	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:14:45: statement
                 	    {
                 	    pushFollow(FOLLOW_statement_in_compilation_unit48);
                 	    statement();
@@ -223,11 +228,11 @@
 
 
     // $ANTLR start package_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:17:1: package_statement : ^( VK_PACKAGE package_id ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:17:1: package_statement : ^( VK_PACKAGE package_id ) ;
     public final void package_statement() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:18:2: ( ^( VK_PACKAGE package_id ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:18:4: ^( VK_PACKAGE package_id )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:18:2: ( ^( VK_PACKAGE package_id ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:18:4: ^( VK_PACKAGE package_id )
             {
             match(input,VK_PACKAGE,FOLLOW_VK_PACKAGE_in_package_statement63); 
 
@@ -254,16 +259,16 @@
 
 
     // $ANTLR start package_id
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:21:1: package_id : ^( VT_PACKAGE_ID ( ID )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:21:1: package_id : ^( VT_PACKAGE_ID ( ID )+ ) ;
     public final void package_id() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:2: ( ^( VT_PACKAGE_ID ( ID )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:4: ^( VT_PACKAGE_ID ( ID )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:2: ( ^( VT_PACKAGE_ID ( ID )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:4: ^( VT_PACKAGE_ID ( ID )+ )
             {
             match(input,VT_PACKAGE_ID,FOLLOW_VT_PACKAGE_ID_in_package_id78); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:20: ( ID )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:20: ( ID )+
             int cnt3=0;
             loop3:
             do {
@@ -277,7 +282,7 @@
 
                 switch (alt3) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:20: ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:22:20: ID
             	    {
             	    match(input,ID,FOLLOW_ID_in_package_id80); 
 
@@ -311,11 +316,11 @@
 
 
     // $ANTLR start statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:25:1: statement : ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:25:1: statement : ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query | type_declaration );
     public final void statement() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:26:2: ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query )
-            int alt4=8;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:26:2: ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query | type_declaration )
+            int alt4=9;
             switch ( input.LA(1) ) {
             case VK_DATE_EFFECTIVE:
             case VK_DATE_EXPIRES:
@@ -368,16 +373,21 @@
                 alt4=8;
                 }
                 break;
+            case VK_DECLARE:
+                {
+                alt4=9;
+                }
+                break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("25:1: statement : ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query );", 4, 0, input);
+                    new NoViableAltException("25:1: statement : ( rule_attribute | function_import_statement | import_statement | global | function | template | rule | query | type_declaration );", 4, 0, input);
 
                 throw nvae;
             }
 
             switch (alt4) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:26:4: rule_attribute
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:26:4: rule_attribute
                     {
                     pushFollow(FOLLOW_rule_attribute_in_statement93);
                     rule_attribute();
@@ -387,7 +397,7 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:27:4: function_import_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:27:4: function_import_statement
                     {
                     pushFollow(FOLLOW_function_import_statement_in_statement98);
                     function_import_statement();
@@ -397,7 +407,7 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:28:4: import_statement
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:28:4: import_statement
                     {
                     pushFollow(FOLLOW_import_statement_in_statement104);
                     import_statement();
@@ -407,7 +417,7 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:29:4: global
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:29:4: global
                     {
                     pushFollow(FOLLOW_global_in_statement110);
                     global();
@@ -417,7 +427,7 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:30:4: function
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:30:4: function
                     {
                     pushFollow(FOLLOW_function_in_statement116);
                     function();
@@ -427,7 +437,7 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:31:4: template
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:31:4: template
                     {
                     pushFollow(FOLLOW_template_in_statement121);
                     template();
@@ -437,7 +447,7 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:32:4: rule
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:32:4: rule
                     {
                     pushFollow(FOLLOW_rule_in_statement126);
                     rule();
@@ -447,7 +457,7 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:33:4: query
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:33:4: query
                     {
                     pushFollow(FOLLOW_query_in_statement131);
                     query();
@@ -456,7 +466,17 @@
 
                     }
                     break;
+                case 9 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:34:4: type_declaration
+                    {
+                    pushFollow(FOLLOW_type_declaration_in_statement136);
+                    type_declaration();
+                    _fsp--;
 
+
+                    }
+                    break;
+
             }
         }
         catch (RecognitionException re) {
@@ -471,16 +491,16 @@
 
 
     // $ANTLR start import_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:36:1: import_statement : ^( VK_IMPORT import_name ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:37:1: import_statement : ^( VK_IMPORT import_name ) ;
     public final void import_statement() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:37:2: ( ^( VK_IMPORT import_name ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:37:4: ^( VK_IMPORT import_name )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:38:2: ( ^( VK_IMPORT import_name ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:38:4: ^( VK_IMPORT import_name )
             {
-            match(input,VK_IMPORT,FOLLOW_VK_IMPORT_in_import_statement143); 
+            match(input,VK_IMPORT,FOLLOW_VK_IMPORT_in_import_statement148); 
 
             match(input, Token.DOWN, null); 
-            pushFollow(FOLLOW_import_name_in_import_statement145);
+            pushFollow(FOLLOW_import_name_in_import_statement150);
             import_name();
             _fsp--;
 
@@ -502,17 +522,17 @@
 
 
     // $ANTLR start function_import_statement
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:40:1: function_import_statement : ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:41:1: function_import_statement : ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name ) ;
     public final void function_import_statement() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:41:2: ( ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:41:4: ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:42:2: ( ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:42:4: ^( VT_FUNCTION_IMPORT VK_FUNCTION import_name )
             {
-            match(input,VT_FUNCTION_IMPORT,FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement158); 
+            match(input,VT_FUNCTION_IMPORT,FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement163); 
 
             match(input, Token.DOWN, null); 
-            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function_import_statement160); 
-            pushFollow(FOLLOW_import_name_in_function_import_statement162);
+            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function_import_statement165); 
+            pushFollow(FOLLOW_import_name_in_function_import_statement167);
             import_name();
             _fsp--;
 
@@ -534,16 +554,16 @@
 
 
     // $ANTLR start import_name
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:44:1: import_name : ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:1: import_name : ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) ;
     public final void import_name() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:2: ( ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:4: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:46:2: ( ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:46:4: ^( VT_IMPORT_ID ( ID )+ ( DOT_STAR )? )
             {
-            match(input,VT_IMPORT_ID,FOLLOW_VT_IMPORT_ID_in_import_name175); 
+            match(input,VT_IMPORT_ID,FOLLOW_VT_IMPORT_ID_in_import_name180); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:19: ( ID )+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:46:19: ( ID )+
             int cnt5=0;
             loop5:
             do {
@@ -557,9 +577,9 @@
 
                 switch (alt5) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:19: ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:46:19: ID
             	    {
-            	    match(input,ID,FOLLOW_ID_in_import_name177); 
+            	    match(input,ID,FOLLOW_ID_in_import_name182); 
 
             	    }
             	    break;
@@ -573,7 +593,7 @@
                 cnt5++;
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:23: ( DOT_STAR )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:46:23: ( DOT_STAR )?
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -582,9 +602,9 @@
             }
             switch (alt6) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:45:23: DOT_STAR
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:46:23: DOT_STAR
                     {
-                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name180); 
+                    match(input,DOT_STAR,FOLLOW_DOT_STAR_in_import_name185); 
 
                     }
                     break;
@@ -609,20 +629,20 @@
 
 
     // $ANTLR start global
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:48:1: global : ^( VK_GLOBAL data_type VT_GLOBAL_ID ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:49:1: global : ^( VK_GLOBAL data_type VT_GLOBAL_ID ) ;
     public final void global() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:49:2: ( ^( VK_GLOBAL data_type VT_GLOBAL_ID ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:49:4: ^( VK_GLOBAL data_type VT_GLOBAL_ID )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:50:2: ( ^( VK_GLOBAL data_type VT_GLOBAL_ID ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:50:4: ^( VK_GLOBAL data_type VT_GLOBAL_ID )
             {
-            match(input,VK_GLOBAL,FOLLOW_VK_GLOBAL_in_global194); 
+            match(input,VK_GLOBAL,FOLLOW_VK_GLOBAL_in_global199); 
 
             match(input, Token.DOWN, null); 
-            pushFollow(FOLLOW_data_type_in_global196);
+            pushFollow(FOLLOW_data_type_in_global201);
             data_type();
             _fsp--;
 
-            match(input,VT_GLOBAL_ID,FOLLOW_VT_GLOBAL_ID_in_global198); 
+            match(input,VT_GLOBAL_ID,FOLLOW_VT_GLOBAL_ID_in_global203); 
 
             match(input, Token.UP, null); 
 
@@ -641,16 +661,16 @@
 
 
     // $ANTLR start function
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:52:1: function : ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:53:1: function : ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk ) ;
     public final void function() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:53:2: ( ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:53:4: ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:54:2: ( ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:54:4: ^( VK_FUNCTION ( data_type )? VT_FUNCTION_ID parameters curly_chunk )
             {
-            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function211); 
+            match(input,VK_FUNCTION,FOLLOW_VK_FUNCTION_in_function216); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:53:18: ( data_type )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:54:18: ( data_type )?
             int alt7=2;
             int LA7_0 = input.LA(1);
 
@@ -659,9 +679,9 @@
             }
             switch (alt7) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:53:18: data_type
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:54:18: data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_function213);
+                    pushFollow(FOLLOW_data_type_in_function218);
                     data_type();
                     _fsp--;
 
@@ -671,12 +691,12 @@
 
             }
 
-            match(input,VT_FUNCTION_ID,FOLLOW_VT_FUNCTION_ID_in_function216); 
-            pushFollow(FOLLOW_parameters_in_function218);
+            match(input,VT_FUNCTION_ID,FOLLOW_VT_FUNCTION_ID_in_function221); 
+            pushFollow(FOLLOW_parameters_in_function223);
             parameters();
             _fsp--;
 
-            pushFollow(FOLLOW_curly_chunk_in_function220);
+            pushFollow(FOLLOW_curly_chunk_in_function225);
             curly_chunk();
             _fsp--;
 
@@ -698,17 +718,17 @@
 
 
     // $ANTLR start query
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:56:1: query : ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block END ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:57:1: query : ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block END ) ;
     public final void query() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:57:2: ( ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block END ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:57:4: ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block END )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:58:2: ( ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:58:4: ^( VK_QUERY VT_QUERY_ID ( parameters )? lhs_block END )
             {
-            match(input,VK_QUERY,FOLLOW_VK_QUERY_in_query233); 
+            match(input,VK_QUERY,FOLLOW_VK_QUERY_in_query238); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_QUERY_ID,FOLLOW_VT_QUERY_ID_in_query235); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:57:27: ( parameters )?
+            match(input,VT_QUERY_ID,FOLLOW_VT_QUERY_ID_in_query240); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:58:27: ( parameters )?
             int alt8=2;
             int LA8_0 = input.LA(1);
 
@@ -717,9 +737,9 @@
             }
             switch (alt8) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:57:27: parameters
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:58:27: parameters
                     {
-                    pushFollow(FOLLOW_parameters_in_query237);
+                    pushFollow(FOLLOW_parameters_in_query242);
                     parameters();
                     _fsp--;
 
@@ -729,11 +749,11 @@
 
             }
 
-            pushFollow(FOLLOW_lhs_block_in_query240);
+            pushFollow(FOLLOW_lhs_block_in_query245);
             lhs_block();
             _fsp--;
 
-            match(input,END,FOLLOW_END_in_query242); 
+            match(input,END,FOLLOW_END_in_query247); 
 
             match(input, Token.UP, null); 
 
@@ -752,17 +772,17 @@
 
 
     // $ANTLR start parameters
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:60:1: parameters : ^( VT_PARAM_LIST ( param_definition )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:61:1: parameters : ^( VT_PARAM_LIST ( param_definition )* ) ;
     public final void parameters() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:61:2: ( ^( VT_PARAM_LIST ( param_definition )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:61:4: ^( VT_PARAM_LIST ( param_definition )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:62:2: ( ^( VT_PARAM_LIST ( param_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:62:4: ^( VT_PARAM_LIST ( param_definition )* )
             {
-            match(input,VT_PARAM_LIST,FOLLOW_VT_PARAM_LIST_in_parameters255); 
+            match(input,VT_PARAM_LIST,FOLLOW_VT_PARAM_LIST_in_parameters260); 
 
             if ( input.LA(1)==Token.DOWN ) {
                 match(input, Token.DOWN, null); 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:61:20: ( param_definition )*
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:62:20: ( param_definition )*
                 loop9:
                 do {
                     int alt9=2;
@@ -775,9 +795,9 @@
 
                     switch (alt9) {
                 	case 1 :
-                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:61:20: param_definition
+                	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:62:20: param_definition
                 	    {
-                	    pushFollow(FOLLOW_param_definition_in_parameters257);
+                	    pushFollow(FOLLOW_param_definition_in_parameters262);
                 	    param_definition();
                 	    _fsp--;
 
@@ -809,13 +829,13 @@
 
 
     // $ANTLR start param_definition
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:64:1: param_definition : ( data_type )? argument ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:65:1: param_definition : ( data_type )? argument ;
     public final void param_definition() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:65:2: ( ( data_type )? argument )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:65:4: ( data_type )? argument
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:66:2: ( ( data_type )? argument )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:66:4: ( data_type )? argument
             {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:65:4: ( data_type )?
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:66:4: ( data_type )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -824,9 +844,9 @@
             }
             switch (alt10) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:65:4: data_type
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:66:4: data_type
                     {
-                    pushFollow(FOLLOW_data_type_in_param_definition270);
+                    pushFollow(FOLLOW_data_type_in_param_definition275);
                     data_type();
                     _fsp--;
 
@@ -836,7 +856,7 @@
 
             }
 
-            pushFollow(FOLLOW_argument_in_param_definition273);
+            pushFollow(FOLLOW_argument_in_param_definition278);
             argument();
             _fsp--;
 
@@ -856,14 +876,14 @@
 
 
     // $ANTLR start argument
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:68:1: argument : ID ( dimension_definition )* ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:69:1: argument : ID ( dimension_definition )* ;
     public final void argument() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:69:2: ( ID ( dimension_definition )* )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:69:4: ID ( dimension_definition )*
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:70:2: ( ID ( dimension_definition )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:70:4: ID ( dimension_definition )*
             {
-            match(input,ID,FOLLOW_ID_in_argument284); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:69:7: ( dimension_definition )*
+            match(input,ID,FOLLOW_ID_in_argument289); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:70:7: ( dimension_definition )*
             loop11:
             do {
                 int alt11=2;
@@ -876,9 +896,9 @@
 
                 switch (alt11) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:69:7: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:70:7: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_argument286);
+            	    pushFollow(FOLLOW_dimension_definition_in_argument291);
             	    dimension_definition();
             	    _fsp--;
 
@@ -906,34 +926,256 @@
     // $ANTLR end argument
 
 
-    // $ANTLR start template
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:73:1: template : ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ END ) ;
-    public final void template() throws RecognitionException {
+    // $ANTLR start type_declaration
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:73:1: type_declaration : ^( VK_DECLARE VT_TYPE_DECLARE_ID ( decl_metadata )* ( decl_field )* END ) ;
+    public final void type_declaration() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:2: ( ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ END ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:4: ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ END )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:2: ( ^( VK_DECLARE VT_TYPE_DECLARE_ID ( decl_metadata )* ( decl_field )* END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:4: ^( VK_DECLARE VT_TYPE_DECLARE_ID ( decl_metadata )* ( decl_field )* END )
             {
-            match(input,VK_TEMPLATE,FOLLOW_VK_TEMPLATE_in_template300); 
+            match(input,VK_DECLARE,FOLLOW_VK_DECLARE_in_type_declaration304); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_TEMPLATE_ID,FOLLOW_VT_TEMPLATE_ID_in_template302); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:33: ( template_slot )+
-            int cnt12=0;
+            match(input,VT_TYPE_DECLARE_ID,FOLLOW_VT_TYPE_DECLARE_ID_in_type_declaration306); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:36: ( decl_metadata )*
             loop12:
             do {
                 int alt12=2;
                 int LA12_0 = input.LA(1);
 
-                if ( (LA12_0==VT_SLOT) ) {
+                if ( (LA12_0==AT) ) {
                     alt12=1;
                 }
 
 
                 switch (alt12) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:33: template_slot
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:36: decl_metadata
             	    {
-            	    pushFollow(FOLLOW_template_slot_in_template304);
+            	    pushFollow(FOLLOW_decl_metadata_in_type_declaration308);
+            	    decl_metadata();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop12;
+                }
+            } while (true);
+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:51: ( decl_field )*
+            loop13:
+            do {
+                int alt13=2;
+                int LA13_0 = input.LA(1);
+
+                if ( (LA13_0==ID) ) {
+                    alt13=1;
+                }
+
+
+                switch (alt13) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:74:51: decl_field
+            	    {
+            	    pushFollow(FOLLOW_decl_field_in_type_declaration311);
+            	    decl_field();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop13;
+                }
+            } while (true);
+
+            match(input,END,FOLLOW_END_in_type_declaration314); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end type_declaration
+
+
+    // $ANTLR start decl_metadata
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:77:1: decl_metadata : ^( AT ID VT_PAREN_CHUNK ) ;
+    public final void decl_metadata() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:78:2: ( ^( AT ID VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:78:4: ^( AT ID VT_PAREN_CHUNK )
+            {
+            match(input,AT,FOLLOW_AT_in_decl_metadata327); 
+
+            match(input, Token.DOWN, null); 
+            match(input,ID,FOLLOW_ID_in_decl_metadata329); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_decl_metadata331); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end decl_metadata
+
+
+    // $ANTLR start decl_field
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:81:1: decl_field : ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) ;
+    public final void decl_field() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:2: ( ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:4: ^( ID ( decl_field_initialization )? data_type ( decl_metadata )* )
+            {
+            match(input,ID,FOLLOW_ID_in_decl_field344); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:9: ( decl_field_initialization )?
+            int alt14=2;
+            int LA14_0 = input.LA(1);
+
+            if ( (LA14_0==EQUALS) ) {
+                alt14=1;
+            }
+            switch (alt14) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:9: decl_field_initialization
+                    {
+                    pushFollow(FOLLOW_decl_field_initialization_in_decl_field346);
+                    decl_field_initialization();
+                    _fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+            pushFollow(FOLLOW_data_type_in_decl_field349);
+            data_type();
+            _fsp--;
+
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:46: ( decl_metadata )*
+            loop15:
+            do {
+                int alt15=2;
+                int LA15_0 = input.LA(1);
+
+                if ( (LA15_0==AT) ) {
+                    alt15=1;
+                }
+
+
+                switch (alt15) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:46: decl_metadata
+            	    {
+            	    pushFollow(FOLLOW_decl_metadata_in_decl_field351);
+            	    decl_metadata();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop15;
+                }
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end decl_field
+
+
+    // $ANTLR start decl_field_initialization
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:85:1: decl_field_initialization : ^( EQUALS VT_PAREN_CHUNK ) ;
+    public final void decl_field_initialization() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:86:2: ( ^( EQUALS VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:86:4: ^( EQUALS VT_PAREN_CHUNK )
+            {
+            match(input,EQUALS,FOLLOW_EQUALS_in_decl_field_initialization365); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_decl_field_initialization367); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end decl_field_initialization
+
+
+    // $ANTLR start template
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:89:1: template : ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ END ) ;
+    public final void template() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:2: ( ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ END ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:4: ^( VK_TEMPLATE VT_TEMPLATE_ID ( template_slot )+ END )
+            {
+            match(input,VK_TEMPLATE,FOLLOW_VK_TEMPLATE_in_template380); 
+
+            match(input, Token.DOWN, null); 
+            match(input,VT_TEMPLATE_ID,FOLLOW_VT_TEMPLATE_ID_in_template382); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:33: ( template_slot )+
+            int cnt16=0;
+            loop16:
+            do {
+                int alt16=2;
+                int LA16_0 = input.LA(1);
+
+                if ( (LA16_0==VT_SLOT) ) {
+                    alt16=1;
+                }
+
+
+                switch (alt16) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:33: template_slot
+            	    {
+            	    pushFollow(FOLLOW_template_slot_in_template384);
             	    template_slot();
             	    _fsp--;
 
@@ -942,15 +1184,15 @@
             	    break;
 
             	default :
-            	    if ( cnt12 >= 1 ) break loop12;
+            	    if ( cnt16 >= 1 ) break loop16;
                         EarlyExitException eee =
-                            new EarlyExitException(12, input);
+                            new EarlyExitException(16, input);
                         throw eee;
                 }
-                cnt12++;
+                cnt16++;
             } while (true);
 
-            match(input,END,FOLLOW_END_in_template307); 
+            match(input,END,FOLLOW_END_in_template387); 
 
             match(input, Token.UP, null); 
 
@@ -969,20 +1211,20 @@
 
 
     // $ANTLR start template_slot
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:77:1: template_slot : ^( VT_SLOT data_type VT_SLOT_ID ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:93:1: template_slot : ^( VT_SLOT data_type VT_SLOT_ID ) ;
     public final void template_slot() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:78:2: ( ^( VT_SLOT data_type VT_SLOT_ID ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:78:4: ^( VT_SLOT data_type VT_SLOT_ID )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:94:2: ( ^( VT_SLOT data_type VT_SLOT_ID ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:94:4: ^( VT_SLOT data_type VT_SLOT_ID )
             {
-            match(input,VT_SLOT,FOLLOW_VT_SLOT_in_template_slot320); 
+            match(input,VT_SLOT,FOLLOW_VT_SLOT_in_template_slot400); 
 
             match(input, Token.DOWN, null); 
-            pushFollow(FOLLOW_data_type_in_template_slot322);
+            pushFollow(FOLLOW_data_type_in_template_slot402);
             data_type();
             _fsp--;
 
-            match(input,VT_SLOT_ID,FOLLOW_VT_SLOT_ID_in_template_slot324); 
+            match(input,VT_SLOT_ID,FOLLOW_VT_SLOT_ID_in_template_slot404); 
 
             match(input, Token.UP, null); 
 
@@ -1001,28 +1243,28 @@
 
 
     // $ANTLR start rule
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:81:1: rule : ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:97:1: rule : ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK ) ;
     public final void rule() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:2: ( ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:4: ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:98:2: ( ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:98:4: ^( VK_RULE VT_RULE_ID ( rule_attributes )? ( when_part )? VT_RHS_CHUNK )
             {
-            match(input,VK_RULE,FOLLOW_VK_RULE_in_rule337); 
+            match(input,VK_RULE,FOLLOW_VK_RULE_in_rule417); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_RULE_ID,FOLLOW_VT_RULE_ID_in_rule339); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:25: ( rule_attributes )?
-            int alt13=2;
-            int LA13_0 = input.LA(1);
+            match(input,VT_RULE_ID,FOLLOW_VT_RULE_ID_in_rule419); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:98:25: ( rule_attributes )?
+            int alt17=2;
+            int LA17_0 = input.LA(1);
 
-            if ( (LA13_0==VT_RULE_ATTRIBUTES) ) {
-                alt13=1;
+            if ( (LA17_0==VT_RULE_ATTRIBUTES) ) {
+                alt17=1;
             }
-            switch (alt13) {
+            switch (alt17) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:25: rule_attributes
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:98:25: rule_attributes
                     {
-                    pushFollow(FOLLOW_rule_attributes_in_rule341);
+                    pushFollow(FOLLOW_rule_attributes_in_rule421);
                     rule_attributes();
                     _fsp--;
 
@@ -1032,18 +1274,18 @@
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:42: ( when_part )?
-            int alt14=2;
-            int LA14_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:98:42: ( when_part )?
+            int alt18=2;
+            int LA18_0 = input.LA(1);
 
-            if ( (LA14_0==VK_WHEN) ) {
-                alt14=1;
+            if ( (LA18_0==VK_WHEN) ) {
+                alt18=1;
             }
-            switch (alt14) {
+            switch (alt18) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:82:42: when_part
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:98:42: when_part
                     {
-                    pushFollow(FOLLOW_when_part_in_rule344);
+                    pushFollow(FOLLOW_when_part_in_rule424);
                     when_part();
                     _fsp--;
 
@@ -1053,7 +1295,7 @@
 
             }
 
-            match(input,VT_RHS_CHUNK,FOLLOW_VT_RHS_CHUNK_in_rule347); 
+            match(input,VT_RHS_CHUNK,FOLLOW_VT_RHS_CHUNK_in_rule427); 
 
             match(input, Token.UP, null); 
 
@@ -1072,14 +1314,14 @@
 
 
     // $ANTLR start when_part
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:85:1: when_part : VK_WHEN lhs_block ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:101:1: when_part : VK_WHEN lhs_block ;
     public final void when_part() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:86:2: ( VK_WHEN lhs_block )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:86:4: VK_WHEN lhs_block
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:102:2: ( VK_WHEN lhs_block )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:102:4: VK_WHEN lhs_block
             {
-            match(input,VK_WHEN,FOLLOW_VK_WHEN_in_when_part359); 
-            pushFollow(FOLLOW_lhs_block_in_when_part361);
+            match(input,VK_WHEN,FOLLOW_VK_WHEN_in_when_part439); 
+            pushFollow(FOLLOW_lhs_block_in_when_part441);
             lhs_block();
             _fsp--;
 
@@ -1099,50 +1341,50 @@
 
 
     // $ANTLR start rule_attributes
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:89:1: rule_attributes : ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:105:1: rule_attributes : ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ ) ;
     public final void rule_attributes() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:2: ( ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:4: ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:106:2: ( ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:106:4: ^( VT_RULE_ATTRIBUTES ( VK_ATTRIBUTES )? ( rule_attribute )+ )
             {
-            match(input,VT_RULE_ATTRIBUTES,FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes373); 
+            match(input,VT_RULE_ATTRIBUTES,FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes453); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:25: ( VK_ATTRIBUTES )?
-            int alt15=2;
-            int LA15_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:106:25: ( VK_ATTRIBUTES )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
 
-            if ( (LA15_0==VK_ATTRIBUTES) ) {
-                alt15=1;
+            if ( (LA19_0==VK_ATTRIBUTES) ) {
+                alt19=1;
             }
-            switch (alt15) {
+            switch (alt19) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:25: VK_ATTRIBUTES
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:106:25: VK_ATTRIBUTES
                     {
-                    match(input,VK_ATTRIBUTES,FOLLOW_VK_ATTRIBUTES_in_rule_attributes375); 
+                    match(input,VK_ATTRIBUTES,FOLLOW_VK_ATTRIBUTES_in_rule_attributes455); 
 
                     }
                     break;
 
             }
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:40: ( rule_attribute )+
-            int cnt16=0;
-            loop16:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:106:40: ( rule_attribute )+
+            int cnt20=0;
+            loop20:
             do {
-                int alt16=2;
-                int LA16_0 = input.LA(1);
+                int alt20=2;
+                int LA20_0 = input.LA(1);
 
-                if ( ((LA16_0>=VK_DATE_EFFECTIVE && LA16_0<=VK_ENABLED)) ) {
-                    alt16=1;
+                if ( ((LA20_0>=VK_DATE_EFFECTIVE && LA20_0<=VK_ENABLED)) ) {
+                    alt20=1;
                 }
 
 
-                switch (alt16) {
+                switch (alt20) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:90:40: rule_attribute
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:106:40: rule_attribute
             	    {
-            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes378);
+            	    pushFollow(FOLLOW_rule_attribute_in_rule_attributes458);
             	    rule_attribute();
             	    _fsp--;
 
@@ -1151,12 +1393,12 @@
             	    break;
 
             	default :
-            	    if ( cnt16 >= 1 ) break loop16;
+            	    if ( cnt20 >= 1 ) break loop20;
                         EarlyExitException eee =
-                            new EarlyExitException(16, input);
+                            new EarlyExitException(20, input);
                         throw eee;
                 }
-                cnt16++;
+                cnt20++;
             } while (true);
 
 
@@ -1177,84 +1419,84 @@
 
 
     // $ANTLR start rule_attribute
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:93:1: rule_attribute : ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:109:1: rule_attribute : ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) );
     public final void rule_attribute() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:94:2: ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) )
-            int alt20=12;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:110:2: ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) )
+            int alt24=12;
             switch ( input.LA(1) ) {
             case VK_SALIENCE:
                 {
-                alt20=1;
+                alt24=1;
                 }
                 break;
             case VK_NO_LOOP:
                 {
-                alt20=2;
+                alt24=2;
                 }
                 break;
             case VK_AGENDA_GROUP:
                 {
-                alt20=3;
+                alt24=3;
                 }
                 break;
             case VK_DURATION:
                 {
-                alt20=4;
+                alt24=4;
                 }
                 break;
             case VK_ACTIVATION_GROUP:
                 {
-                alt20=5;
+                alt24=5;
                 }
                 break;
             case VK_AUTO_FOCUS:
                 {
-                alt20=6;
+                alt24=6;
                 }
                 break;
             case VK_DATE_EFFECTIVE:
                 {
-                alt20=7;
+                alt24=7;
                 }
                 break;
             case VK_DATE_EXPIRES:
                 {
-                alt20=8;
+                alt24=8;
                 }
                 break;
             case VK_ENABLED:
                 {
-                alt20=9;
+                alt24=9;
                 }
                 break;
             case VK_RULEFLOW_GROUP:
                 {
-                alt20=10;
+                alt24=10;
                 }
                 break;
             case VK_LOCK_ON_ACTIVE:
                 {
-                alt20=11;
+                alt24=11;
                 }
                 break;
             case VK_DIALECT:
                 {
-                alt20=12;
+                alt24=12;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("93:1: rule_attribute : ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) );", 20, 0, input);
+                    new NoViableAltException("109:1: rule_attribute : ( ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) ) | ^( VK_NO_LOOP ( BOOL )? ) | ^( VK_AGENDA_GROUP STRING ) | ^( VK_DURATION INT ) | ^( VK_ACTIVATION_GROUP STRING ) | ^( VK_AUTO_FOCUS ( BOOL )? ) | ^( VK_DATE_EFFECTIVE STRING ) | ^( VK_DATE_EXPIRES STRING ) | ^( VK_ENABLED BOOL ) | ^( VK_RULEFLOW_GROUP STRING ) | ^( VK_LOCK_ON_ACTIVE ( BOOL )? ) | ^( VK_DIALECT STRING ) );", 24, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt20) {
+            switch (alt24) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:94:4: ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:110:4: ^( VK_SALIENCE ( INT | VT_PAREN_CHUNK ) )
                     {
-                    match(input,VK_SALIENCE,FOLLOW_VK_SALIENCE_in_rule_attribute392); 
+                    match(input,VK_SALIENCE,FOLLOW_VK_SALIENCE_in_rule_attribute472); 
 
                     match(input, Token.DOWN, null); 
                     if ( input.LA(1)==VT_PAREN_CHUNK||input.LA(1)==INT ) {
@@ -1264,7 +1506,7 @@
                     else {
                         MismatchedSetException mse =
                             new MismatchedSetException(null,input);
-                        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rule_attribute394);    throw mse;
+                        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_rule_attribute474);    throw mse;
                     }
 
 
@@ -1273,24 +1515,24 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:95:4: ^( VK_NO_LOOP ( BOOL )? )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:111:4: ^( VK_NO_LOOP ( BOOL )? )
                     {
-                    match(input,VK_NO_LOOP,FOLLOW_VK_NO_LOOP_in_rule_attribute406); 
+                    match(input,VK_NO_LOOP,FOLLOW_VK_NO_LOOP_in_rule_attribute486); 
 
                     if ( input.LA(1)==Token.DOWN ) {
                         match(input, Token.DOWN, null); 
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:95:17: ( BOOL )?
-                        int alt17=2;
-                        int LA17_0 = input.LA(1);
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:111:17: ( BOOL )?
+                        int alt21=2;
+                        int LA21_0 = input.LA(1);
 
-                        if ( (LA17_0==BOOL) ) {
-                            alt17=1;
+                        if ( (LA21_0==BOOL) ) {
+                            alt21=1;
                         }
-                        switch (alt17) {
+                        switch (alt21) {
                             case 1 :
-                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:95:17: BOOL
+                                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:111:17: BOOL
                                 {
-                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute408); 
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute488); 
 
                                 }
                                 break;
@@ -1304,60 +1546,60 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:96:4: ^( VK_AGENDA_GROUP STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:4: ^( VK_AGENDA_GROUP STRING )
                     {
-                    match(input,VK_AGENDA_GROUP,FOLLOW_VK_AGENDA_GROUP_in_rule_attribute418); 
+                    match(input,VK_AGENDA_GROUP,FOLLOW_VK_AGENDA_GROUP_in_rule_attribute498); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute420); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute500); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:97:4: ^( VK_DURATION INT )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:113:4: ^( VK_DURATION INT )
                     {
-                    match(input,VK_DURATION,FOLLOW_VK_DURATION_in_rule_attribute429); 
+                    match(input,VK_DURATION,FOLLOW_VK_DURATION_in_rule_attribute509); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,INT,FOLLOW_INT_in_rule_attribute431); 
+                    match(input,INT,FOLLOW_INT_in_rule_attribute511); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:98:4: ^( VK_ACTIVATION_GROUP STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:114:4: ^( VK_ACTIVATION_GROUP STRING )
                     {
-                    match(input,VK_ACTIVATION_GROUP,FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute441); 
+                    match(input,VK_ACTIVATION_GROUP,FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute521); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute443); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute523); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:99:4: ^( VK_AUTO_FOCUS ( BOOL )? )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:115:4: ^( VK_AUTO_FOCUS ( BOOL )? )
                     {
-                    match(input,VK_AUTO_FOCUS,FOLLOW_VK_AUTO_FOCUS_in_rule_attribute451); 
+                    match(input,VK_AUTO_FOCUS,FOLLOW_VK_AUTO_FOCUS_in_rule_attribute531); 
 
                     if ( input.LA(1)==Token.DOWN ) {
                         match(input, Token.DOWN, null); 
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:99:20: ( BOOL )?
-                        int alt18=2;
-                        int LA18_0 = input.LA(1);
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:115:20: ( BOOL )?
+                        int alt22=2;
+                        int LA22_0 = input.LA(1);
 
-                        if ( (LA18_0==BOOL) ) {
-                            alt18=1;
+                        if ( (LA22_0==BOOL) ) {
+                            alt22=1;
                         }
-                        switch (alt18) {
+                        switch (alt22) {
                             case 1 :
-                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:99:20: BOOL
+                                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:115:20: BOOL
                                 {
-                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute453); 
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute533); 
 
                                 }
                                 break;
@@ -1371,72 +1613,72 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:100:4: ^( VK_DATE_EFFECTIVE STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:116:4: ^( VK_DATE_EFFECTIVE STRING )
                     {
-                    match(input,VK_DATE_EFFECTIVE,FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute462); 
+                    match(input,VK_DATE_EFFECTIVE,FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute542); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute464); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute544); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:101:4: ^( VK_DATE_EXPIRES STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:117:4: ^( VK_DATE_EXPIRES STRING )
                     {
-                    match(input,VK_DATE_EXPIRES,FOLLOW_VK_DATE_EXPIRES_in_rule_attribute472); 
+                    match(input,VK_DATE_EXPIRES,FOLLOW_VK_DATE_EXPIRES_in_rule_attribute552); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute474); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute554); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:102:4: ^( VK_ENABLED BOOL )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:118:4: ^( VK_ENABLED BOOL )
                     {
-                    match(input,VK_ENABLED,FOLLOW_VK_ENABLED_in_rule_attribute482); 
+                    match(input,VK_ENABLED,FOLLOW_VK_ENABLED_in_rule_attribute562); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,BOOL,FOLLOW_BOOL_in_rule_attribute484); 
+                    match(input,BOOL,FOLLOW_BOOL_in_rule_attribute564); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:103:4: ^( VK_RULEFLOW_GROUP STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:119:4: ^( VK_RULEFLOW_GROUP STRING )
                     {
-                    match(input,VK_RULEFLOW_GROUP,FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute492); 
+                    match(input,VK_RULEFLOW_GROUP,FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute572); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute494); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute574); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:104:4: ^( VK_LOCK_ON_ACTIVE ( BOOL )? )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:120:4: ^( VK_LOCK_ON_ACTIVE ( BOOL )? )
                     {
-                    match(input,VK_LOCK_ON_ACTIVE,FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute502); 
+                    match(input,VK_LOCK_ON_ACTIVE,FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute582); 
 
                     if ( input.LA(1)==Token.DOWN ) {
                         match(input, Token.DOWN, null); 
-                        // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:104:24: ( BOOL )?
-                        int alt19=2;
-                        int LA19_0 = input.LA(1);
+                        // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:120:24: ( BOOL )?
+                        int alt23=2;
+                        int LA23_0 = input.LA(1);
 
-                        if ( (LA19_0==BOOL) ) {
-                            alt19=1;
+                        if ( (LA23_0==BOOL) ) {
+                            alt23=1;
                         }
-                        switch (alt19) {
+                        switch (alt23) {
                             case 1 :
-                                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:104:24: BOOL
+                                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:120:24: BOOL
                                 {
-                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute504); 
+                                match(input,BOOL,FOLLOW_BOOL_in_rule_attribute584); 
 
                                 }
                                 break;
@@ -1450,12 +1692,12 @@
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:105:4: ^( VK_DIALECT STRING )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:121:4: ^( VK_DIALECT STRING )
                     {
-                    match(input,VK_DIALECT,FOLLOW_VK_DIALECT_in_rule_attribute512); 
+                    match(input,VK_DIALECT,FOLLOW_VK_DIALECT_in_rule_attribute592); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,STRING,FOLLOW_STRING_in_rule_attribute514); 
+                    match(input,STRING,FOLLOW_STRING_in_rule_attribute594); 
 
                     match(input, Token.UP, null); 
 
@@ -1476,32 +1718,32 @@
 
 
     // $ANTLR start lhs_block
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:108:1: lhs_block : ^( VT_AND_IMPLICIT ( lhs )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:124:1: lhs_block : ^( VT_AND_IMPLICIT ( lhs )* ) ;
     public final void lhs_block() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:109:2: ( ^( VT_AND_IMPLICIT ( lhs )* ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:109:4: ^( VT_AND_IMPLICIT ( lhs )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:2: ( ^( VT_AND_IMPLICIT ( lhs )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:4: ^( VT_AND_IMPLICIT ( lhs )* )
             {
-            match(input,VT_AND_IMPLICIT,FOLLOW_VT_AND_IMPLICIT_in_lhs_block528); 
+            match(input,VT_AND_IMPLICIT,FOLLOW_VT_AND_IMPLICIT_in_lhs_block608); 
 
             if ( input.LA(1)==Token.DOWN ) {
                 match(input, Token.DOWN, null); 
-                // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:109:22: ( lhs )*
-                loop21:
+                // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:22: ( lhs )*
+                loop25:
                 do {
-                    int alt21=2;
-                    int LA21_0 = input.LA(1);
+                    int alt25=2;
+                    int LA25_0 = input.LA(1);
 
-                    if ( ((LA21_0>=VT_AND_PREFIX && LA21_0<=VT_OR_INFIX)||LA21_0==VT_PATTERN||LA21_0==VK_EVAL||LA21_0==VK_NOT||(LA21_0>=VK_EXISTS && LA21_0<=VK_FROM)) ) {
-                        alt21=1;
+                    if ( ((LA25_0>=VT_AND_PREFIX && LA25_0<=VT_OR_INFIX)||LA25_0==VT_PATTERN||LA25_0==VK_EVAL||LA25_0==VK_NOT||(LA25_0>=VK_EXISTS && LA25_0<=VK_FROM)) ) {
+                        alt25=1;
                     }
 
 
-                    switch (alt21) {
+                    switch (alt25) {
                 	case 1 :
-                	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:109:22: lhs
+                	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:22: lhs
                 	    {
-                	    pushFollow(FOLLOW_lhs_in_lhs_block530);
+                	    pushFollow(FOLLOW_lhs_in_lhs_block610);
                 	    lhs();
                 	    _fsp--;
 
@@ -1510,7 +1752,7 @@
                 	    break;
 
                 	default :
-                	    break loop21;
+                	    break loop25;
                     }
                 } while (true);
 
@@ -1533,93 +1775,93 @@
 
 
     // $ANTLR start lhs
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );
     public final void lhs() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:5: ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern )
-            int alt25=10;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:5: ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern )
+            int alt29=10;
             switch ( input.LA(1) ) {
             case VT_OR_PREFIX:
                 {
-                alt25=1;
+                alt29=1;
                 }
                 break;
             case VT_OR_INFIX:
                 {
-                alt25=2;
+                alt29=2;
                 }
                 break;
             case VT_AND_PREFIX:
                 {
-                alt25=3;
+                alt29=3;
                 }
                 break;
             case VT_AND_INFIX:
                 {
-                alt25=4;
+                alt29=4;
                 }
                 break;
             case VK_EXISTS:
                 {
-                alt25=5;
+                alt29=5;
                 }
                 break;
             case VK_NOT:
                 {
-                alt25=6;
+                alt29=6;
                 }
                 break;
             case VK_EVAL:
                 {
-                alt25=7;
+                alt29=7;
                 }
                 break;
             case VK_FORALL:
                 {
-                alt25=8;
+                alt29=8;
                 }
                 break;
             case VK_FROM:
                 {
-                alt25=9;
+                alt29=9;
                 }
                 break;
             case VT_PATTERN:
                 {
-                alt25=10;
+                alt29=10;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("112:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );", 25, 0, input);
+                    new NoViableAltException("128:1: lhs : ( ^( VT_OR_PREFIX ( lhs )+ ) | ^( VT_OR_INFIX lhs lhs ) | ^( VT_AND_PREFIX ( lhs )+ ) | ^( VT_AND_INFIX lhs lhs ) | ^( VK_EXISTS lhs ) | ^( VK_NOT lhs ) | ^( VK_EVAL VT_PAREN_CHUNK ) | ^( VK_FORALL ( lhs )+ ) | ^( VK_FROM lhs_pattern from_elements ) | lhs_pattern );", 29, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt25) {
+            switch (alt29) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:7: ^( VT_OR_PREFIX ( lhs )+ )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:7: ^( VT_OR_PREFIX ( lhs )+ )
                     {
-                    match(input,VT_OR_PREFIX,FOLLOW_VT_OR_PREFIX_in_lhs543); 
+                    match(input,VT_OR_PREFIX,FOLLOW_VT_OR_PREFIX_in_lhs623); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:22: ( lhs )+
-                    int cnt22=0;
-                    loop22:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:22: ( lhs )+
+                    int cnt26=0;
+                    loop26:
                     do {
-                        int alt22=2;
-                        int LA22_0 = input.LA(1);
+                        int alt26=2;
+                        int LA26_0 = input.LA(1);
 
-                        if ( ((LA22_0>=VT_AND_PREFIX && LA22_0<=VT_OR_INFIX)||LA22_0==VT_PATTERN||LA22_0==VK_EVAL||LA22_0==VK_NOT||(LA22_0>=VK_EXISTS && LA22_0<=VK_FROM)) ) {
-                            alt22=1;
+                        if ( ((LA26_0>=VT_AND_PREFIX && LA26_0<=VT_OR_INFIX)||LA26_0==VT_PATTERN||LA26_0==VK_EVAL||LA26_0==VK_NOT||(LA26_0>=VK_EXISTS && LA26_0<=VK_FROM)) ) {
+                            alt26=1;
                         }
 
 
-                        switch (alt22) {
+                        switch (alt26) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:112:22: lhs
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:22: lhs
                     	    {
-                    	    pushFollow(FOLLOW_lhs_in_lhs545);
+                    	    pushFollow(FOLLOW_lhs_in_lhs625);
                     	    lhs();
                     	    _fsp--;
 
@@ -1628,12 +1870,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt22 >= 1 ) break loop22;
+                    	    if ( cnt26 >= 1 ) break loop26;
                                 EarlyExitException eee =
-                                    new EarlyExitException(22, input);
+                                    new EarlyExitException(26, input);
                                 throw eee;
                         }
-                        cnt22++;
+                        cnt26++;
                     } while (true);
 
 
@@ -1642,16 +1884,16 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:113:4: ^( VT_OR_INFIX lhs lhs )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:129:4: ^( VT_OR_INFIX lhs lhs )
                     {
-                    match(input,VT_OR_INFIX,FOLLOW_VT_OR_INFIX_in_lhs553); 
+                    match(input,VT_OR_INFIX,FOLLOW_VT_OR_INFIX_in_lhs633); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs555);
+                    pushFollow(FOLLOW_lhs_in_lhs635);
                     lhs();
                     _fsp--;
 
-                    pushFollow(FOLLOW_lhs_in_lhs557);
+                    pushFollow(FOLLOW_lhs_in_lhs637);
                     lhs();
                     _fsp--;
 
@@ -1661,28 +1903,28 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:114:4: ^( VT_AND_PREFIX ( lhs )+ )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:130:4: ^( VT_AND_PREFIX ( lhs )+ )
                     {
-                    match(input,VT_AND_PREFIX,FOLLOW_VT_AND_PREFIX_in_lhs564); 
+                    match(input,VT_AND_PREFIX,FOLLOW_VT_AND_PREFIX_in_lhs644); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:114:20: ( lhs )+
-                    int cnt23=0;
-                    loop23:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:130:20: ( lhs )+
+                    int cnt27=0;
+                    loop27:
                     do {
-                        int alt23=2;
-                        int LA23_0 = input.LA(1);
+                        int alt27=2;
+                        int LA27_0 = input.LA(1);
 
-                        if ( ((LA23_0>=VT_AND_PREFIX && LA23_0<=VT_OR_INFIX)||LA23_0==VT_PATTERN||LA23_0==VK_EVAL||LA23_0==VK_NOT||(LA23_0>=VK_EXISTS && LA23_0<=VK_FROM)) ) {
-                            alt23=1;
+                        if ( ((LA27_0>=VT_AND_PREFIX && LA27_0<=VT_OR_INFIX)||LA27_0==VT_PATTERN||LA27_0==VK_EVAL||LA27_0==VK_NOT||(LA27_0>=VK_EXISTS && LA27_0<=VK_FROM)) ) {
+                            alt27=1;
                         }
 
 
-                        switch (alt23) {
+                        switch (alt27) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:114:20: lhs
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:130:20: lhs
                     	    {
-                    	    pushFollow(FOLLOW_lhs_in_lhs566);
+                    	    pushFollow(FOLLOW_lhs_in_lhs646);
                     	    lhs();
                     	    _fsp--;
 
@@ -1691,12 +1933,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt23 >= 1 ) break loop23;
+                    	    if ( cnt27 >= 1 ) break loop27;
                                 EarlyExitException eee =
-                                    new EarlyExitException(23, input);
+                                    new EarlyExitException(27, input);
                                 throw eee;
                         }
-                        cnt23++;
+                        cnt27++;
                     } while (true);
 
 
@@ -1705,16 +1947,16 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:115:4: ^( VT_AND_INFIX lhs lhs )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:131:4: ^( VT_AND_INFIX lhs lhs )
                     {
-                    match(input,VT_AND_INFIX,FOLLOW_VT_AND_INFIX_in_lhs574); 
+                    match(input,VT_AND_INFIX,FOLLOW_VT_AND_INFIX_in_lhs654); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs576);
+                    pushFollow(FOLLOW_lhs_in_lhs656);
                     lhs();
                     _fsp--;
 
-                    pushFollow(FOLLOW_lhs_in_lhs578);
+                    pushFollow(FOLLOW_lhs_in_lhs658);
                     lhs();
                     _fsp--;
 
@@ -1724,12 +1966,12 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:116:4: ^( VK_EXISTS lhs )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:132:4: ^( VK_EXISTS lhs )
                     {
-                    match(input,VK_EXISTS,FOLLOW_VK_EXISTS_in_lhs585); 
+                    match(input,VK_EXISTS,FOLLOW_VK_EXISTS_in_lhs665); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs587);
+                    pushFollow(FOLLOW_lhs_in_lhs667);
                     lhs();
                     _fsp--;
 
@@ -1739,12 +1981,12 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:117:4: ^( VK_NOT lhs )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:133:4: ^( VK_NOT lhs )
                     {
-                    match(input,VK_NOT,FOLLOW_VK_NOT_in_lhs594); 
+                    match(input,VK_NOT,FOLLOW_VK_NOT_in_lhs674); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_lhs596);
+                    pushFollow(FOLLOW_lhs_in_lhs676);
                     lhs();
                     _fsp--;
 
@@ -1754,40 +1996,40 @@
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:118:4: ^( VK_EVAL VT_PAREN_CHUNK )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:134:4: ^( VK_EVAL VT_PAREN_CHUNK )
                     {
-                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_lhs603); 
+                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_lhs683); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_lhs605); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_lhs685); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:119:4: ^( VK_FORALL ( lhs )+ )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:135:4: ^( VK_FORALL ( lhs )+ )
                     {
-                    match(input,VK_FORALL,FOLLOW_VK_FORALL_in_lhs612); 
+                    match(input,VK_FORALL,FOLLOW_VK_FORALL_in_lhs692); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:119:16: ( lhs )+
-                    int cnt24=0;
-                    loop24:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:135:16: ( lhs )+
+                    int cnt28=0;
+                    loop28:
                     do {
-                        int alt24=2;
-                        int LA24_0 = input.LA(1);
+                        int alt28=2;
+                        int LA28_0 = input.LA(1);
 
-                        if ( ((LA24_0>=VT_AND_PREFIX && LA24_0<=VT_OR_INFIX)||LA24_0==VT_PATTERN||LA24_0==VK_EVAL||LA24_0==VK_NOT||(LA24_0>=VK_EXISTS && LA24_0<=VK_FROM)) ) {
-                            alt24=1;
+                        if ( ((LA28_0>=VT_AND_PREFIX && LA28_0<=VT_OR_INFIX)||LA28_0==VT_PATTERN||LA28_0==VK_EVAL||LA28_0==VK_NOT||(LA28_0>=VK_EXISTS && LA28_0<=VK_FROM)) ) {
+                            alt28=1;
                         }
 
 
-                        switch (alt24) {
+                        switch (alt28) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:119:16: lhs
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:135:16: lhs
                     	    {
-                    	    pushFollow(FOLLOW_lhs_in_lhs614);
+                    	    pushFollow(FOLLOW_lhs_in_lhs694);
                     	    lhs();
                     	    _fsp--;
 
@@ -1796,12 +2038,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt24 >= 1 ) break loop24;
+                    	    if ( cnt28 >= 1 ) break loop28;
                                 EarlyExitException eee =
-                                    new EarlyExitException(24, input);
+                                    new EarlyExitException(28, input);
                                 throw eee;
                         }
-                        cnt24++;
+                        cnt28++;
                     } while (true);
 
 
@@ -1810,16 +2052,16 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:120:4: ^( VK_FROM lhs_pattern from_elements )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:136:4: ^( VK_FROM lhs_pattern from_elements )
                     {
-                    match(input,VK_FROM,FOLLOW_VK_FROM_in_lhs622); 
+                    match(input,VK_FROM,FOLLOW_VK_FROM_in_lhs702); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs624);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs704);
                     lhs_pattern();
                     _fsp--;
 
-                    pushFollow(FOLLOW_from_elements_in_lhs626);
+                    pushFollow(FOLLOW_from_elements_in_lhs706);
                     from_elements();
                     _fsp--;
 
@@ -1829,9 +2071,9 @@
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:121:4: lhs_pattern
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:137:4: lhs_pattern
                     {
-                    pushFollow(FOLLOW_lhs_pattern_in_lhs632);
+                    pushFollow(FOLLOW_lhs_pattern_in_lhs712);
                     lhs_pattern();
                     _fsp--;
 
@@ -1853,71 +2095,71 @@
 
 
     // $ANTLR start from_elements
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:124:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:140:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );
     public final void from_elements() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:2: ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
-            int alt29=4;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:141:2: ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            int alt33=4;
             switch ( input.LA(1) ) {
             case VK_ACCUMULATE:
                 {
-                alt29=1;
+                alt33=1;
                 }
                 break;
             case VK_COLLECT:
                 {
-                alt29=2;
+                alt33=2;
                 }
                 break;
             case VK_ENTRY_POINT:
                 {
-                alt29=3;
+                alt33=3;
                 }
                 break;
             case VT_FROM_SOURCE:
                 {
-                alt29=4;
+                alt33=4;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("124:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );", 29, 0, input);
+                    new NoViableAltException("140:1: from_elements : ( ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) ) | ^( VK_COLLECT lhs ) | ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID ) | ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? ) );", 33, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt29) {
+            switch (alt33) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:4: ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:141:4: ^( VK_ACCUMULATE lhs ( accumulate_init_clause | accumulate_id_clause ) )
                     {
-                    match(input,VK_ACCUMULATE,FOLLOW_VK_ACCUMULATE_in_from_elements644); 
+                    match(input,VK_ACCUMULATE,FOLLOW_VK_ACCUMULATE_in_from_elements724); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_from_elements646);
+                    pushFollow(FOLLOW_lhs_in_from_elements726);
                     lhs();
                     _fsp--;
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:24: ( accumulate_init_clause | accumulate_id_clause )
-                    int alt26=2;
-                    int LA26_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:141:24: ( accumulate_init_clause | accumulate_id_clause )
+                    int alt30=2;
+                    int LA30_0 = input.LA(1);
 
-                    if ( (LA26_0==VT_ACCUMULATE_INIT_CLAUSE) ) {
-                        alt26=1;
+                    if ( (LA30_0==VT_ACCUMULATE_INIT_CLAUSE) ) {
+                        alt30=1;
                     }
-                    else if ( (LA26_0==VT_ACCUMULATE_ID_CLAUSE) ) {
-                        alt26=2;
+                    else if ( (LA30_0==VT_ACCUMULATE_ID_CLAUSE) ) {
+                        alt30=2;
                     }
                     else {
                         NoViableAltException nvae =
-                            new NoViableAltException("125:24: ( accumulate_init_clause | accumulate_id_clause )", 26, 0, input);
+                            new NoViableAltException("141:24: ( accumulate_init_clause | accumulate_id_clause )", 30, 0, input);
 
                         throw nvae;
                     }
-                    switch (alt26) {
+                    switch (alt30) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:25: accumulate_init_clause
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:141:25: accumulate_init_clause
                             {
-                            pushFollow(FOLLOW_accumulate_init_clause_in_from_elements649);
+                            pushFollow(FOLLOW_accumulate_init_clause_in_from_elements729);
                             accumulate_init_clause();
                             _fsp--;
 
@@ -1925,9 +2167,9 @@
                             }
                             break;
                         case 2 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:125:48: accumulate_id_clause
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:141:48: accumulate_id_clause
                             {
-                            pushFollow(FOLLOW_accumulate_id_clause_in_from_elements651);
+                            pushFollow(FOLLOW_accumulate_id_clause_in_from_elements731);
                             accumulate_id_clause();
                             _fsp--;
 
@@ -1943,12 +2185,12 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:126:4: ^( VK_COLLECT lhs )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:142:4: ^( VK_COLLECT lhs )
                     {
-                    match(input,VK_COLLECT,FOLLOW_VK_COLLECT_in_from_elements659); 
+                    match(input,VK_COLLECT,FOLLOW_VK_COLLECT_in_from_elements739); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_lhs_in_from_elements661);
+                    pushFollow(FOLLOW_lhs_in_from_elements741);
                     lhs();
                     _fsp--;
 
@@ -1958,54 +2200,54 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:127:4: ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:143:4: ^( VK_ENTRY_POINT VT_ENTRYPOINT_ID )
                     {
-                    match(input,VK_ENTRY_POINT,FOLLOW_VK_ENTRY_POINT_in_from_elements668); 
+                    match(input,VK_ENTRY_POINT,FOLLOW_VK_ENTRY_POINT_in_from_elements748); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_ENTRYPOINT_ID,FOLLOW_VT_ENTRYPOINT_ID_in_from_elements670); 
+                    match(input,VT_ENTRYPOINT_ID,FOLLOW_VT_ENTRYPOINT_ID_in_from_elements750); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:4: ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:144:4: ^( VT_FROM_SOURCE ID ( VT_PAREN_CHUNK )? ( expression_chain )? )
                     {
-                    match(input,VT_FROM_SOURCE,FOLLOW_VT_FROM_SOURCE_in_from_elements677); 
+                    match(input,VT_FROM_SOURCE,FOLLOW_VT_FROM_SOURCE_in_from_elements757); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,ID,FOLLOW_ID_in_from_elements679); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:24: ( VT_PAREN_CHUNK )?
-                    int alt27=2;
-                    int LA27_0 = input.LA(1);
+                    match(input,ID,FOLLOW_ID_in_from_elements759); 
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:144:24: ( VT_PAREN_CHUNK )?
+                    int alt31=2;
+                    int LA31_0 = input.LA(1);
 
-                    if ( (LA27_0==VT_PAREN_CHUNK) ) {
-                        alt27=1;
+                    if ( (LA31_0==VT_PAREN_CHUNK) ) {
+                        alt31=1;
                     }
-                    switch (alt27) {
+                    switch (alt31) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:24: VT_PAREN_CHUNK
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:144:24: VT_PAREN_CHUNK
                             {
-                            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_from_elements681); 
+                            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_from_elements761); 
 
                             }
                             break;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:40: ( expression_chain )?
-                    int alt28=2;
-                    int LA28_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:144:40: ( expression_chain )?
+                    int alt32=2;
+                    int LA32_0 = input.LA(1);
 
-                    if ( (LA28_0==VT_EXPRESSION_CHAIN) ) {
-                        alt28=1;
+                    if ( (LA32_0==VT_EXPRESSION_CHAIN) ) {
+                        alt32=1;
                     }
-                    switch (alt28) {
+                    switch (alt32) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:128:40: expression_chain
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:144:40: expression_chain
                             {
-                            pushFollow(FOLLOW_expression_chain_in_from_elements684);
+                            pushFollow(FOLLOW_expression_chain_in_from_elements764);
                             expression_chain();
                             _fsp--;
 
@@ -2035,39 +2277,39 @@
 
 
     // $ANTLR start accumulate_init_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:131:1: accumulate_init_clause : ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:147:1: accumulate_init_clause : ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) ;
     public final void accumulate_init_clause() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:132:2: ( ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:132:4: ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:148:2: ( ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:148:4: ^( VT_ACCUMULATE_INIT_CLAUSE ^( VK_INIT VT_PAREN_CHUNK ) ^( VK_ACTION VT_PAREN_CHUNK ) ( accumulate_init_reverse_clause )? ^( VK_RESULT VT_PAREN_CHUNK ) )
             {
-            match(input,VT_ACCUMULATE_INIT_CLAUSE,FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause698); 
+            match(input,VT_ACCUMULATE_INIT_CLAUSE,FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause778); 
 
             match(input, Token.DOWN, null); 
-            match(input,VK_INIT,FOLLOW_VK_INIT_in_accumulate_init_clause705); 
+            match(input,VK_INIT,FOLLOW_VK_INIT_in_accumulate_init_clause785); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause707); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause787); 
 
             match(input, Token.UP, null); 
-            match(input,VK_ACTION,FOLLOW_VK_ACTION_in_accumulate_init_clause715); 
+            match(input,VK_ACTION,FOLLOW_VK_ACTION_in_accumulate_init_clause795); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause717); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause797); 
 
             match(input, Token.UP, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:135:4: ( accumulate_init_reverse_clause )?
-            int alt30=2;
-            int LA30_0 = input.LA(1);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:151:4: ( accumulate_init_reverse_clause )?
+            int alt34=2;
+            int LA34_0 = input.LA(1);
 
-            if ( (LA30_0==VK_REVERSE) ) {
-                alt30=1;
+            if ( (LA34_0==VK_REVERSE) ) {
+                alt34=1;
             }
-            switch (alt30) {
+            switch (alt34) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:135:4: accumulate_init_reverse_clause
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:151:4: accumulate_init_reverse_clause
                     {
-                    pushFollow(FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause724);
+                    pushFollow(FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause804);
                     accumulate_init_reverse_clause();
                     _fsp--;
 
@@ -2077,10 +2319,10 @@
 
             }
 
-            match(input,VK_RESULT,FOLLOW_VK_RESULT_in_accumulate_init_clause731); 
+            match(input,VK_RESULT,FOLLOW_VK_RESULT_in_accumulate_init_clause811); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause733); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause813); 
 
             match(input, Token.UP, null); 
 
@@ -2101,16 +2343,16 @@
 
 
     // $ANTLR start accumulate_init_reverse_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:139:1: accumulate_init_reverse_clause : ^( VK_REVERSE VT_PAREN_CHUNK ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:155:1: accumulate_init_reverse_clause : ^( VK_REVERSE VT_PAREN_CHUNK ) ;
     public final void accumulate_init_reverse_clause() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:140:2: ( ^( VK_REVERSE VT_PAREN_CHUNK ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:140:4: ^( VK_REVERSE VT_PAREN_CHUNK )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:2: ( ^( VK_REVERSE VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:4: ^( VK_REVERSE VT_PAREN_CHUNK )
             {
-            match(input,VK_REVERSE,FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause747); 
+            match(input,VK_REVERSE,FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause827); 
 
             match(input, Token.DOWN, null); 
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause749); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause829); 
 
             match(input, Token.UP, null); 
 
@@ -2129,17 +2371,17 @@
 
 
     // $ANTLR start accumulate_id_clause
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:144:1: accumulate_id_clause : ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:160:1: accumulate_id_clause : ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) ;
     public final void accumulate_id_clause() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:145:2: ( ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:145:4: ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:161:2: ( ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:161:4: ^( VT_ACCUMULATE_ID_CLAUSE ID VT_PAREN_CHUNK )
             {
-            match(input,VT_ACCUMULATE_ID_CLAUSE,FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause763); 
+            match(input,VT_ACCUMULATE_ID_CLAUSE,FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause843); 
 
             match(input, Token.DOWN, null); 
-            match(input,ID,FOLLOW_ID_in_accumulate_id_clause765); 
-            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause767); 
+            match(input,ID,FOLLOW_ID_in_accumulate_id_clause845); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause847); 
 
             match(input, Token.UP, null); 
 
@@ -2158,24 +2400,45 @@
 
 
     // $ANTLR start lhs_pattern
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:148:1: lhs_pattern : ^( VT_PATTERN fact_expression ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:164:1: lhs_pattern : ^( VT_PATTERN fact_expression ) ( over_clause )? ;
     public final void lhs_pattern() throws RecognitionException {
         try {
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:149:2: ( ^( VT_PATTERN fact_expression ) )
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:149:4: ^( VT_PATTERN fact_expression )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:165:2: ( ^( VT_PATTERN fact_expression ) ( over_clause )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:165:4: ^( VT_PATTERN fact_expression ) ( over_clause )?
             {
-            match(input,VT_PATTERN,FOLLOW_VT_PATTERN_in_lhs_pattern780); 
+            match(input,VT_PATTERN,FOLLOW_VT_PATTERN_in_lhs_pattern860); 
 
             match(input, Token.DOWN, null); 
-            pushFollow(FOLLOW_fact_expression_in_lhs_pattern782);
+            pushFollow(FOLLOW_fact_expression_in_lhs_pattern862);
             fact_expression();
             _fsp--;
 
 
             match(input, Token.UP, null); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:165:34: ( over_clause )?
+            int alt35=2;
+            int LA35_0 = input.LA(1);
 
+            if ( (LA35_0==OVER) ) {
+                alt35=1;
             }
+            switch (alt35) {
+                case 1 :
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:165:34: over_clause
+                    {
+                    pushFollow(FOLLOW_over_clause_in_lhs_pattern865);
+                    over_clause();
+                    _fsp--;
 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
         }
         catch (RecognitionException re) {
             reportError(re);
@@ -2188,172 +2451,262 @@
     // $ANTLR end lhs_pattern
 
 
+    // $ANTLR start over_clause
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:168:1: over_clause : ^( OVER ( over_element )+ ) ;
+    public final void over_clause() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:169:2: ( ^( OVER ( over_element )+ ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:169:4: ^( OVER ( over_element )+ )
+            {
+            match(input,OVER,FOLLOW_OVER_in_over_clause878); 
+
+            match(input, Token.DOWN, null); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:169:11: ( over_element )+
+            int cnt36=0;
+            loop36:
+            do {
+                int alt36=2;
+                int LA36_0 = input.LA(1);
+
+                if ( (LA36_0==VT_BEHAVIOR) ) {
+                    alt36=1;
+                }
+
+
+                switch (alt36) {
+            	case 1 :
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:169:11: over_element
+            	    {
+            	    pushFollow(FOLLOW_over_element_in_over_clause880);
+            	    over_element();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt36 >= 1 ) break loop36;
+                        EarlyExitException eee =
+                            new EarlyExitException(36, input);
+                        throw eee;
+                }
+                cnt36++;
+            } while (true);
+
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end over_clause
+
+
+    // $ANTLR start over_element
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:172:1: over_element : ^( VT_BEHAVIOR ID ID VT_PAREN_CHUNK ) ;
+    public final void over_element() throws RecognitionException {
+        try {
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:173:2: ( ^( VT_BEHAVIOR ID ID VT_PAREN_CHUNK ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:173:4: ^( VT_BEHAVIOR ID ID VT_PAREN_CHUNK )
+            {
+            match(input,VT_BEHAVIOR,FOLLOW_VT_BEHAVIOR_in_over_element894); 
+
+            match(input, Token.DOWN, null); 
+            match(input,ID,FOLLOW_ID_in_over_element896); 
+            match(input,ID,FOLLOW_ID_in_over_element898); 
+            match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_over_element900); 
+
+            match(input, Token.UP, null); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end over_element
+
+
     // $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 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 );
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:176: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_e!
 xpression ) | ^( 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 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;
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:177: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 alt49=28;
             switch ( input.LA(1) ) {
             case DOUBLE_PIPE:
                 {
-                alt43=1;
+                alt49=1;
                 }
                 break;
             case DOUBLE_AMPER:
                 {
-                alt43=2;
+                alt49=2;
                 }
                 break;
             case VT_FACT_BINDING:
                 {
-                alt43=3;
+                alt49=3;
                 }
                 break;
             case VT_FACT:
                 {
-                alt43=4;
+                alt49=4;
                 }
                 break;
             case VT_FACT_OR:
                 {
-                alt43=5;
+                alt49=5;
                 }
                 break;
             case VK_EVAL:
                 {
-                alt43=6;
+                alt49=6;
                 }
                 break;
             case VK_IN:
                 {
-                alt43=7;
+                alt49=7;
                 }
                 break;
             case EQUAL:
                 {
-                alt43=8;
+                alt49=8;
                 }
                 break;
             case GREATER:
                 {
-                alt43=9;
+                alt49=9;
                 }
                 break;
             case GREATER_EQUAL:
                 {
-                alt43=10;
+                alt49=10;
                 }
                 break;
             case LESS:
                 {
-                alt43=11;
+                alt49=11;
                 }
                 break;
             case LESS_EQUAL:
                 {
-                alt43=12;
+                alt49=12;
                 }
                 break;
             case NOT_EQUAL:
                 {
-                alt43=13;
+                alt49=13;
                 }
                 break;
             case VK_CONTAINS:
                 {
-                alt43=14;
+                alt49=14;
                 }
                 break;
             case VK_EXCLUDES:
                 {
-                alt43=15;
+                alt49=15;
                 }
                 break;
             case VK_MATCHES:
                 {
-                alt43=16;
+                alt49=16;
                 }
                 break;
             case VK_SOUNDSLIKE:
                 {
-                alt43=17;
+                alt49=17;
                 }
                 break;
             case VK_MEMBEROF:
                 {
-                alt43=18;
+                alt49=18;
                 }
                 break;
             case ID:
                 {
-                alt43=19;
+                alt49=19;
                 }
                 break;
             case VT_BIND_FIELD:
                 {
-                alt43=20;
+                alt49=20;
                 }
                 break;
             case VT_FIELD:
                 {
-                alt43=21;
+                alt49=21;
                 }
                 break;
             case VT_ACCESSOR_PATH:
                 {
-                alt43=22;
+                alt49=22;
                 }
                 break;
             case STRING:
                 {
-                alt43=23;
+                alt49=23;
                 }
                 break;
             case INT:
                 {
-                alt43=24;
+                alt49=24;
                 }
                 break;
             case FLOAT:
                 {
-                alt43=25;
+                alt49=25;
                 }
                 break;
             case BOOL:
                 {
-                alt43=26;
+                alt49=26;
                 }
                 break;
             case NULL:
                 {
-                alt43=27;
+                alt49=27;
                 }
                 break;
             case VT_PAREN_CHUNK:
                 {
-                alt43=28;
+                alt49=28;
                 }
                 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 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);
+                    new NoViableAltException("176: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 );", 49, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt43) {
+            switch (alt49) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:153:4: ^( DOUBLE_PIPE fact_expression fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:177:4: ^( DOUBLE_PIPE fact_expression fact_expression )
                     {
-                    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_expression795); 
+                    match(input,DOUBLE_PIPE,FOLLOW_DOUBLE_PIPE_in_fact_expression913); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression797);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression915);
                     fact_expression();
                     _fsp--;
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression799);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression917);
                     fact_expression();
                     _fsp--;
 
@@ -2363,16 +2716,16 @@
                     }
                     break;
                 case 2 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:154:4: ^( DOUBLE_AMPER fact_expression fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:178:4: ^( DOUBLE_AMPER fact_expression fact_expression )
                     {
-                    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_fact_expression806); 
+                    match(input,DOUBLE_AMPER,FOLLOW_DOUBLE_AMPER_in_fact_expression924); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression808);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression926);
                     fact_expression();
                     _fsp--;
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression810);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression928);
                     fact_expression();
                     _fsp--;
 
@@ -2382,13 +2735,13 @@
                     }
                     break;
                 case 3 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:155:4: ^( VT_FACT_BINDING VT_LABEL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:179:4: ^( VT_FACT_BINDING VT_LABEL fact_expression )
                     {
-                    match(input,VT_FACT_BINDING,FOLLOW_VT_FACT_BINDING_in_fact_expression817); 
+                    match(input,VT_FACT_BINDING,FOLLOW_VT_FACT_BINDING_in_fact_expression935); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression819); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression821);
+                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression937); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression939);
                     fact_expression();
                     _fsp--;
 
@@ -2398,31 +2751,31 @@
                     }
                     break;
                 case 4 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:4: ^( VT_FACT pattern_type ( fact_expression )* )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:180:4: ^( VT_FACT pattern_type ( fact_expression )* )
                     {
-                    match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression828); 
+                    match(input,VT_FACT,FOLLOW_VT_FACT_in_fact_expression946); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_pattern_type_in_fact_expression830);
+                    pushFollow(FOLLOW_pattern_type_in_fact_expression948);
                     pattern_type();
                     _fsp--;
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:27: ( fact_expression )*
-                    loop31:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:180:27: ( fact_expression )*
+                    loop37:
                     do {
-                        int alt31=2;
-                        int LA31_0 = input.LA(1);
+                        int alt37=2;
+                        int LA37_0 = input.LA(1);
 
-                        if ( (LA31_0==VT_FACT||LA31_0==VT_PAREN_CHUNK||(LA31_0>=VT_FACT_BINDING && LA31_0<=VT_ACCESSOR_PATH)||(LA31_0>=VK_EVAL && LA31_0<=VK_MEMBEROF)||LA31_0==VK_IN||LA31_0==ID||LA31_0==STRING||(LA31_0>=BOOL && LA31_0<=DOUBLE_AMPER)||(LA31_0>=EQUAL && LA31_0<=NOT_EQUAL)||(LA31_0>=FLOAT && LA31_0<=NULL)) ) {
-                            alt31=1;
+                        if ( (LA37_0==VT_FACT||LA37_0==VT_PAREN_CHUNK||(LA37_0>=VT_FACT_BINDING && LA37_0<=VT_ACCESSOR_PATH)||(LA37_0>=VK_EVAL && LA37_0<=VK_MEMBEROF)||LA37_0==VK_IN||LA37_0==ID||LA37_0==STRING||(LA37_0>=BOOL && LA37_0<=DOUBLE_AMPER)||(LA37_0>=EQUAL && LA37_0<=NOT_EQUAL)||(LA37_0>=FLOAT && LA37_0<=NULL)) ) {
+                            alt37=1;
                         }
 
 
-                        switch (alt31) {
+                        switch (alt37) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:156:27: fact_expression
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:180:27: fact_expression
                     	    {
-                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression832);
+                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression950);
                     	    fact_expression();
                     	    _fsp--;
 
@@ -2431,7 +2784,7 @@
                     	    break;
 
                     	default :
-                    	    break loop31;
+                    	    break loop37;
                         }
                     } while (true);
 
@@ -2441,16 +2794,16 @@
                     }
                     break;
                 case 5 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:157:4: ^( VT_FACT_OR fact_expression fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:181:4: ^( VT_FACT_OR fact_expression fact_expression )
                     {
-                    match(input,VT_FACT_OR,FOLLOW_VT_FACT_OR_in_fact_expression840); 
+                    match(input,VT_FACT_OR,FOLLOW_VT_FACT_OR_in_fact_expression958); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression842);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression960);
                     fact_expression();
                     _fsp--;
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression844);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression962);
                     fact_expression();
                     _fsp--;
 
@@ -2460,58 +2813,58 @@
                     }
                     break;
                 case 6 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:158:4: ^( VK_EVAL VT_PAREN_CHUNK )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:182:4: ^( VK_EVAL VT_PAREN_CHUNK )
                     {
-                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_fact_expression851); 
+                    match(input,VK_EVAL,FOLLOW_VK_EVAL_in_fact_expression969); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression853); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression971); 
 
                     match(input, Token.UP, null); 
 
                     }
                     break;
                 case 7 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:159:4: ^( VK_IN ( VK_NOT )? ( fact_expression )+ )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:183:4: ^( VK_IN ( VK_NOT )? ( fact_expression )+ )
                     {
-                    match(input,VK_IN,FOLLOW_VK_IN_in_fact_expression860); 
+                    match(input,VK_IN,FOLLOW_VK_IN_in_fact_expression978); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:159:12: ( VK_NOT )?
-                    int alt32=2;
-                    int LA32_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:183:12: ( VK_NOT )?
+                    int alt38=2;
+                    int LA38_0 = input.LA(1);
 
-                    if ( (LA32_0==VK_NOT) ) {
-                        alt32=1;
+                    if ( (LA38_0==VK_NOT) ) {
+                        alt38=1;
                     }
-                    switch (alt32) {
+                    switch (alt38) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:159:12: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:183:12: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression862); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression980); 
 
                             }
                             break;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:159:20: ( fact_expression )+
-                    int cnt33=0;
-                    loop33:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:183:20: ( fact_expression )+
+                    int cnt39=0;
+                    loop39:
                     do {
-                        int alt33=2;
-                        int LA33_0 = input.LA(1);
+                        int alt39=2;
+                        int LA39_0 = input.LA(1);
 
-                        if ( (LA33_0==VT_FACT||LA33_0==VT_PAREN_CHUNK||(LA33_0>=VT_FACT_BINDING && LA33_0<=VT_ACCESSOR_PATH)||(LA33_0>=VK_EVAL && LA33_0<=VK_MEMBEROF)||LA33_0==VK_IN||LA33_0==ID||LA33_0==STRING||(LA33_0>=BOOL && LA33_0<=DOUBLE_AMPER)||(LA33_0>=EQUAL && LA33_0<=NOT_EQUAL)||(LA33_0>=FLOAT && LA33_0<=NULL)) ) {
-                            alt33=1;
+                        if ( (LA39_0==VT_FACT||LA39_0==VT_PAREN_CHUNK||(LA39_0>=VT_FACT_BINDING && LA39_0<=VT_ACCESSOR_PATH)||(LA39_0>=VK_EVAL && LA39_0<=VK_MEMBEROF)||LA39_0==VK_IN||LA39_0==ID||LA39_0==STRING||(LA39_0>=BOOL && LA39_0<=DOUBLE_AMPER)||(LA39_0>=EQUAL && LA39_0<=NOT_EQUAL)||(LA39_0>=FLOAT && LA39_0<=NULL)) ) {
+                            alt39=1;
                         }
 
 
-                        switch (alt33) {
+                        switch (alt39) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:159:20: fact_expression
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:183:20: fact_expression
                     	    {
-                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression865);
+                    	    pushFollow(FOLLOW_fact_expression_in_fact_expression983);
                     	    fact_expression();
                     	    _fsp--;
 
@@ -2520,12 +2873,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt33 >= 1 ) break loop33;
+                    	    if ( cnt39 >= 1 ) break loop39;
                                 EarlyExitException eee =
-                                    new EarlyExitException(33, input);
+                                    new EarlyExitException(39, input);
                                 throw eee;
                         }
-                        cnt33++;
+                        cnt39++;
                     } while (true);
 
 
@@ -2534,12 +2887,12 @@
                     }
                     break;
                 case 8 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:160:4: ^( EQUAL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:4: ^( EQUAL fact_expression )
                     {
-                    match(input,EQUAL,FOLLOW_EQUAL_in_fact_expression873); 
+                    match(input,EQUAL,FOLLOW_EQUAL_in_fact_expression991); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression875);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression993);
                     fact_expression();
                     _fsp--;
 
@@ -2549,12 +2902,12 @@
                     }
                     break;
                 case 9 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:161:4: ^( GREATER fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:185:4: ^( GREATER fact_expression )
                     {
-                    match(input,GREATER,FOLLOW_GREATER_in_fact_expression882); 
+                    match(input,GREATER,FOLLOW_GREATER_in_fact_expression1000); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression884);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1002);
                     fact_expression();
                     _fsp--;
 
@@ -2564,12 +2917,12 @@
                     }
                     break;
                 case 10 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:162:4: ^( GREATER_EQUAL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:186:4: ^( GREATER_EQUAL fact_expression )
                     {
-                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_fact_expression891); 
+                    match(input,GREATER_EQUAL,FOLLOW_GREATER_EQUAL_in_fact_expression1009); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression893);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1011);
                     fact_expression();
                     _fsp--;
 
@@ -2579,12 +2932,12 @@
                     }
                     break;
                 case 11 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:163:4: ^( LESS fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:187:4: ^( LESS fact_expression )
                     {
-                    match(input,LESS,FOLLOW_LESS_in_fact_expression900); 
+                    match(input,LESS,FOLLOW_LESS_in_fact_expression1018); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression902);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1020);
                     fact_expression();
                     _fsp--;
 
@@ -2594,12 +2947,12 @@
                     }
                     break;
                 case 12 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:164:4: ^( LESS_EQUAL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:4: ^( LESS_EQUAL fact_expression )
                     {
-                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_fact_expression909); 
+                    match(input,LESS_EQUAL,FOLLOW_LESS_EQUAL_in_fact_expression1027); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression911);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1029);
                     fact_expression();
                     _fsp--;
 
@@ -2609,12 +2962,12 @@
                     }
                     break;
                 case 13 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:165:4: ^( NOT_EQUAL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:189:4: ^( NOT_EQUAL fact_expression )
                     {
-                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_fact_expression918); 
+                    match(input,NOT_EQUAL,FOLLOW_NOT_EQUAL_in_fact_expression1036); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression920);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1038);
                     fact_expression();
                     _fsp--;
 
@@ -2624,30 +2977,30 @@
                     }
                     break;
                 case 14 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:166:4: ^( VK_CONTAINS ( VK_NOT )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:190:4: ^( VK_CONTAINS ( VK_NOT )? fact_expression )
                     {
-                    match(input,VK_CONTAINS,FOLLOW_VK_CONTAINS_in_fact_expression927); 
+                    match(input,VK_CONTAINS,FOLLOW_VK_CONTAINS_in_fact_expression1045); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:166:18: ( VK_NOT )?
-                    int alt34=2;
-                    int LA34_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:190:18: ( VK_NOT )?
+                    int alt40=2;
+                    int LA40_0 = input.LA(1);
 
-                    if ( (LA34_0==VK_NOT) ) {
-                        alt34=1;
+                    if ( (LA40_0==VK_NOT) ) {
+                        alt40=1;
                     }
-                    switch (alt34) {
+                    switch (alt40) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:166:18: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:190:18: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression929); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1047); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression932);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1050);
                     fact_expression();
                     _fsp--;
 
@@ -2657,30 +3010,30 @@
                     }
                     break;
                 case 15 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:167:4: ^( VK_EXCLUDES ( VK_NOT )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:191:4: ^( VK_EXCLUDES ( VK_NOT )? fact_expression )
                     {
-                    match(input,VK_EXCLUDES,FOLLOW_VK_EXCLUDES_in_fact_expression939); 
+                    match(input,VK_EXCLUDES,FOLLOW_VK_EXCLUDES_in_fact_expression1057); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:167:18: ( VK_NOT )?
-                    int alt35=2;
-                    int LA35_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:191:18: ( VK_NOT )?
+                    int alt41=2;
+                    int LA41_0 = input.LA(1);
 
-                    if ( (LA35_0==VK_NOT) ) {
-                        alt35=1;
+                    if ( (LA41_0==VK_NOT) ) {
+                        alt41=1;
                     }
-                    switch (alt35) {
+                    switch (alt41) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:167:18: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:191:18: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression941); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1059); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression944);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1062);
                     fact_expression();
                     _fsp--;
 
@@ -2690,30 +3043,30 @@
                     }
                     break;
                 case 16 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:168:4: ^( VK_MATCHES ( VK_NOT )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:4: ^( VK_MATCHES ( VK_NOT )? fact_expression )
                     {
-                    match(input,VK_MATCHES,FOLLOW_VK_MATCHES_in_fact_expression951); 
+                    match(input,VK_MATCHES,FOLLOW_VK_MATCHES_in_fact_expression1069); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:168:17: ( VK_NOT )?
-                    int alt36=2;
-                    int LA36_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:17: ( VK_NOT )?
+                    int alt42=2;
+                    int LA42_0 = input.LA(1);
 
-                    if ( (LA36_0==VK_NOT) ) {
-                        alt36=1;
+                    if ( (LA42_0==VK_NOT) ) {
+                        alt42=1;
                     }
-                    switch (alt36) {
+                    switch (alt42) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:168:17: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:192:17: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression953); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1071); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression956);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1074);
                     fact_expression();
                     _fsp--;
 
@@ -2723,30 +3076,30 @@
                     }
                     break;
                 case 17 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:169:4: ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:193:4: ^( VK_SOUNDSLIKE ( VK_NOT )? fact_expression )
                     {
-                    match(input,VK_SOUNDSLIKE,FOLLOW_VK_SOUNDSLIKE_in_fact_expression963); 
+                    match(input,VK_SOUNDSLIKE,FOLLOW_VK_SOUNDSLIKE_in_fact_expression1081); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:169:20: ( VK_NOT )?
-                    int alt37=2;
-                    int LA37_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:193:20: ( VK_NOT )?
+                    int alt43=2;
+                    int LA43_0 = input.LA(1);
 
-                    if ( (LA37_0==VK_NOT) ) {
-                        alt37=1;
+                    if ( (LA43_0==VK_NOT) ) {
+                        alt43=1;
                     }
-                    switch (alt37) {
+                    switch (alt43) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:169:20: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:193:20: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression965); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1083); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression968);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1086);
                     fact_expression();
                     _fsp--;
 
@@ -2756,30 +3109,30 @@
                     }
                     break;
                 case 18 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:170:4: ^( VK_MEMBEROF ( VK_NOT )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:194:4: ^( VK_MEMBEROF ( VK_NOT )? fact_expression )
                     {
-                    match(input,VK_MEMBEROF,FOLLOW_VK_MEMBEROF_in_fact_expression975); 
+                    match(input,VK_MEMBEROF,FOLLOW_VK_MEMBEROF_in_fact_expression1093); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:170:18: ( VK_NOT )?
-                    int alt38=2;
-                    int LA38_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:194:18: ( VK_NOT )?
+                    int alt44=2;
+                    int LA44_0 = input.LA(1);
 
-                    if ( (LA38_0==VK_NOT) ) {
-                        alt38=1;
+                    if ( (LA44_0==VK_NOT) ) {
+                        alt44=1;
                     }
-                    switch (alt38) {
+                    switch (alt44) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:170:18: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:194:18: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression977); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1095); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression980);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1098);
                     fact_expression();
                     _fsp--;
 
@@ -2789,48 +3142,48 @@
                     }
                     break;
                 case 19 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:171:4: ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:195:4: ^( ID ( VK_NOT )? ( VT_SQUARE_CHUNK )? fact_expression )
                     {
-                    match(input,ID,FOLLOW_ID_in_fact_expression987); 
+                    match(input,ID,FOLLOW_ID_in_fact_expression1105); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:171:9: ( VK_NOT )?
-                    int alt39=2;
-                    int LA39_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:195:9: ( VK_NOT )?
+                    int alt45=2;
+                    int LA45_0 = input.LA(1);
 
-                    if ( (LA39_0==VK_NOT) ) {
-                        alt39=1;
+                    if ( (LA45_0==VK_NOT) ) {
+                        alt45=1;
                     }
-                    switch (alt39) {
+                    switch (alt45) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:171:9: VK_NOT
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:195:9: VK_NOT
                             {
-                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression989); 
+                            match(input,VK_NOT,FOLLOW_VK_NOT_in_fact_expression1107); 
 
                             }
                             break;
 
                     }
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:171:17: ( VT_SQUARE_CHUNK )?
-                    int alt40=2;
-                    int LA40_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:195:17: ( VT_SQUARE_CHUNK )?
+                    int alt46=2;
+                    int LA46_0 = input.LA(1);
 
-                    if ( (LA40_0==VT_SQUARE_CHUNK) ) {
-                        alt40=1;
+                    if ( (LA46_0==VT_SQUARE_CHUNK) ) {
+                        alt46=1;
                     }
-                    switch (alt40) {
+                    switch (alt46) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:171:17: VT_SQUARE_CHUNK
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:195:17: VT_SQUARE_CHUNK
                             {
-                            match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression992); 
+                            match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1110); 
 
                             }
                             break;
 
                     }
 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression995);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1113);
                     fact_expression();
                     _fsp--;
 
@@ -2840,13 +3193,13 @@
                     }
                     break;
                 case 20 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:172:4: ^( VT_BIND_FIELD VT_LABEL fact_expression )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:196:4: ^( VT_BIND_FIELD VT_LABEL fact_expression )
                     {
-                    match(input,VT_BIND_FIELD,FOLLOW_VT_BIND_FIELD_in_fact_expression1002); 
+                    match(input,VT_BIND_FIELD,FOLLOW_VT_BIND_FIELD_in_fact_expression1120); 
 
                     match(input, Token.DOWN, null); 
-                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression1004); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1006);
+                    match(input,VT_LABEL,FOLLOW_VT_LABEL_in_fact_expression1122); 
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1124);
                     fact_expression();
                     _fsp--;
 
@@ -2856,27 +3209,27 @@
                     }
                     break;
                 case 21 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:173:4: ^( VT_FIELD fact_expression ( fact_expression )? )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:197:4: ^( VT_FIELD fact_expression ( fact_expression )? )
                     {
-                    match(input,VT_FIELD,FOLLOW_VT_FIELD_in_fact_expression1013); 
+                    match(input,VT_FIELD,FOLLOW_VT_FIELD_in_fact_expression1131); 
 
                     match(input, Token.DOWN, null); 
-                    pushFollow(FOLLOW_fact_expression_in_fact_expression1015);
+                    pushFollow(FOLLOW_fact_expression_in_fact_expression1133);
                     fact_expression();
                     _fsp--;
 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:173:31: ( fact_expression )?
-                    int alt41=2;
-                    int LA41_0 = input.LA(1);
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:197:31: ( fact_expression )?
+                    int alt47=2;
+                    int LA47_0 = input.LA(1);
 
-                    if ( (LA41_0==VT_FACT||LA41_0==VT_PAREN_CHUNK||(LA41_0>=VT_FACT_BINDING && LA41_0<=VT_ACCESSOR_PATH)||(LA41_0>=VK_EVAL && LA41_0<=VK_MEMBEROF)||LA41_0==VK_IN||LA41_0==ID||LA41_0==STRING||(LA41_0>=BOOL && LA41_0<=DOUBLE_AMPER)||(LA41_0>=EQUAL && LA41_0<=NOT_EQUAL)||(LA41_0>=FLOAT && LA41_0<=NULL)) ) {
-                        alt41=1;
+                    if ( (LA47_0==VT_FACT||LA47_0==VT_PAREN_CHUNK||(LA47_0>=VT_FACT_BINDING && LA47_0<=VT_ACCESSOR_PATH)||(LA47_0>=VK_EVAL && LA47_0<=VK_MEMBEROF)||LA47_0==VK_IN||LA47_0==ID||LA47_0==STRING||(LA47_0>=BOOL && LA47_0<=DOUBLE_AMPER)||(LA47_0>=EQUAL && LA47_0<=NOT_EQUAL)||(LA47_0>=FLOAT && LA47_0<=NULL)) ) {
+                        alt47=1;
                     }
-                    switch (alt41) {
+                    switch (alt47) {
                         case 1 :
-                            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:173:31: fact_expression
+                            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:197:31: fact_expression
                             {
-                            pushFollow(FOLLOW_fact_expression_in_fact_expression1017);
+                            pushFollow(FOLLOW_fact_expression_in_fact_expression1135);
                             fact_expression();
                             _fsp--;
 
@@ -2892,28 +3245,28 @@
                     }
                     break;
                 case 22 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:174:4: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:198:4: ^( VT_ACCESSOR_PATH ( accessor_element )+ )
                     {
-                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1025); 
+                    match(input,VT_ACCESSOR_PATH,FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1143); 
 
                     match(input, Token.DOWN, null); 
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:174:23: ( accessor_element )+
-                    int cnt42=0;
-                    loop42:
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:198:23: ( accessor_element )+
+                    int cnt48=0;
+                    loop48:
                     do {
-                        int alt42=2;
-                        int LA42_0 = input.LA(1);
+                        int alt48=2;
+                        int LA48_0 = input.LA(1);
 
-                        if ( (LA42_0==VT_ACCESSOR_ELEMENT) ) {
-                            alt42=1;
+                        if ( (LA48_0==VT_ACCESSOR_ELEMENT) ) {
+                            alt48=1;
                         }
 
 
-                        switch (alt42) {
+                        switch (alt48) {
                     	case 1 :
-                    	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:174:23: accessor_element
+                    	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:198:23: accessor_element
                     	    {
-                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression1027);
+                    	    pushFollow(FOLLOW_accessor_element_in_fact_expression1145);
                     	    accessor_element();
                     	    _fsp--;
 
@@ -2922,12 +3275,12 @@
                     	    break;
 
                     	default :
-                    	    if ( cnt42 >= 1 ) break loop42;
+                    	    if ( cnt48 >= 1 ) break loop48;
                                 EarlyExitException eee =
-                                    new EarlyExitException(42, input);
+                                    new EarlyExitException(48, input);
                                 throw eee;
                         }
-                        cnt42++;
+                        cnt48++;
                     } while (true);
 
 
@@ -2936,44 +3289,44 @@
                     }
                     break;
                 case 23 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:175:4: STRING
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:199:4: STRING
                     {
-                    match(input,STRING,FOLLOW_STRING_in_fact_expression1034); 
+                    match(input,STRING,FOLLOW_STRING_in_fact_expression1152); 
 
                     }
                     break;
                 case 24 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:176:4: INT
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:4: INT
                     {
-                    match(input,INT,FOLLOW_INT_in_fact_expression1039); 
+                    match(input,INT,FOLLOW_INT_in_fact_expression1157); 
 
                     }
                     break;
                 case 25 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:177:4: FLOAT
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:201:4: FLOAT
                     {
-                    match(input,FLOAT,FOLLOW_FLOAT_in_fact_expression1044); 
+                    match(input,FLOAT,FOLLOW_FLOAT_in_fact_expression1162); 
 
                     }
                     break;
                 case 26 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:178:4: BOOL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:202:4: BOOL
                     {
-                    match(input,BOOL,FOLLOW_BOOL_in_fact_expression1049); 
+                    match(input,BOOL,FOLLOW_BOOL_in_fact_expression1167); 
 
                     }
                     break;
                 case 27 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:179:4: NULL
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:203:4: NULL
                     {
-                    match(input,NULL,FOLLOW_NULL_in_fact_expression1054); 
+                    match(input,NULL,FOLLOW_NULL_in_fact_expression1172); 
 
                     }
                     break;
                 case 28 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:180:4: VT_PAREN_CHUNK
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:204:4: VT_PAREN_CHUNK
                     {
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression1059); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_fact_expression1177); 
 
                     }
                     break;
@@ -2992,61 +3345,61 @@
 
 
     // $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 )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:207: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_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 )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:208:2: ( ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:208:4: ^( VT_PATTERN_TYPE ( ID )+ ( dimension_definition )* )
             {
-            match(input,VT_PATTERN_TYPE,FOLLOW_VT_PATTERN_TYPE_in_pattern_type1071); 
+            match(input,VT_PATTERN_TYPE,FOLLOW_VT_PATTERN_TYPE_in_pattern_type1189); 
 
             match(input, Token.DOWN, null); 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:22: ( ID )+
-            int cnt44=0;
-            loop44:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:208:22: ( ID )+
+            int cnt50=0;
+            loop50:
             do {
-                int alt44=2;
-                int LA44_0 = input.LA(1);
+                int alt50=2;
+                int LA50_0 = input.LA(1);
 
-                if ( (LA44_0==ID) ) {
-                    alt44=1;
+                if ( (LA50_0==ID) ) {
+                    alt50=1;
                 }
 
 
-                switch (alt44) {
+                switch (alt50) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:22: ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:208:22: ID
             	    {
-            	    match(input,ID,FOLLOW_ID_in_pattern_type1073); 
+            	    match(input,ID,FOLLOW_ID_in_pattern_type1191); 
 
             	    }
             	    break;
 
             	default :
-            	    if ( cnt44 >= 1 ) break loop44;
+            	    if ( cnt50 >= 1 ) break loop50;
                         EarlyExitException eee =
-                            new EarlyExitException(44, input);
+                            new EarlyExitException(50, input);
                         throw eee;
                 }
-                cnt44++;
+                cnt50++;
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:26: ( dimension_definition )*
-            loop45:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:208:26: ( dimension_definition )*
+            loop51:
             do {
-                int alt45=2;
-                int LA45_0 = input.LA(1);
+                int alt51=2;
+                int LA51_0 = input.LA(1);
 
-                if ( (LA45_0==LEFT_SQUARE) ) {
-                    alt45=1;
+                if ( (LA51_0==LEFT_SQUARE) ) {
+                    alt51=1;
                 }
 
 
-                switch (alt45) {
+                switch (alt51) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:184:26: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:208:26: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type1076);
+            	    pushFollow(FOLLOW_dimension_definition_in_pattern_type1194);
             	    dimension_definition();
             	    _fsp--;
 
@@ -3055,7 +3408,7 @@
             	    break;
 
             	default :
-            	    break loop45;
+            	    break loop51;
                 }
             } while (true);
 
@@ -3077,61 +3430,61 @@
 
 
     // $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 )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:211: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 )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:212:2: ( ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:212:4: ^( VT_DATA_TYPE ( ID )+ ( dimension_definition )* )
             {
-            match(input,VT_DATA_TYPE,FOLLOW_VT_DATA_TYPE_in_data_type1090); 
+            match(input,VT_DATA_TYPE,FOLLOW_VT_DATA_TYPE_in_data_type1208); 
 
             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:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:212:19: ( ID )+
+            int cnt52=0;
+            loop52:
             do {
-                int alt46=2;
-                int LA46_0 = input.LA(1);
+                int alt52=2;
+                int LA52_0 = input.LA(1);
 
-                if ( (LA46_0==ID) ) {
-                    alt46=1;
+                if ( (LA52_0==ID) ) {
+                    alt52=1;
                 }
 
 
-                switch (alt46) {
+                switch (alt52) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:19: ID
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:212:19: ID
             	    {
-            	    match(input,ID,FOLLOW_ID_in_data_type1092); 
+            	    match(input,ID,FOLLOW_ID_in_data_type1210); 
 
             	    }
             	    break;
 
             	default :
-            	    if ( cnt46 >= 1 ) break loop46;
+            	    if ( cnt52 >= 1 ) break loop52;
                         EarlyExitException eee =
-                            new EarlyExitException(46, input);
+                            new EarlyExitException(52, input);
                         throw eee;
                 }
-                cnt46++;
+                cnt52++;
             } while (true);
 
-            // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:23: ( dimension_definition )*
-            loop47:
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:212:23: ( dimension_definition )*
+            loop53:
             do {
-                int alt47=2;
-                int LA47_0 = input.LA(1);
+                int alt53=2;
+                int LA53_0 = input.LA(1);
 
-                if ( (LA47_0==LEFT_SQUARE) ) {
-                    alt47=1;
+                if ( (LA53_0==LEFT_SQUARE) ) {
+                    alt53=1;
                 }
 
 
-                switch (alt47) {
+                switch (alt53) {
             	case 1 :
-            	    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:188:23: dimension_definition
+            	    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:212:23: dimension_definition
             	    {
-            	    pushFollow(FOLLOW_dimension_definition_in_data_type1095);
+            	    pushFollow(FOLLOW_dimension_definition_in_data_type1213);
             	    dimension_definition();
             	    _fsp--;
 
@@ -3140,7 +3493,7 @@
             	    break;
 
             	default :
-            	    break loop47;
+            	    break loop53;
                 }
             } while (true);
 
@@ -3162,14 +3515,14 @@
 
 
     // $ANTLR start dimension_definition
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:191:1: dimension_definition : LEFT_SQUARE RIGHT_SQUARE ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:215: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: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
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:216:2: ( LEFT_SQUARE RIGHT_SQUARE )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:216:4: LEFT_SQUARE RIGHT_SQUARE
             {
-            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition1108); 
-            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition1110); 
+            match(input,LEFT_SQUARE,FOLLOW_LEFT_SQUARE_in_dimension_definition1226); 
+            match(input,RIGHT_SQUARE,FOLLOW_RIGHT_SQUARE_in_dimension_definition1228); 
 
             }
 
@@ -3186,38 +3539,38 @@
 
 
     // $ANTLR start accessor_element
-    // /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 )* ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:219: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: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 )* )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:220:2: ( ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:220:4: ^( VT_ACCESSOR_ELEMENT ID ( VT_SQUARE_CHUNK )* )
             {
-            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1122); 
+            match(input,VT_ACCESSOR_ELEMENT,FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1240); 
 
             match(input, Token.DOWN, null); 
-            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:
+            match(input,ID,FOLLOW_ID_in_accessor_element1242); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:220:29: ( VT_SQUARE_CHUNK )*
+            loop54:
             do {
-                int alt48=2;
-                int LA48_0 = input.LA(1);
+                int alt54=2;
+                int LA54_0 = input.LA(1);
 
-                if ( (LA48_0==VT_SQUARE_CHUNK) ) {
-                    alt48=1;
+                if ( (LA54_0==VT_SQUARE_CHUNK) ) {
+                    alt54=1;
                 }
 
 
-                switch (alt48) {
+                switch (alt54) {
             	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-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:220:29: VT_SQUARE_CHUNK
             	    {
-            	    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1126); 
+            	    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1244); 
 
             	    }
             	    break;
 
             	default :
-            	    break loop48;
+            	    break loop54;
                 }
             } while (true);
 
@@ -3239,64 +3592,64 @@
 
 
     // $ANTLR start 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 )? ) ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:223: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: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 )? )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:224:2: ( ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? ) )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:224:4: ^( VT_EXPRESSION_CHAIN ID ( VT_SQUARE_CHUNK )? ( VT_PAREN_CHUNK )? ( expression_chain )? )
             {
-            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1140); 
+            match(input,VT_EXPRESSION_CHAIN,FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1258); 
 
             match(input, Token.DOWN, null); 
-            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);
+            match(input,ID,FOLLOW_ID_in_expression_chain1260); 
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:224:29: ( VT_SQUARE_CHUNK )?
+            int alt55=2;
+            int LA55_0 = input.LA(1);
 
-            if ( (LA49_0==VT_SQUARE_CHUNK) ) {
-                alt49=1;
+            if ( (LA55_0==VT_SQUARE_CHUNK) ) {
+                alt55=1;
             }
-            switch (alt49) {
+            switch (alt55) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:29: VT_SQUARE_CHUNK
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:224:29: VT_SQUARE_CHUNK
                     {
-                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1144); 
+                    match(input,VT_SQUARE_CHUNK,FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1262); 
 
                     }
                     break;
 
             }
 
-            // /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);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:224:46: ( VT_PAREN_CHUNK )?
+            int alt56=2;
+            int LA56_0 = input.LA(1);
 
-            if ( (LA50_0==VT_PAREN_CHUNK) ) {
-                alt50=1;
+            if ( (LA56_0==VT_PAREN_CHUNK) ) {
+                alt56=1;
             }
-            switch (alt50) {
+            switch (alt56) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:46: VT_PAREN_CHUNK
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:224:46: VT_PAREN_CHUNK
                     {
-                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain1147); 
+                    match(input,VT_PAREN_CHUNK,FOLLOW_VT_PAREN_CHUNK_in_expression_chain1265); 
 
                     }
                     break;
 
             }
 
-            // /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);
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:224:62: ( expression_chain )?
+            int alt57=2;
+            int LA57_0 = input.LA(1);
 
-            if ( (LA51_0==VT_EXPRESSION_CHAIN) ) {
-                alt51=1;
+            if ( (LA57_0==VT_EXPRESSION_CHAIN) ) {
+                alt57=1;
             }
-            switch (alt51) {
+            switch (alt57) {
                 case 1 :
-                    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:200:62: expression_chain
+                    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:224:62: expression_chain
                     {
-                    pushFollow(FOLLOW_expression_chain_in_expression_chain1150);
+                    pushFollow(FOLLOW_expression_chain_in_expression_chain1268);
                     expression_chain();
                     _fsp--;
 
@@ -3324,13 +3677,13 @@
 
 
     // $ANTLR start curly_chunk
-    // /Users/porcelli/Documents/dev/drools/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:203:1: curly_chunk : VT_CURLY_CHUNK ;
+    // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:227: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: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
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:228:2: ( VT_CURLY_CHUNK )
+            // /Users/porcelli/Documents/dev/drools-trunk/drools-compiler/src/main/resources/org/drools/lang/Tree2TestDRL.g:228:4: VT_CURLY_CHUNK
             {
-            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1164); 
+            match(input,VT_CURLY_CHUNK,FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1282); 
 
             }
 
@@ -3349,12 +3702,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[]{0xB67FF80000000028L,0x0000000000000001L});
-    public static final BitSet FOLLOW_statement_in_compilation_unit48 = new BitSet(new long[]{0xB67FF80000000028L,0x0000000000000001L});
+    public static final BitSet FOLLOW_package_statement_in_compilation_unit45 = new BitSet(new long[]{0xD9FFE00000000028L,0x0000000000000007L});
+    public static final BitSet FOLLOW_statement_in_compilation_unit48 = new BitSet(new long[]{0xD9FFE00000000028L,0x0000000000000007L});
     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,0x0000000000400000L});
+    public static final BitSet FOLLOW_ID_in_package_id80 = new BitSet(new long[]{0x0000000000000008L,0x0000000001000000L});
     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});
@@ -3363,206 +3716,228 @@
     public static final BitSet FOLLOW_template_in_statement121 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_rule_in_statement126 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_query_in_statement131 = new BitSet(new long[]{0x0000000000000002L});
-    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[]{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,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[]{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[]{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[]{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,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,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,0x0000200000000000L});
-    public static final BitSet FOLLOW_dimension_definition_in_argument286 = new BitSet(new long[]{0x0000000000000002L,0x0000200000000000L});
-    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,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[]{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[]{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});
-    public static final BitSet FOLLOW_BOOL_in_rule_attribute408 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_AGENDA_GROUP_in_rule_attribute418 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_STRING_in_rule_attribute420 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_DURATION_in_rule_attribute429 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_INT_in_rule_attribute431 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute441 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_STRING_in_rule_attribute443 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_AUTO_FOCUS_in_rule_attribute451 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_BOOL_in_rule_attribute453 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute462 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_STRING_in_rule_attribute464 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_DATE_EXPIRES_in_rule_attribute472 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_STRING_in_rule_attribute474 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_ENABLED_in_rule_attribute482 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_BOOL_in_rule_attribute484 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute492 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_STRING_in_rule_attribute494 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute502 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_BOOL_in_rule_attribute504 = new BitSet(new long[]{0x0000000000000008L});
-    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,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,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,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,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,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});
-    public static final BitSet FOLLOW_VK_NOT_in_lhs594 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_lhs596 = new BitSet(new long[]{0x0000000000000008L});
-    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,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,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});
-    public static final BitSet FOLLOW_lhs_in_from_elements646 = new BitSet(new long[]{0x0000000006000000L});
-    public static final BitSet FOLLOW_accumulate_init_clause_in_from_elements649 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_accumulate_id_clause_in_from_elements651 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_COLLECT_in_from_elements659 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_lhs_in_from_elements661 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VK_ENTRY_POINT_in_from_elements668 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VT_ENTRYPOINT_ID_in_from_elements670 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_FROM_SOURCE_in_from_elements677 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_from_elements679 = new BitSet(new long[]{0x0000000010080008L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_from_elements681 = new BitSet(new long[]{0x0000000010000008L});
-    public static final BitSet FOLLOW_expression_chain_in_from_elements684 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause698 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_VK_INIT_in_accumulate_init_clause705 = new BitSet(new long[]{0x0000000000000004L});
-    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,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});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause749 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause763 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_accumulate_id_clause765 = new BitSet(new long[]{0x0000000000080000L});
-    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause767 = new BitSet(new long[]{0x0000000000000008L});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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_pattern_type_in_fact_expression830 = new BitSet(new long[]{0x00000007C0080048L,0x00001BF78440027EL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression832 = new BitSet(new long[]{0x00000007C0080048L,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression865 = new BitSet(new long[]{0x00000007C0080048L,0x00001BF78440027EL});
-    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});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression884 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_GREATER_EQUAL_in_fact_expression891 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression893 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_LESS_in_fact_expression900 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression902 = new BitSet(new long[]{0x0000000000000008L});
-    public static final BitSet FOLLOW_LESS_EQUAL_in_fact_expression909 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_fact_expression_in_fact_expression911 = new BitSet(new long[]{0x0000000000000008L});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression992 = new BitSet(new long[]{0x00000007C0080040L,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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,0x00001BF78440027EL});
-    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});
-    public static final BitSet FOLLOW_STRING_in_fact_expression1034 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INT_in_fact_expression1039 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FLOAT_in_fact_expression1044 = new BitSet(new long[]{0x0000000000000002L});
-    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_PATTERN_TYPE_in_pattern_type1071 = new BitSet(new long[]{0x0000000000000004L});
-    public static final BitSet FOLLOW_ID_in_pattern_type1073 = new BitSet(new long[]{0x0000000000000008L,0x0000200000400000L});
-    public static final BitSet FOLLOW_dimension_definition_in_pattern_type1076 = new BitSet(new long[]{0x0000000000000008L,0x0000200000000000L});
-    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,0x0000200000400000L});
-    public static final BitSet FOLLOW_dimension_definition_in_data_type1095 = new BitSet(new long[]{0x0000000000000008L,0x0000200000000000L});
-    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition1108 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
-    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});
+    public static final BitSet FOLLOW_type_declaration_in_statement136 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VK_IMPORT_in_import_statement148 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_import_name_in_import_statement150 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FUNCTION_IMPORT_in_function_import_statement163 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_FUNCTION_in_function_import_statement165 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_import_name_in_function_import_statement167 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_IMPORT_ID_in_import_name180 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_import_name182 = new BitSet(new long[]{0x0000000000000008L,0x0000000005000000L});
+    public static final BitSet FOLLOW_DOT_STAR_in_import_name185 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_GLOBAL_in_global199 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_global201 = new BitSet(new long[]{0x0000040000000000L});
+    public static final BitSet FOLLOW_VT_GLOBAL_ID_in_global203 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_FUNCTION_in_function216 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_function218 = new BitSet(new long[]{0x0000080000000000L});
+    public static final BitSet FOLLOW_VT_FUNCTION_ID_in_function221 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_parameters_in_function223 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_curly_chunk_in_function225 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_QUERY_in_query238 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_QUERY_ID_in_query240 = new BitSet(new long[]{0x0000100000400000L});
+    public static final BitSet FOLLOW_parameters_in_query242 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_lhs_block_in_query245 = new BitSet(new long[]{0x0000000000000000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_END_in_query247 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PARAM_LIST_in_parameters260 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_param_definition_in_parameters262 = new BitSet(new long[]{0x0000004000000008L,0x0000000001000000L});
+    public static final BitSet FOLLOW_data_type_in_param_definition275 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_argument_in_param_definition278 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ID_in_argument289 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_argument291 = new BitSet(new long[]{0x0000000000000002L,0x0004000000000000L});
+    public static final BitSet FOLLOW_VK_DECLARE_in_type_declaration304 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_TYPE_DECLARE_ID_in_type_declaration306 = new BitSet(new long[]{0x0000000000000000L,0x0000000109000000L});
+    public static final BitSet FOLLOW_decl_metadata_in_type_declaration308 = new BitSet(new long[]{0x0000000000000000L,0x0000000109000000L});
+    public static final BitSet FOLLOW_decl_field_in_type_declaration311 = new BitSet(new long[]{0x0000000000000000L,0x0000000009000000L});
+    public static final BitSet FOLLOW_END_in_type_declaration314 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_AT_in_decl_metadata327 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_decl_metadata329 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_decl_metadata331 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_ID_in_decl_field344 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_decl_field_initialization_in_decl_field346 = new BitSet(new long[]{0x0000004000000000L});
+    public static final BitSet FOLLOW_data_type_in_decl_field349 = new BitSet(new long[]{0x0000000000000008L,0x0000000100000000L});
+    public static final BitSet FOLLOW_decl_metadata_in_decl_field351 = new BitSet(new long[]{0x0000000000000008L,0x0000000100000000L});
+    public static final BitSet FOLLOW_EQUALS_in_decl_field_initialization365 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_decl_field_initialization367 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_TEMPLATE_in_template380 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_TEMPLATE_ID_in_template382 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_template_slot_in_template384 = new BitSet(new long[]{0x0000000000008000L,0x0000000008000000L});
+    public static final BitSet FOLLOW_END_in_template387 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_SLOT_in_template_slot400 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_data_type_in_template_slot402 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_VT_SLOT_ID_in_template_slot404 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_RULE_in_rule417 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_RULE_ID_in_rule419 = new BitSet(new long[]{0x0400000000030000L});
+    public static final BitSet FOLLOW_rule_attributes_in_rule421 = new BitSet(new long[]{0x0400000000020000L});
+    public static final BitSet FOLLOW_when_part_in_rule424 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_VT_RHS_CHUNK_in_rule427 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_WHEN_in_when_part439 = new BitSet(new long[]{0x0000000000400000L});
+    public static final BitSet FOLLOW_lhs_block_in_when_part441 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_RULE_ATTRIBUTES_in_rule_attributes453 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_ATTRIBUTES_in_rule_attributes455 = new BitSet(new long[]{0x01FFE00000000000L});
+    public static final BitSet FOLLOW_rule_attribute_in_rule_attributes458 = new BitSet(new long[]{0x01FFE00000000008L});
+    public static final BitSet FOLLOW_VK_SALIENCE_in_rule_attribute472 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_set_in_rule_attribute474 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_NO_LOOP_in_rule_attribute486 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute488 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_AGENDA_GROUP_in_rule_attribute498 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute500 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DURATION_in_rule_attribute509 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_INT_in_rule_attribute511 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ACTIVATION_GROUP_in_rule_attribute521 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute523 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_AUTO_FOCUS_in_rule_attribute531 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute533 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DATE_EFFECTIVE_in_rule_attribute542 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute544 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DATE_EXPIRES_in_rule_attribute552 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute554 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ENABLED_in_rule_attribute562 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute564 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_RULEFLOW_GROUP_in_rule_attribute572 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute574 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_LOCK_ON_ACTIVE_in_rule_attribute582 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_BOOL_in_rule_attribute584 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_DIALECT_in_rule_attribute592 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_STRING_in_rule_attribute594 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_AND_IMPLICIT_in_lhs_block608 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs_block610 = new BitSet(new long[]{0x0000000087800008L,0x000000000001C408L});
+    public static final BitSet FOLLOW_VT_OR_PREFIX_in_lhs623 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs625 = new BitSet(new long[]{0x0000000087800008L,0x000000000001C408L});
+    public static final BitSet FOLLOW_VT_OR_INFIX_in_lhs633 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs635 = new BitSet(new long[]{0x0000000087800000L,0x000000000001C408L});
+    public static final BitSet FOLLOW_lhs_in_lhs637 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_AND_PREFIX_in_lhs644 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs646 = new BitSet(new long[]{0x0000000087800008L,0x000000000001C408L});
+    public static final BitSet FOLLOW_VT_AND_INFIX_in_lhs654 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs656 = new BitSet(new long[]{0x0000000087800000L,0x000000000001C408L});
+    public static final BitSet FOLLOW_lhs_in_lhs658 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EXISTS_in_lhs665 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs667 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_NOT_in_lhs674 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs676 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EVAL_in_lhs683 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_lhs685 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_FORALL_in_lhs692 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_lhs694 = new BitSet(new long[]{0x0000000087800008L,0x000000000001C408L});
+    public static final BitSet FOLLOW_VK_FROM_in_lhs702 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs704 = new BitSet(new long[]{0x0000000020000000L,0x0000000000420200L});
+    public static final BitSet FOLLOW_from_elements_in_lhs706 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_lhs_pattern_in_lhs712 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VK_ACCUMULATE_in_from_elements724 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_from_elements726 = new BitSet(new long[]{0x0000000018000000L});
+    public static final BitSet FOLLOW_accumulate_init_clause_in_from_elements729 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_accumulate_id_clause_in_from_elements731 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_COLLECT_in_from_elements739 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_lhs_in_from_elements741 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ENTRY_POINT_in_from_elements748 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_ENTRYPOINT_ID_in_from_elements750 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FROM_SOURCE_in_from_elements757 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_from_elements759 = new BitSet(new long[]{0x0000000040100008L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_from_elements761 = new BitSet(new long[]{0x0000000040000008L});
+    public static final BitSet FOLLOW_expression_chain_in_from_elements764 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCUMULATE_INIT_CLAUSE_in_accumulate_init_clause778 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_INIT_in_accumulate_init_clause785 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause787 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_ACTION_in_accumulate_init_clause795 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause797 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_accumulate_init_reverse_clause_in_accumulate_init_clause804 = new BitSet(new long[]{0x0000000000000000L,0x0000000000200000L});
+    public static final BitSet FOLLOW_VK_RESULT_in_accumulate_init_clause811 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_clause813 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_REVERSE_in_accumulate_init_reverse_clause827 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_init_reverse_clause829 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCUMULATE_ID_CLAUSE_in_accumulate_id_clause843 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accumulate_id_clause845 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_accumulate_id_clause847 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_PATTERN_in_lhs_pattern860 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_lhs_pattern862 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_over_clause_in_lhs_pattern865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_OVER_in_over_clause878 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_over_element_in_over_clause880 = new BitSet(new long[]{0x0000000000200008L});
+    public static final BitSet FOLLOW_VT_BEHAVIOR_in_over_element894 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_over_element896 = new BitSet(new long[]{0x0000000000000000L,0x0000000001000000L});
+    public static final BitSet FOLLOW_ID_in_over_element898 = new BitSet(new long[]{0x0000000000100000L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_over_element900 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_DOUBLE_PIPE_in_fact_expression913 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression915 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression917 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_DOUBLE_AMPER_in_fact_expression924 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression926 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression928 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FACT_BINDING_in_fact_expression935 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression937 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression939 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FACT_in_fact_expression946 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_pattern_type_in_fact_expression948 = new BitSet(new long[]{0x0000001F00100048L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression950 = new BitSet(new long[]{0x0000001F00100048L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_VT_FACT_OR_in_fact_expression958 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression960 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression962 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EVAL_in_fact_expression969 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression971 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_IN_in_fact_expression978 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression980 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression983 = new BitSet(new long[]{0x0000001F00100048L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_EQUAL_in_fact_expression991 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression993 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_GREATER_in_fact_expression1000 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1002 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_GREATER_EQUAL_in_fact_expression1009 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1011 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_LESS_in_fact_expression1018 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1020 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_LESS_EQUAL_in_fact_expression1027 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1029 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_NOT_EQUAL_in_fact_expression1036 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1038 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_CONTAINS_in_fact_expression1045 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1047 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1050 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_EXCLUDES_in_fact_expression1057 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1059 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1062 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_MATCHES_in_fact_expression1069 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1071 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1074 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_SOUNDSLIKE_in_fact_expression1081 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1083 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1086 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VK_MEMBEROF_in_fact_expression1093 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1095 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1098 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_ID_in_fact_expression1105 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VK_NOT_in_fact_expression1107 = new BitSet(new long[]{0x0000001F00180040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_fact_expression1110 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1113 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_BIND_FIELD_in_fact_expression1120 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_VT_LABEL_in_fact_expression1122 = new BitSet(new long[]{0x0000001F00100040L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1124 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_FIELD_in_fact_expression1131 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1133 = new BitSet(new long[]{0x0000001F00100048L,0x00037E78110009F8L});
+    public static final BitSet FOLLOW_fact_expression_in_fact_expression1135 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_PATH_in_fact_expression1143 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_accessor_element_in_fact_expression1145 = new BitSet(new long[]{0x0000002000000008L});
+    public static final BitSet FOLLOW_STRING_in_fact_expression1152 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INT_in_fact_expression1157 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FLOAT_in_fact_expression1162 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BOOL_in_fact_expression1167 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NULL_in_fact_expression1172 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_fact_expression1177 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_PATTERN_TYPE_in_pattern_type1189 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_pattern_type1191 = new BitSet(new long[]{0x0000000000000008L,0x0004000001000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_pattern_type1194 = new BitSet(new long[]{0x0000000000000008L,0x0004000000000000L});
+    public static final BitSet FOLLOW_VT_DATA_TYPE_in_data_type1208 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_data_type1210 = new BitSet(new long[]{0x0000000000000008L,0x0004000001000000L});
+    public static final BitSet FOLLOW_dimension_definition_in_data_type1213 = new BitSet(new long[]{0x0000000000000008L,0x0004000000000000L});
+    public static final BitSet FOLLOW_LEFT_SQUARE_in_dimension_definition1226 = new BitSet(new long[]{0x0000000000000000L,0x0008000000000000L});
+    public static final BitSet FOLLOW_RIGHT_SQUARE_in_dimension_definition1228 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VT_ACCESSOR_ELEMENT_in_accessor_element1240 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_accessor_element1242 = new BitSet(new long[]{0x0000000000080008L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_accessor_element1244 = new BitSet(new long[]{0x0000000000080008L});
+    public static final BitSet FOLLOW_VT_EXPRESSION_CHAIN_in_expression_chain1258 = new BitSet(new long[]{0x0000000000000004L});
+    public static final BitSet FOLLOW_ID_in_expression_chain1260 = new BitSet(new long[]{0x0000000040180008L});
+    public static final BitSet FOLLOW_VT_SQUARE_CHUNK_in_expression_chain1262 = new BitSet(new long[]{0x0000000040100008L});
+    public static final BitSet FOLLOW_VT_PAREN_CHUNK_in_expression_chain1265 = new BitSet(new long[]{0x0000000040000008L});
+    public static final BitSet FOLLOW_expression_chain_in_expression_chain1268 = new BitSet(new long[]{0x0000000000000008L});
+    public static final BitSet FOLLOW_VT_CURLY_CHUNK_in_curly_chunk1282 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list